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-03-27 16:50:42
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/jfrog-cli (Old)
 and      /work/SRC/openSUSE:Factory/.jfrog-cli.new.8177 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "jfrog-cli"

Fri Mar 27 16:50:42 2026 rev:32 rq:1343107 version:2.97.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/jfrog-cli/jfrog-cli.changes      2026-03-12 
22:26:57.633846311 +0100
+++ /work/SRC/openSUSE:Factory/.jfrog-cli.new.8177/jfrog-cli.changes    
2026-03-27 16:53:23.433201320 +0100
@@ -1,0 +2,72 @@
+Fri Mar 27 05:57:25 UTC 2026 - Johannes Kastl 
<[email protected]>
+
+- Update to version 2.97.0:
+  * New Features
+    - [jfrog-cli-artifactory] XRAY-136990 - Added Dependency
+      Exlcusion Based on Scope #394 (@omerb-jfrog)
+    - [jfrog-cli-security] Add Force specific tech in static sca
+      #655 (@attiasas)
+    - [jfrog-cli-security] Add validation error if required package
+      not installed for the AM #604 (@attiasas)
+    - [jfrog-client-go] Add get evidence version api call #1325
+      (@mnsboev)
+  * Bug Fixes
+    - [jfrog-cli-artifactory] fix conan recipe not in root dir
+      issue #397 (@reshmifrog)
+    - [jfrog-cli-artifactory] Added logic for checking release
+      bundle into release-bundles-v2-jfds #396 (@naveenku-jfrog)
+    - [jfrog-cli-artifactory] Reverting the changes done in PR396
+      #399 (@naveenku-jfrog)
+    - [jfrog-cli-artifactory] Added logic for adding python script
+      by embed package #395 (@naveenku-jfrog)
+    - [jfrog-cli-artifactory] fx helm subdomain issue #400
+      (@reshmifrog)
+    - [jfrog-cli-artifactory] Addressed bughunt bugs and
+      improvements #401 (@naveenku-jfrog)
+    - [jfrog-cli-security] Fix Secret violations parsing static-sca
+      #695 (@attiasas)
+    - [jfrog-cli-security] Display partial results on parsing error
+      #696 (@attiasas)
+    - [jfrog-cli-security] Fix diff cascade removal bug #697
+      (@attiasas)
+    - [jfrog-cli-security] Fix use wrapper mvn #699 (@attiasas)
+    - [jfrog-cli-security] Fix "permission denied" issue with
+      gradlew and MavenW #700 (@eranturgeman)
+    - [jfrog-cli-security] Fix version remediation in CDX mapping
+      #698 (@eranturgeman)
+    - [jfrog-client-go] JA-19680 - Fixed flaky test - Roles should
+      match regardless of order #1323 (@ranjithkm-jfrog)
+    - [jfrog-client-go] Addressed bug for updating project key in
+      release bundle query #1322 (@naveenku-jfrog)
+    - [jfrog-client-go] Fix xray report api #1327 (@attiasas)
+  * Internal Changes
+    - [jfrog-cli] Update dependencies (except evidence) #3403
+      (@RemiBou)
+    - [jfrog-cli-security] Update dependencies #703 (@attiasas)
+  * Other Changes
+    - [build-info-go] conan-recipe-not-in-root-dir #372
+      (@reshmifrog)
+    - [jfrog-cli] respect args passed through cli conan cmds #3378
+      (@reshmifrog)
+    - [jfrog-cli] Updated config in CLI e2e Pipeline for nodepool
+      and integration used #3391 (@neha-mishraa)
+    - [jfrog-cli] Updated nodepool for CLI e2e Pipeline #3392
+      (@neha-mishraa)
+    - [jfrog-cli] Removed project key environment variable from the
+      pipeline config #3393 (@neha-mishraa)
+    - [jfrog-cli] Workflow to rewrite the release notes #3398
+      (@itsmeleela)
+    - [jfrog-cli] Addressed bugs/improvements in huggingface
+      bughunts #3395 (@naveenku-jfrog)
+    - [jfrog-cli] Workflow hardening #3401 (@barakharyati)
+    - [jfrog-cli-artifactory] use conan upload json format #392
+      (@reshmifrog)
+    - [jfrog-cli-artifactory] Skills commands improvements #405
+      (@bhanurp)
+    - [jfrog-cli-core] Get deployment view #1533 (@attiasas)
+    - [jfrog-cli-security] Remove link to platform on audit cmd
+      #706 (@attiasas)
+    - [jfrog-client-go] Change pull_request_target to pull_request
+      in workflow #1330 (@barakharyati)
+
+-------------------------------------------------------------------

Old:
----
  jfrog-cli-2.96.0.obscpio

New:
----
  jfrog-cli-2.97.0.obscpio

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

Other differences:
------------------
++++++ jfrog-cli.spec ++++++
--- /var/tmp/diff_new_pack.6BrWdt/_old  2026-03-27 16:53:26.845344158 +0100
+++ /var/tmp/diff_new_pack.6BrWdt/_new  2026-03-27 16:53:26.845344158 +0100
@@ -19,7 +19,7 @@
 %define executable_name jf
 
 Name:           jfrog-cli
-Version:        2.96.0
+Version:        2.97.0
 Release:        0
 Summary:        A client that automates access to the JFrog products
 License:        Apache-2.0

++++++ _service ++++++
--- /var/tmp/diff_new_pack.6BrWdt/_old  2026-03-27 16:53:26.889346000 +0100
+++ /var/tmp/diff_new_pack.6BrWdt/_new  2026-03-27 16:53:26.893346167 +0100
@@ -3,7 +3,7 @@
     <param name="url">https://github.com/jfrog/jfrog-cli.git</param>
     <param name="scm">git</param>
     <param name="exclude">.git</param>
-    <param name="revision">v2.96.0</param>
+    <param name="revision">v2.97.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.6BrWdt/_old  2026-03-27 16:53:26.917347172 +0100
+++ /var/tmp/diff_new_pack.6BrWdt/_new  2026-03-27 16:53:26.921347339 +0100
@@ -1,6 +1,6 @@
 <servicedata>
 <service name="tar_scm">
                 <param 
name="url">https://github.com/jfrog/jfrog-cli.git</param>
-              <param 
name="changesrevision">98e042f987347358f01d7d9a991e576bc82aa119</param></service></servicedata>
+              <param 
name="changesrevision">f5cdf710b5ab0c6df30b1ba6fb719affb96d1e6d</param></service></servicedata>
 (No newline at EOF)
 

++++++ jfrog-cli-2.96.0.obscpio -> jfrog-cli-2.97.0.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jfrog-cli-2.96.0/.jfrog-pipelines/pipelines.yml 
new/jfrog-cli-2.97.0/.jfrog-pipelines/pipelines.yml
--- old/jfrog-cli-2.96.0/.jfrog-pipelines/pipelines.yml 2026-03-11 
10:17:35.000000000 +0100
+++ new/jfrog-cli-2.97.0/.jfrog-pipelines/pipelines.yml 2026-03-26 
09:04:44.000000000 +0100
@@ -3,7 +3,7 @@
     type: GitRepo
     configuration:
       path: jfrog/jfrog-cli
-      gitProvider: jfrog_cli_github
+      gitProvider: jfrog_cli_gh
       branches:
         include: master
   - name: cli_coreapps_env_details
@@ -23,7 +23,6 @@
         - name: jfrog_cli_tests
       environmentVariables:
         readOnly:
-          JFROG_CLI_BUILD_PROJECT: ""
           GRADLE_OPTS: "-Dorg.gradle.daemon=false"
           RT_VERSION:
             default: "${RT_VERSION}"
@@ -50,7 +49,6 @@
       - name: setup_cli_test
         type: Bash
         configuration:
-          nodePool: k8s_u20
           integrations:
             - name: docker_jfrog_io_reader
           outputResources:
@@ -136,7 +134,6 @@
             - name: jfrog_oauth_token
           inputResources:
             - name: cli_coreapps_env_details
-          nodePool: k8s_u20
           integrations:
             - name: docker_jfrog_io_reader
         execution:
@@ -226,7 +223,6 @@
         type: Matrix
         stepMode: Bash
         configuration:
-          nodePool: k8s_u20
           multiNode: true
           integrations:
             - name: docker_jfrog_io_reader
@@ -328,7 +324,6 @@
       - name: docker_cli_tests
         type: Bash
         configuration:
-          nodePool: k8s_u20
           integrations:
             - name: docker_jfrog_io_reader
             - name: jfrog_cli_tests
@@ -524,7 +519,6 @@
       - name: artifactory_cli_tests
         type: Bash
         configuration:
-          nodePool: k8s_u20
           integrations:
             - name: docker_jfrog_io_reader
           inputResources:
@@ -597,7 +591,6 @@
       - name: go_cli_tests
         type: Bash
         configuration:
-          nodePool: k8s_u20
           integrations:
             - name: docker_jfrog_io_reader
           inputResources:
@@ -662,7 +655,6 @@
       - name: maven_cli_tests
         type: Bash
         configuration:
-          nodePool: k8s_u20
           integrations:
             - name: docker_jfrog_io_reader
           inputResources:
@@ -750,7 +742,6 @@
       - name: npm_cli_tests
         type: Bash
         configuration:
-          nodePool: k8s_u20
           integrations:
             - name: docker_jfrog_io_reader
           inputResources:
@@ -829,7 +820,6 @@
       - name: nuget_cli_tests
         type: Bash
         configuration:
-          nodePool: k8s_u20
           integrations:
             - name: docker_jfrog_io_reader
           inputResources:
@@ -937,7 +927,6 @@
       - name: podman_cli_tests
         type: Bash
         configuration:
-          nodePool: k8s_u20
           integrations:
             - name: docker_jfrog_io_reader
           inputResources:
@@ -1006,7 +995,6 @@
       - name: pip_cli_tests
         type: Bash
         configuration:
-          nodePool: k8s_u20
           integrations:
             - name: docker_jfrog_io_reader
           inputResources:
@@ -1103,7 +1091,6 @@
       - name: pipenv_cli_tests
         type: Bash
         configuration:
-          nodePool: k8s_u20
           integrations:
             - name: docker_jfrog_io_reader
           inputResources:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jfrog-cli-2.96.0/build/npm/v2/package-lock.json 
new/jfrog-cli-2.97.0/build/npm/v2/package-lock.json
--- old/jfrog-cli-2.96.0/build/npm/v2/package-lock.json 2026-03-11 
10:17:35.000000000 +0100
+++ new/jfrog-cli-2.97.0/build/npm/v2/package-lock.json 2026-03-26 
09:04:44.000000000 +0100
@@ -1,5 +1,5 @@
 {
   "name": "jfrog-cli-v2",
-  "version": "2.96.0",
+  "version": "2.97.0",
   "lockfileVersion": 2
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jfrog-cli-2.96.0/build/npm/v2/package.json 
new/jfrog-cli-2.97.0/build/npm/v2/package.json
--- old/jfrog-cli-2.96.0/build/npm/v2/package.json      2026-03-11 
10:17:35.000000000 +0100
+++ new/jfrog-cli-2.97.0/build/npm/v2/package.json      2026-03-26 
09:04:44.000000000 +0100
@@ -1,6 +1,6 @@
 {
   "name": "jfrog-cli-v2",
-  "version": "2.96.0",
+  "version": "2.97.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.96.0/build/npm/v2-jf/package-lock.json 
new/jfrog-cli-2.97.0/build/npm/v2-jf/package-lock.json
--- old/jfrog-cli-2.96.0/build/npm/v2-jf/package-lock.json      2026-03-11 
10:17:35.000000000 +0100
+++ new/jfrog-cli-2.97.0/build/npm/v2-jf/package-lock.json      2026-03-26 
09:04:44.000000000 +0100
@@ -1,5 +1,5 @@
 {
   "name": "jfrog-cli-v2-jf",
-  "version": "2.96.0",
+  "version": "2.97.0",
   "lockfileVersion": 1
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jfrog-cli-2.96.0/build/npm/v2-jf/package.json 
new/jfrog-cli-2.97.0/build/npm/v2-jf/package.json
--- old/jfrog-cli-2.96.0/build/npm/v2-jf/package.json   2026-03-11 
10:17:35.000000000 +0100
+++ new/jfrog-cli-2.97.0/build/npm/v2-jf/package.json   2026-03-26 
09:04:44.000000000 +0100
@@ -1,6 +1,6 @@
 {
   "name": "jfrog-cli-v2-jf",
-  "version": "2.96.0",
+  "version": "2.97.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.96.0/buildtools/cli.go 
new/jfrog-cli-2.97.0/buildtools/cli.go
--- old/jfrog-cli-2.96.0/buildtools/cli.go      2026-03-11 10:17:35.000000000 
+0100
+++ new/jfrog-cli-2.97.0/buildtools/cli.go      2026-03-26 09:04:44.000000000 
+0100
@@ -4,6 +4,7 @@
        "errors"
        "fmt"
        conancommand 
"github.com/jfrog/jfrog-cli-artifactory/artifactory/commands/conan"
+       "io/fs"
        "os"
        "os/exec"
        "path/filepath"
@@ -60,6 +61,8 @@
        gradledoc "github.com/jfrog/jfrog-cli/docs/buildtools/gradle"
        "github.com/jfrog/jfrog-cli/docs/buildtools/gradleconfig"
        "github.com/jfrog/jfrog-cli/docs/buildtools/huggingface"
+       huggingfacedownloaddocs 
"github.com/jfrog/jfrog-cli/docs/buildtools/huggingfacedownload"
+       huggingfaceuploaddocs 
"github.com/jfrog/jfrog-cli/docs/buildtools/huggingfaceupload"
        mvndoc "github.com/jfrog/jfrog-cli/docs/buildtools/mvn"
        "github.com/jfrog/jfrog-cli/docs/buildtools/mvnconfig"
        "github.com/jfrog/jfrog-cli/docs/buildtools/npmcommand"
@@ -84,10 +87,12 @@
 )
 
 const (
-       buildToolsCategory = "Package Managers:"
-       huggingfaceAPI     = "api/huggingfaceml"
-       HF_ENDPOINT        = "HF_ENDPOINT"
-       HF_TOKEN           = "HF_TOKEN"
+       buildToolsCategory      = "Package Managers:"
+       huggingfaceAPI          = "api/huggingfaceml"
+       HF_ENDPOINT             = "HF_ENDPOINT"
+       HF_TOKEN                = "HF_TOKEN"
+       HF_HUB_ETAG_TIMEOUT     = "HF_HUB_ETAG_TIMEOUT"
+       HF_HUB_DOWNLOAD_TIMEOUT = "HF_HUB_DOWNLOAD_TIMEOUT"
 )
 
 func GetCommands() []cli.Command {
@@ -483,13 +488,36 @@
                {
                        Name:        "hugging-face",
                        Aliases:     []string{"hf"},
-                       Flags:       
cliutils.GetCommandFlags(cliutils.HuggingFace),
                        HelpName:    corecommon.CreateUsage("hugging-face", 
huggingface.GetDescription(), huggingface.Usage),
                        Description: huggingface.GetDescription(),
-                       UsageText:   huggingface.GetArguments(),
                        Hidden:      true,
-                       Action:      huggingFaceCmd,
                        Category:    buildToolsCategory,
+                       Action: func(c *cli.Context) error {
+                               if c.Args().Present() {
+                                       return fmt.Errorf("'%s %s' is not a 
valid subcommand. Run 'jf hf --help' for usage", c.App.Name, c.Args().First())
+                               }
+                               return cli.ShowSubcommandHelp(c)
+                       },
+                       Subcommands: []cli.Command{
+                               {
+                                       Name:      "upload",
+                                       Aliases:   []string{"u"},
+                                       Flags:     
cliutils.GetCommandFlags(cliutils.HuggingFaceUpload),
+                                       HelpName:  corecommon.CreateUsage("hf 
upload", huggingfaceuploaddocs.GetDescription(), huggingfaceuploaddocs.Usage),
+                                       Usage:     
huggingfaceuploaddocs.GetDescription(),
+                                       UsageText: 
huggingfaceuploaddocs.GetArguments(),
+                                       Action:    huggingFaceUploadCmd,
+                               },
+                               {
+                                       Name:      "download",
+                                       Aliases:   []string{"d"},
+                                       Flags:     
cliutils.GetCommandFlags(cliutils.HuggingFaceDownload),
+                                       HelpName:  corecommon.CreateUsage("hf 
download", huggingfacedownloaddocs.GetDescription(), 
huggingfacedownloaddocs.Usage),
+                                       Usage:     
huggingfacedownloaddocs.GetDescription(),
+                                       UsageText: 
huggingfacedownloaddocs.GetArguments(),
+                                       Action:    huggingFaceDownloadCmd,
+                               },
+                       },
                },
        })
        return decorateWithFlagCapture(cmds)
@@ -1131,39 +1159,27 @@
        return nil
 }
 
-func huggingFaceCmd(c *cli.Context) error {
-       if show, err := cliutils.ShowCmdHelpIfNeeded(c, c.Args()); show || err 
!= nil {
-               return err
-       }
-       if c.NArg() < 1 {
-               return cliutils.WrongNumberOfArgumentsHandler(c)
-       }
-       args := cliutils.ExtractCommand(c)
-       cmdName, hfArgs := getCommandName(args)
-       switch cmdName {
-       case "u", "upload":
-               return huggingFaceUploadCmd(c, "upload", hfArgs)
-       case "d", "download":
-               return huggingFaceDownloadCmd(c, "download", hfArgs)
-       default:
-               return errorutils.CheckErrorf("unknown HuggingFace command: 
'%s'. Valid commands are: upload (u), download (d)", cmdName)
-       }
-}
-
-func huggingFaceUploadCmd(c *cli.Context, cmdName string, hfArgs []string) 
error {
-       // Upload requires folderPath and repoID
-       if len(hfArgs) < 2 {
+func huggingFaceUploadCmd(c *cli.Context) error {
+       if c.NArg() < 2 {
                return cliutils.PrintHelpAndReturnError("Folder path and 
repository ID are required.", c)
        }
-       folderPath := hfArgs[0]
+       folderPath := c.Args().Get(0)
        if folderPath == "" {
                return cliutils.PrintHelpAndReturnError("Folder path cannot be 
empty.", c)
        }
-       repoID := hfArgs[1]
+       absPath, err := filepath.Abs(folderPath)
+       if err != nil {
+               return fmt.Errorf("failed to resolve absolute path: %w", err)
+       }
+       folderPath = absPath
+       if err = validateFolderHasUploadableFiles(folderPath); err != nil {
+               return err
+       }
+       repoID := c.Args().Get(1)
        if repoID == "" {
                return cliutils.PrintHelpAndReturnError("Repository ID cannot 
be empty.", c)
        }
-       serverDetails, err := getHuggingFaceServerDetails(hfArgs)
+       serverDetails, err := getHuggingFaceServerDetails(c)
        if err != nil {
                return err
        }
@@ -1183,28 +1199,30 @@
        if repoType == "" {
                repoType = "model"
        }
-       huggingFaceUploadCmd := huggingfaceCommands.NewHuggingFaceUpload().
-               SetCommandName(cmdName).
+       if repoType != "model" && repoType != "dataset" {
+               return fmt.Errorf("wrong repo type provided, allowed repo-type 
are : model and dataset")
+       }
+       cmd := huggingfaceCommands.NewHuggingFaceUpload().
+               SetCommandName("upload").
                SetFolderPath(folderPath).
                SetRepoId(repoID).
                SetRepoType(repoType).
                SetRevision(revision).
                SetServerDetails(serverDetails).
                SetBuildConfiguration(buildConfiguration)
-       return commands.Exec(huggingFaceUploadCmd)
+       return commands.Exec(cmd)
 }
 
-func huggingFaceDownloadCmd(c *cli.Context, cmdName string, hfArgs []string) 
error {
-       // Download requires repoID
-       if len(hfArgs) < 1 {
+func huggingFaceDownloadCmd(c *cli.Context) error {
+       if c.NArg() < 1 {
                return cliutils.PrintHelpAndReturnError("Model/Dataset name is 
required.", c)
        }
        const defaultETagTimeout = 86400
-       repoID := hfArgs[0]
+       repoID := c.Args().Get(0)
        if repoID == "" {
                return cliutils.PrintHelpAndReturnError("Model/Dataset name 
cannot be empty.", c)
        }
-       serverDetails, err := getHuggingFaceServerDetails(hfArgs)
+       serverDetails, err := getHuggingFaceServerDetails(c)
        if err != nil {
                return err
        }
@@ -1227,26 +1245,59 @@
        if repoType == "" {
                repoType = "model"
        }
+       if repoType != "model" && repoType != "dataset" {
+               return fmt.Errorf("wrong repo type provided, allowed repo-type 
are : model and dataset")
+       }
        revision := c.String("revision")
        if revision == "" {
                revision = "main"
        }
-       huggingFaceDownloadCmd := huggingfaceCommands.NewHuggingFaceDownload().
-               SetCommandName(cmdName).
+       cmd := huggingfaceCommands.NewHuggingFaceDownload().
+               SetCommandName("download").
                SetRepoId(repoID).
                SetRepoType(repoType).
                SetRevision(revision).
                SetEtagTimeout(etagTimeout).
                SetServerDetails(serverDetails).
                SetBuildConfiguration(buildConfiguration)
-       return commands.Exec(huggingFaceDownloadCmd)
+       return commands.Exec(cmd)
 }
 
-func getHuggingFaceServerDetails(args []string) (*coreConfig.ServerDetails, 
error) {
-       _, serverID, err := coreutils.ExtractServerIdFromCommand(args)
+// validateFolderHasUploadableFiles walks the folder recursively and returns 
an error
+// if no visible (non-hidden) regular files are found. Hidden entries — 
anything whose
+// name starts with '.' (e.g. .git, .DS_Store) — are skipped entirely.
+func validateFolderHasUploadableFiles(folderPath string) error {
+       found := false
+       err := filepath.WalkDir(folderPath, func(path string, d fs.DirEntry, 
walkErr error) error {
+               if walkErr != nil {
+                       return walkErr
+               }
+               name := d.Name()
+               // Skip hidden files and directories (e.g. .git, .DS_Store).
+               if len(name) > 0 && name[0] == '.' {
+                       if d.IsDir() {
+                               return filepath.SkipDir
+                       }
+                       return nil
+               }
+               // A visible regular file counts as uploadable content.
+               if !d.IsDir() {
+                       found = true
+                       return filepath.SkipAll
+               }
+               return nil
+       })
        if err != nil {
-               return nil, fmt.Errorf("failed to extract server ID: %w", err)
+               return fmt.Errorf("failed to read folder '%s': %w", folderPath, 
err)
+       }
+       if !found {
+               return fmt.Errorf("folder '%s' contains no uploadable files 
(only hidden files or empty directories were found)", folderPath)
        }
+       return nil
+}
+
+func getHuggingFaceServerDetails(c *cli.Context) (*coreConfig.ServerDetails, 
error) {
+       serverID := c.String("server-id")
        if serverID == "" {
                serverDetails, err := coreConfig.GetDefaultServerConf()
                if err != nil {
@@ -1257,7 +1308,7 @@
                }
                return serverDetails, nil
        }
-       serverDetails, err := coreConfig.GetSpecificConfig(serverID, true, true)
+       serverDetails, err := coreConfig.GetSpecificConfig(serverID, true, 
false)
        if err != nil {
                return nil, fmt.Errorf("failed to get server configuration for 
ID '%s': %w", serverID, err)
        }
@@ -1265,26 +1316,37 @@
 }
 
 func updateHuggingFaceEnv(c *cli.Context, serverDetails 
*coreConfig.ServerDetails) error {
-       if os.Getenv(HF_ENDPOINT) == "" {
-               repoKey := c.String("repo-key")
-               if repoKey == "" {
-                       return cliutils.PrintHelpAndReturnError("Please specify 
a repository key.", c)
-               }
+       repoKey := c.String("repo-key")
+       if repoKey != "" {
                hfEndpoint := serverDetails.GetArtifactoryUrl() + 
huggingfaceAPI + "/" + repoKey
                err := os.Setenv(HF_ENDPOINT, hfEndpoint)
                if err != nil {
                        return err
                }
        }
-       if os.Getenv(HF_TOKEN) == "" {
-               accessToken := serverDetails.GetAccessToken()
-               if accessToken == "" {
-                       return cliutils.PrintHelpAndReturnError("You need to 
specify an access token.", c)
-               }
-               err := os.Setenv(HF_TOKEN, accessToken)
-               if err != nil {
-                       return err
-               }
+       accessToken := serverDetails.GetAccessToken()
+       if accessToken == "" {
+               return cliutils.PrintHelpAndReturnError("Access token is 
expired or missing, please either use rt ping command or update access token.", 
c)
+       }
+       err := os.Setenv(HF_TOKEN, accessToken)
+       if err != nil {
+               return err
+       }
+       etagTimeout := c.Int("hf-hub-etag-timeout")
+       if etagTimeout == 0 {
+               etagTimeout = 86400
+       }
+       err = os.Setenv(HF_HUB_ETAG_TIMEOUT, strconv.Itoa(etagTimeout))
+       if err != nil {
+               return err
+       }
+       downloadTimeout := c.Int("hf-hub-download-timeout")
+       if downloadTimeout == 0 {
+               downloadTimeout = 86400
+       }
+       err = os.Setenv(HF_HUB_DOWNLOAD_TIMEOUT, strconv.Itoa(downloadTimeout))
+       if err != nil {
+               return err
        }
        return nil
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jfrog-cli-2.96.0/conan_test.go 
new/jfrog-cli-2.97.0/conan_test.go
--- old/jfrog-cli-2.96.0/conan_test.go  2026-03-11 10:17:35.000000000 +0100
+++ new/jfrog-cli-2.97.0/conan_test.go  2026-03-26 09:04:44.000000000 +0100
@@ -454,6 +454,30 @@
        return projectPath
 }
 
+func createConanProjectNoName(t *testing.T, outputFolder string) string {
+       projectSrc := 
filepath.Join(filepath.FromSlash(tests.GetTestResourcesPath()), "conan", 
"conanproject-noname")
+       tmpDir, cleanupCallback := 
coretests.CreateTempDirWithCallbackAndAssert(t)
+
+       projectPath := filepath.Join(tmpDir, outputFolder)
+       require.NoError(t, biutils.CopyDir(projectSrc, projectPath, true, nil))
+
+       t.Cleanup(cleanupCallback)
+
+       return projectPath
+}
+
+func createConanProjectSubdir(t *testing.T, outputFolder string) string {
+       projectSrc := 
filepath.Join(filepath.FromSlash(tests.GetTestResourcesPath()), "conan", 
"conanproject-subdir")
+       tmpDir, cleanupCallback := 
coretests.CreateTempDirWithCallbackAndAssert(t)
+
+       projectPath := filepath.Join(tmpDir, outputFolder)
+       require.NoError(t, biutils.CopyDir(projectSrc, projectPath, true, nil))
+
+       t.Cleanup(cleanupCallback)
+
+       return projectPath
+}
+
 func configureConanRemote(t *testing.T) {
        // Remove existing remote if any
        _ = exec.Command("conan", "remote", "remove", 
tests.ConanVirtualRepo).Run()
@@ -472,6 +496,209 @@
        _ = exec.Command("conan", "remote", "remove", 
tests.ConanLocalRepo).Run()
 }
 
+// TestConanInstallRequiresNoRecipe tests 'jf conan install --requires' 
without any conanfile.
+func TestConanInstallRequiresNoRecipe(t *testing.T) {
+       initConanTest(t)
+       buildNumber := "1"
+
+       // Create empty project dir (no conanfile)
+       tmpDir, cleanupCallback := 
coretests.CreateTempDirWithCallbackAndAssert(t)
+       t.Cleanup(cleanupCallback)
+       projectPath := filepath.Join(tmpDir, "no-recipe-test")
+       require.NoError(t, os.MkdirAll(projectPath, 0755))
+
+       wd, err := os.Getwd()
+       require.NoError(t, err)
+       chdirCallback := clientTestUtils.ChangeDirWithCallback(t, wd, 
projectPath)
+       defer chdirCallback()
+
+       configureConanRemote(t)
+       defer cleanupConanRemote()
+
+       jfrogCli := coretests.NewJfrogCli(execMain, "jfrog", "")
+       args := []string{
+               "conan", "install",
+               "--requires", "zlib/1.3.1",
+               "--build", "missing",
+               "-r", tests.ConanVirtualRepo,
+               "--build-name=" + tests.ConanBuildName,
+               "--build-number=" + buildNumber,
+       }
+       require.NoError(t, jfrogCli.Exec(args...), "conan install --requires 
should succeed without a conanfile")
+
+       require.NoError(t, artifactoryCli.Exec("bp", tests.ConanBuildName, 
buildNumber))
+       defer inttestutils.DeleteBuild(serverDetails.ArtifactoryUrl, 
tests.ConanBuildName, artHttpDetails)
+
+       publishedBuildInfo, found, err := tests.GetBuildInfo(serverDetails, 
tests.ConanBuildName, buildNumber)
+       require.NoError(t, err)
+       require.True(t, found, "build info was expected to be found")
+
+       buildInfoModules := publishedBuildInfo.BuildInfo.Modules
+       require.Len(t, buildInfoModules, 1, "Expected 1 module")
+       assert.Equal(t, buildinfo.Conan, buildInfoModules[0].Type, "Module type 
should be conan")
+       assert.GreaterOrEqual(t, len(buildInfoModules[0].Dependencies), 1, 
"Expected at least 1 dependency (zlib)")
+}
+
+// TestConanInstallWithNameVersionOverrides tests conan install with --name 
and --version overrides
+// applied to a local conanfile.py. Conan 2.x does not allow --name/--version 
with --requires,
+// so a conanfile is required.
+func TestConanInstallWithNameVersionOverrides(t *testing.T) {
+       initConanTest(t)
+       buildNumber := "1"
+
+       projectPath := createConanProjectNoName(t, 
"conan-name-version-override-test")
+       wd, err := os.Getwd()
+       require.NoError(t, err)
+       chdirCallback := clientTestUtils.ChangeDirWithCallback(t, wd, 
projectPath)
+       defer chdirCallback()
+
+       configureConanRemote(t)
+       defer cleanupConanRemote()
+
+       jfrogCli := coretests.NewJfrogCli(execMain, "jfrog", "")
+       args := []string{
+               "conan", "install", ".",
+               "--build", "missing",
+               "--name", "my-custom-project",
+               "--version", "2.5.0",
+               "-r", tests.ConanVirtualRepo,
+               "--build-name=" + tests.ConanBuildName,
+               "--build-number=" + buildNumber,
+       }
+       require.NoError(t, jfrogCli.Exec(args...))
+
+       require.NoError(t, artifactoryCli.Exec("bp", tests.ConanBuildName, 
buildNumber))
+       defer inttestutils.DeleteBuild(serverDetails.ArtifactoryUrl, 
tests.ConanBuildName, artHttpDetails)
+
+       publishedBuildInfo, found, err := tests.GetBuildInfo(serverDetails, 
tests.ConanBuildName, buildNumber)
+       require.NoError(t, err)
+       require.True(t, found, "build info was expected to be found")
+
+       buildInfoModules := publishedBuildInfo.BuildInfo.Modules
+       require.Len(t, buildInfoModules, 1)
+       assert.Equal(t, "my-custom-project:2.5.0", buildInfoModules[0].Id,
+               "Module ID should reflect --name and --version overrides")
+       assert.GreaterOrEqual(t, len(buildInfoModules[0].Dependencies), 1)
+}
+
+// TestConanInstallRecipeInSubdir tests 'jf conan install <subdir>' where the 
recipe is not in cwd.
+func TestConanInstallRecipeInSubdir(t *testing.T) {
+       initConanTest(t)
+       buildNumber := "1"
+
+       projectPath := createConanProjectSubdir(t, "conan-subdir-install-test")
+       wd, err := os.Getwd()
+       require.NoError(t, err)
+       chdirCallback := clientTestUtils.ChangeDirWithCallback(t, wd, 
projectPath)
+       defer chdirCallback()
+
+       configureConanRemote(t)
+       defer cleanupConanRemote()
+
+       jfrogCli := coretests.NewJfrogCli(execMain, "jfrog", "")
+       args := []string{
+               "conan", "install", "recipes/mylib",
+               "--build=missing",
+               "-r", tests.ConanVirtualRepo,
+               "--build-name=" + tests.ConanBuildName,
+               "--build-number=" + buildNumber,
+       }
+       require.NoError(t, jfrogCli.Exec(args...), "conan install with recipe 
in subdirectory should succeed")
+
+       require.NoError(t, artifactoryCli.Exec("bp", tests.ConanBuildName, 
buildNumber))
+       defer inttestutils.DeleteBuild(serverDetails.ArtifactoryUrl, 
tests.ConanBuildName, artHttpDetails)
+
+       publishedBuildInfo, found, err := tests.GetBuildInfo(serverDetails, 
tests.ConanBuildName, buildNumber)
+       require.NoError(t, err)
+       require.True(t, found, "build info was expected to be found")
+
+       buildInfoModules := publishedBuildInfo.BuildInfo.Modules
+       require.Len(t, buildInfoModules, 1)
+       assert.Equal(t, buildinfo.Conan, buildInfoModules[0].Type)
+       assert.Equal(t, "cli-test-subdir-package:1.0.0", buildInfoModules[0].Id,
+               "Module ID should come from the subdirectory's conanfile.py")
+       assert.GreaterOrEqual(t, len(buildInfoModules[0].Dependencies), 1)
+}
+
+// TestConanCreateRecipeInSubdir tests 'jf conan create <subdir>' where the 
recipe is not in cwd.
+func TestConanCreateRecipeInSubdir(t *testing.T) {
+       initConanTest(t)
+       buildNumber := "1"
+
+       projectPath := createConanProjectSubdir(t, "conan-subdir-create-test")
+       wd, err := os.Getwd()
+       require.NoError(t, err)
+       chdirCallback := clientTestUtils.ChangeDirWithCallback(t, wd, 
projectPath)
+       defer chdirCallback()
+
+       configureConanRemote(t)
+       defer cleanupConanRemote()
+
+       jfrogCli := coretests.NewJfrogCli(execMain, "jfrog", "")
+       createArgs := []string{
+               "conan", "create", "recipes/mylib",
+               "--build=missing",
+               "--build-name=" + tests.ConanBuildName,
+               "--build-number=" + buildNumber,
+       }
+       require.NoError(t, jfrogCli.Exec(createArgs...), "conan create with 
recipe in subdirectory should succeed")
+
+       require.NoError(t, artifactoryCli.Exec("bp", tests.ConanBuildName, 
buildNumber))
+       defer inttestutils.DeleteBuild(serverDetails.ArtifactoryUrl, 
tests.ConanBuildName, artHttpDetails)
+
+       publishedBuildInfo, found, err := tests.GetBuildInfo(serverDetails, 
tests.ConanBuildName, buildNumber)
+       require.NoError(t, err)
+       require.True(t, found, "build info was expected to be found")
+
+       buildInfoModules := publishedBuildInfo.BuildInfo.Modules
+       require.Len(t, buildInfoModules, 1)
+       assert.Equal(t, "cli-test-subdir-package:1.0.0", buildInfoModules[0].Id)
+       assert.GreaterOrEqual(t, len(buildInfoModules[0].Dependencies), 1)
+}
+
+// TestConanInstallMultipleRequires tests --requires with multiple 
dependencies.
+func TestConanInstallMultipleRequires(t *testing.T) {
+       initConanTest(t)
+       buildNumber := "1"
+
+       tmpDir, cleanupCallback := 
coretests.CreateTempDirWithCallbackAndAssert(t)
+       t.Cleanup(cleanupCallback)
+       projectPath := filepath.Join(tmpDir, "multi-requires-test")
+       require.NoError(t, os.MkdirAll(projectPath, 0755))
+
+       wd, err := os.Getwd()
+       require.NoError(t, err)
+       chdirCallback := clientTestUtils.ChangeDirWithCallback(t, wd, 
projectPath)
+       defer chdirCallback()
+
+       configureConanRemote(t)
+       defer cleanupConanRemote()
+
+       jfrogCli := coretests.NewJfrogCli(execMain, "jfrog", "")
+       args := []string{
+               "conan", "install",
+               "--requires", "zlib/1.3.1",
+               "--requires", "bzip2/1.0.8",
+               "--build", "missing",
+               "-r", tests.ConanVirtualRepo,
+               "--build-name=" + tests.ConanBuildName,
+               "--build-number=" + buildNumber,
+       }
+       require.NoError(t, jfrogCli.Exec(args...))
+
+       require.NoError(t, artifactoryCli.Exec("bp", tests.ConanBuildName, 
buildNumber))
+       defer inttestutils.DeleteBuild(serverDetails.ArtifactoryUrl, 
tests.ConanBuildName, artHttpDetails)
+
+       publishedBuildInfo, found, err := tests.GetBuildInfo(serverDetails, 
tests.ConanBuildName, buildNumber)
+       require.NoError(t, err)
+       require.True(t, found, "build info was expected to be found")
+
+       buildInfoModules := publishedBuildInfo.BuildInfo.Modules
+       require.Len(t, buildInfoModules, 1)
+       assert.GreaterOrEqual(t, len(buildInfoModules[0].Dependencies), 2,
+               "Expected at least 2 dependencies (zlib + bzip2)")
+}
+
 // TestConanCreateWithProjectKey tests that 'jf conan create --project=<key>' 
stores build info
 // in the correct local build dir (SHA includes the project key).
 func TestConanCreateWithProjectKey(t *testing.T) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jfrog-cli-2.96.0/docs/buildtools/huggingface/help.go 
new/jfrog-cli-2.97.0/docs/buildtools/huggingface/help.go
--- old/jfrog-cli-2.96.0/docs/buildtools/huggingface/help.go    2026-03-11 
10:17:35.000000000 +0100
+++ new/jfrog-cli-2.97.0/docs/buildtools/huggingface/help.go    2026-03-26 
09:04:44.000000000 +0100
@@ -6,27 +6,3 @@
 func GetDescription() string {
        return `Download or upload models/datasets from/to HuggingFace Hub.`
 }
-
-func GetArguments() string {
-       return `        download <model-name>
-               Download a model/dataset from HuggingFace Hub.
-               model-name
-                       The HuggingFace model repository ID (e.g., 
'bert-base-uncased' or 'username/model-name').
-
-       upload <folder-path> <repo-id>
-               Upload a model or dataset folder to HuggingFace Hub.
-               folder-path
-                       Path to the folder to upload.
-               repo-id
-                       The HuggingFace repository ID (e.g., 
'username/model-name' or 'username/dataset-name').
-
-       Command options:
-               --revision
-                       [Optional] The revision (commit hash, branch name, or 
tag) to download/upload. Defaults to main branch if not specified.
-
-               --repo-type
-                       [Optional] The repository type. Can be 'model' or 
'dataset'. Default: 'model'.
-
-               --etag-timeout
-                       [Optional] [Download only] Timeout in seconds for ETag 
validation. Default: 86400 seconds (24 hours).`
-}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/jfrog-cli-2.96.0/docs/buildtools/huggingfacedownload/help.go 
new/jfrog-cli-2.97.0/docs/buildtools/huggingfacedownload/help.go
--- old/jfrog-cli-2.96.0/docs/buildtools/huggingfacedownload/help.go    
1970-01-01 01:00:00.000000000 +0100
+++ new/jfrog-cli-2.97.0/docs/buildtools/huggingfacedownload/help.go    
2026-03-26 09:04:44.000000000 +0100
@@ -0,0 +1,28 @@
+package huggingfacedownload
+
+var Usage = []string{"hf download <model-name>"}
+
+func GetDescription() string {
+       return `Download a model or dataset from HuggingFace Hub.`
+}
+
+func GetArguments() string {
+       return `        model-name
+               The HuggingFace model repository ID (e.g., 'bert-base-uncased' 
or 'username/model-name').
+
+       Command options:
+               --repo-key
+                       [Mandatory] The Artifactory repository key to route the 
download through.
+
+               --revision
+                       [Optional] The revision (commit hash, branch name, or 
tag) to download. Default: 'main'.
+
+               --repo-type
+                       [Optional] The repository type. Can be 'model' or 
'dataset'. Default: 'model'.
+
+               --hf-hub-etag-timeout
+                       [Optional] Timeout in seconds for ETag validation. 
Default: 86400 (24 hours).
+
+               --hf-hub-download-timeout
+                       [Optional] Timeout in seconds for Download. Default: 
86400 (24 hours).`
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/jfrog-cli-2.96.0/docs/buildtools/huggingfaceupload/help.go 
new/jfrog-cli-2.97.0/docs/buildtools/huggingfaceupload/help.go
--- old/jfrog-cli-2.96.0/docs/buildtools/huggingfaceupload/help.go      
1970-01-01 01:00:00.000000000 +0100
+++ new/jfrog-cli-2.97.0/docs/buildtools/huggingfaceupload/help.go      
2026-03-26 09:04:44.000000000 +0100
@@ -0,0 +1,31 @@
+package huggingfaceupload
+
+var Usage = []string{"hf upload <folder-path> <repo-id>"}
+
+func GetDescription() string {
+       return `Upload a model or dataset folder to HuggingFace Hub.`
+}
+
+func GetArguments() string {
+       return `        folder-path
+               Path to the folder to upload.
+
+       repo-id
+               The HuggingFace repository ID (e.g., 'username/model-name' or 
'username/dataset-name').
+
+       Command options:
+               --repo-key
+                       [Mandatory] The Artifactory repository key to route the 
upload through.
+
+               --revision
+                       [Optional] The revision (branch name, tag, or commit 
hash) to upload to. Default: 'main'.
+
+               --repo-type
+                       [Optional] The repository type. Can be 'model' or 
'dataset'. Default: 'model'.
+
+               --hf-hub-etag-timeout
+                       [Optional] Timeout in seconds for ETag validation. 
Default: 86400 (24 hours).
+
+               --hf-hub-download-timeout
+                       [Optional] Timeout in seconds for Download. Default: 
86400 (24 hours).`
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jfrog-cli-2.96.0/go.mod new/jfrog-cli-2.97.0/go.mod
--- old/jfrog-cli-2.96.0/go.mod 2026-03-11 10:17:35.000000000 +0100
+++ new/jfrog-cli-2.97.0/go.mod 2026-03-26 09:04:44.000000000 +0100
@@ -16,15 +16,15 @@
        github.com/docker/docker v28.5.2+incompatible
        github.com/gocarina/gocsv v0.0.0-20240520201108-78e41c74b4b1
        github.com/jfrog/archiver/v3 v3.6.3
-       github.com/jfrog/build-info-go v1.13.1-0.20260216093441-40a4dc563294
+       github.com/jfrog/build-info-go v1.13.1-0.20260313042712-238e6dca3dce
        github.com/jfrog/gofrog v1.7.6
-       github.com/jfrog/jfrog-cli-application 
v1.0.2-0.20260216085810-1ade6c26b3df
-       github.com/jfrog/jfrog-cli-artifactory 
v0.8.1-0.20260310063831-ad6064f2f373
-       github.com/jfrog/jfrog-cli-core/v2 v2.60.1-0.20260225195817-bc599cec3973
+       github.com/jfrog/jfrog-cli-application 
v1.0.2-0.20260318084604-1c4533510620
+       github.com/jfrog/jfrog-cli-artifactory 
v0.8.1-0.20260325060310-a7ee867a2090
+       github.com/jfrog/jfrog-cli-core/v2 v2.60.1-0.20260324124720-40db37833f61
        github.com/jfrog/jfrog-cli-evidence v0.8.3-0.20260202100913-d9ee9476845a
        github.com/jfrog/jfrog-cli-platform-services 
v1.10.1-0.20260306102152-984d60a80cec
-       github.com/jfrog/jfrog-cli-security v1.26.4
-       github.com/jfrog/jfrog-client-go v1.55.1-0.20260310073256-b6a77f9c75e5
+       github.com/jfrog/jfrog-cli-security v1.26.6
+       github.com/jfrog/jfrog-client-go v1.55.1-0.20260325143056-bdd18b12bbca
        github.com/jszwec/csvutil v1.10.0
        github.com/manifoldco/promptui v0.9.0
        github.com/spf13/viper v1.21.0
@@ -246,12 +246,12 @@
 
 //replace github.com/ktrysmt/go-bitbucket => github.com/ktrysmt/go-bitbucket 
v0.9.80
 
-//replace github.com/jfrog/jfrog-cli-core/v2 => ../jfrog-cli-core
-
-// replace github.com/jfrog/jfrog-cli-artifactory => 
github.com/fluxxBot/jfrog-cli-artifactory v0.0.0-20260130044429-464a5025d08a
+// replace github.com/jfrog/jfrog-cli-artifactory => 
github.com/reshmifrog/jfrog-cli-artifactory v0.0.0-20260303084642-b208fbba798b
 
 //replace github.com/jfrog/build-info-go => github.com/fluxxBot/build-info-go 
v1.10.10-0.20260105070825-d3f36f619ba5
 
+// replace github.com/jfrog/build-info-go => 
github.com/reshmifrog/build-info-go v1.10.11-0.20260303032831-71878c7210bf
+
 //replace github.com/jfrog/jfrog-cli-core/v2 => 
github.com/fluxxBot/jfrog-cli-core/v2 v2.58.1-0.20260105065921-c6488910f44c
 
 //replace github.com/jfrog/jfrog-client-go => github.com/jfrog/jfrog-client-go 
v1.54.2-0.20251007084958-5eeaa42c31a6
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jfrog-cli-2.96.0/go.sum new/jfrog-cli-2.97.0/go.sum
--- old/jfrog-cli-2.96.0/go.sum 2026-03-11 10:17:35.000000000 +0100
+++ new/jfrog-cli-2.97.0/go.sum 2026-03-26 09:04:44.000000000 +0100
@@ -407,8 +407,8 @@
 github.com/jellydator/ttlcache/v3 v3.4.0/go.mod 
h1:Hw9EgjymziQD3yGsQdf1FqFdpp7YjFMd4Srg5EJlgD4=
 github.com/jfrog/archiver/v3 v3.6.3 
h1:hkAmPjBw393tPmQ07JknLNWFNZjXdy2xFEnOW9wwOxI=
 github.com/jfrog/archiver/v3 v3.6.3/go.mod 
h1:5V9l+Fte30Y4qe9dUOAd3yNTf8lmtVNuhKNrvI8PMhg=
-github.com/jfrog/build-info-go v1.13.1-0.20260216093441-40a4dc563294 
h1:7aJGdrjibtWT1VPLH+GYyoZsAsoca8/fMrvGIvkZ8Fs=
-github.com/jfrog/build-info-go v1.13.1-0.20260216093441-40a4dc563294/go.mod 
h1:+OCtMb22/D+u7Wne5lzkjJjaWr0LRZcHlDwTH86Mpwo=
+github.com/jfrog/build-info-go v1.13.1-0.20260313042712-238e6dca3dce 
h1:Ozuq6iZEFbE8GNk5ROMa0w+v2kmeUdUj95gVN636Lus=
+github.com/jfrog/build-info-go v1.13.1-0.20260313042712-238e6dca3dce/go.mod 
h1:+OCtMb22/D+u7Wne5lzkjJjaWr0LRZcHlDwTH86Mpwo=
 github.com/jfrog/froggit-go v1.21.1 
h1:I/XUOO6GQ1d/rmBlM361F8T654C3ohIWrpw23xNL9JY=
 github.com/jfrog/froggit-go v1.21.1/go.mod 
h1:umBiakJB0CSPFfe0AHVaC3n9xsmUT7NGkDCny3bRchI=
 github.com/jfrog/go-mockhttp v0.3.1 
h1:/wac8v4GMZx62viZmv4wazB5GNKs+GxawuS1u3maJH8=
@@ -417,20 +417,20 @@
 github.com/jfrog/gofrog v1.7.6/go.mod 
h1:ntr1txqNOZtHplmaNd7rS4f8jpA5Apx8em70oYEe7+4=
 github.com/jfrog/jfrog-apps-config v1.0.1 
h1:mtv6k7g8A8BVhlHGlSveapqf4mJfonwvXYLipdsOFMY=
 github.com/jfrog/jfrog-apps-config v1.0.1/go.mod 
h1:8AIIr1oY9JuH5dylz2S6f8Ym2MaadPLR6noCBO4C22w=
-github.com/jfrog/jfrog-cli-application v1.0.2-0.20260216085810-1ade6c26b3df 
h1:raSyae8/h1y8HtzFLf7vZZj91fP/qD94AX+biwBJiqs=
-github.com/jfrog/jfrog-cli-application 
v1.0.2-0.20260216085810-1ade6c26b3df/go.mod 
h1:xum2HquWO5uExa/A7MQs3TgJJVEeoqTR+6Z4mfBr1Xw=
-github.com/jfrog/jfrog-cli-artifactory v0.8.1-0.20260310063831-ad6064f2f373 
h1:9rgBl0MuJfPX6khjwai0jqwOOCkytTH0DOEcmih1PRQ=
-github.com/jfrog/jfrog-cli-artifactory 
v0.8.1-0.20260310063831-ad6064f2f373/go.mod 
h1:zjbDerW+Pin6VExtlgwRtpnvtI/ySJTnmqnOwXbsrmc=
-github.com/jfrog/jfrog-cli-core/v2 v2.60.1-0.20260225195817-bc599cec3973 
h1:awB01Y4m0cWzmXuR3waf5IQnoQxDlbUmqT+FMWOpjbs=
-github.com/jfrog/jfrog-cli-core/v2 
v2.60.1-0.20260225195817-bc599cec3973/go.mod 
h1:yhi+XpiEx18a3t8CZ6M2VpAf3EGqKpBhTzoPBTFe0dk=
+github.com/jfrog/jfrog-cli-application v1.0.2-0.20260318084604-1c4533510620 
h1:Y1oEM6cZGh0cLCkV2oBXGTIj9LdoRgR2yUR7zfpPXBg=
+github.com/jfrog/jfrog-cli-application 
v1.0.2-0.20260318084604-1c4533510620/go.mod 
h1:xum2HquWO5uExa/A7MQs3TgJJVEeoqTR+6Z4mfBr1Xw=
+github.com/jfrog/jfrog-cli-artifactory v0.8.1-0.20260325060310-a7ee867a2090 
h1:8Bd8AfOZdVCBVsDf1cOxLIt9K26NpcNVypLC4b7i17w=
+github.com/jfrog/jfrog-cli-artifactory 
v0.8.1-0.20260325060310-a7ee867a2090/go.mod 
h1:kgw6gIQvJx9bCcOdtAGSUEiCz7nNQmaFbFvNg6byZ6I=
+github.com/jfrog/jfrog-cli-core/v2 v2.60.1-0.20260324124720-40db37833f61 
h1:fPGsJPPFCBr9qE9n0+fobbRZOdN2m2Ovr//8K07jil4=
+github.com/jfrog/jfrog-cli-core/v2 
v2.60.1-0.20260324124720-40db37833f61/go.mod 
h1:yhi+XpiEx18a3t8CZ6M2VpAf3EGqKpBhTzoPBTFe0dk=
 github.com/jfrog/jfrog-cli-evidence v0.8.3-0.20260202100913-d9ee9476845a 
h1:lTOAhUjKcOmM/0Kbj4V+I/VHPlW7YNAhIEVpGnCM5mI=
 github.com/jfrog/jfrog-cli-evidence 
v0.8.3-0.20260202100913-d9ee9476845a/go.mod 
h1:+XrcuHeakfxzARpmIr/bagjtfiRewpCbiPm0PDuKSIQ=
 github.com/jfrog/jfrog-cli-platform-services 
v1.10.1-0.20260306102152-984d60a80cec 
h1:d8CJ/LUGjNwPDPfYLJkAQJNmu+GCWxFsjZrmTcuV5wY=
 github.com/jfrog/jfrog-cli-platform-services 
v1.10.1-0.20260306102152-984d60a80cec/go.mod 
h1:n18milUWaaWv6o0bWeEDuoweACoZHRTtQPZpyXBPjEs=
-github.com/jfrog/jfrog-cli-security v1.26.4 
h1:2kvJefd0zLmDyGzXgrzGQiFscB5qV6zYLmyqEvSKhd4=
-github.com/jfrog/jfrog-cli-security v1.26.4/go.mod 
h1:FhNjY3JXnnqiniApkyU26dwlI8X9jnvjdXuVL9pUdIY=
-github.com/jfrog/jfrog-client-go v1.55.1-0.20260310073256-b6a77f9c75e5 
h1:BBo1kC74XgmFh4B5cNEhC/mhb70/ScLoDNw+P0d26rg=
-github.com/jfrog/jfrog-client-go v1.55.1-0.20260310073256-b6a77f9c75e5/go.mod 
h1:sCE06+GngPoyrGO0c+vmhgMoVSP83UMNiZnIuNPzU8U=
+github.com/jfrog/jfrog-cli-security v1.26.6 
h1:flsz2hulbgIy99C8gPzXtmNCA57YkcioJvoHCo/Fi+s=
+github.com/jfrog/jfrog-cli-security v1.26.6/go.mod 
h1:979Kb3ffhGuPFB6yG+Zr2aWM0J8y49vxlIgsV0A84m0=
+github.com/jfrog/jfrog-client-go v1.55.1-0.20260325143056-bdd18b12bbca 
h1:31JlAee5cXgyTHPqgyZQfQtmlkuIZX7964V614NWJAo=
+github.com/jfrog/jfrog-client-go v1.55.1-0.20260325143056-bdd18b12bbca/go.mod 
h1:sCE06+GngPoyrGO0c+vmhgMoVSP83UMNiZnIuNPzU8U=
 github.com/jhump/protoreflect v1.17.0 
h1:qOEr613fac2lOuTgWN4tPAtLL7fUSbuJL5X5XumQh94=
 github.com/jhump/protoreflect v1.17.0/go.mod 
h1:h9+vUUL38jiBzck8ck+6G/aeMX8Z4QUY/NiJPwPNi+8=
 github.com/jmespath/go-jmespath v0.4.1-0.20220621161143-b0104c826a24 
h1:liMMTbpW34dhU4az1GN0pTPADwNmvoRSeoZ6PItiqnY=
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/jfrog-cli-2.96.0/testdata/conan/conanproject-noname/conanfile.py 
new/jfrog-cli-2.97.0/testdata/conan/conanproject-noname/conanfile.py
--- old/jfrog-cli-2.96.0/testdata/conan/conanproject-noname/conanfile.py        
1970-01-01 01:00:00.000000000 +0100
+++ new/jfrog-cli-2.97.0/testdata/conan/conanproject-noname/conanfile.py        
2026-03-26 09:04:44.000000000 +0100
@@ -0,0 +1,11 @@
+from conan import ConanFile
+
+
+class TestConan(ConanFile):
+    requires = "zlib/1.3.1"
+
+    def build(self):
+        self.output.info("Building test package")
+
+    def package(self):
+        pass
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/jfrog-cli-2.96.0/testdata/conan/conanproject-subdir/recipes/mylib/conanfile.py
 
new/jfrog-cli-2.97.0/testdata/conan/conanproject-subdir/recipes/mylib/conanfile.py
--- 
old/jfrog-cli-2.96.0/testdata/conan/conanproject-subdir/recipes/mylib/conanfile.py
  1970-01-01 01:00:00.000000000 +0100
+++ 
new/jfrog-cli-2.97.0/testdata/conan/conanproject-subdir/recipes/mylib/conanfile.py
  2026-03-26 09:04:44.000000000 +0100
@@ -0,0 +1,13 @@
+from conan import ConanFile
+
+
+class TestConan(ConanFile):
+    name = "cli-test-subdir-package"
+    version = "1.0.0"
+    requires = "zlib/1.3.1"
+
+    def build(self):
+        self.output.info("Building test package from subdirectory")
+
+    def package(self):
+        pass
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jfrog-cli-2.96.0/utils/cliutils/cli_consts.go 
new/jfrog-cli-2.97.0/utils/cliutils/cli_consts.go
--- old/jfrog-cli-2.96.0/utils/cliutils/cli_consts.go   2026-03-11 
10:17:35.000000000 +0100
+++ new/jfrog-cli-2.97.0/utils/cliutils/cli_consts.go   2026-03-26 
09:04:44.000000000 +0100
@@ -4,7 +4,7 @@
 
 const (
        // General CLI constants
-       CliVersion  = "2.96.0"
+       CliVersion  = "2.97.0"
        ClientAgent = "jfrog-cli-go"
 
        // CLI base commands constants:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jfrog-cli-2.96.0/utils/cliutils/commandsflags.go 
new/jfrog-cli-2.97.0/utils/cliutils/commandsflags.go
--- old/jfrog-cli-2.96.0/utils/cliutils/commandsflags.go        2026-03-11 
10:17:35.000000000 +0100
+++ new/jfrog-cli-2.97.0/utils/cliutils/commandsflags.go        2026-03-26 
09:04:44.000000000 +0100
@@ -79,6 +79,8 @@
        Poetry                 = "poetry"
        Helm                   = "helm"
        HuggingFace            = "hugging-face"
+       HuggingFaceUpload      = "hugging-face-upload"
+       HuggingFaceDownload    = "hugging-face-download"
        RubyConfig             = "ruby-config"
        Conan                  = "conan"
        Ping                   = "ping"
@@ -596,10 +598,11 @@
        Draft          = "draft"
 
        // HuggingFace flags
-       Revision    = "revision"
-       RepoType    = "repo-type"
-       EtagTimeout = "etag-timeout"
-       RepoKey     = "repo-key"
+       Revision             = "revision"
+       RepoType             = "repo-type"
+       HfHubEtagTimeout     = "hf-hub-etag-timeout"
+       HfHubDownloadTimeout = "hf-hub-download-timeout"
+       RepoKey              = "repo-key"
 )
 
 var flagsMap = map[string]cli.Flag{
@@ -1760,17 +1763,21 @@
                Name:  Revision,
                Usage: "[Default: main] The specific revision, branch, or tag 
to download. Defaults to main branch if not specified.` `",
        },
-       EtagTimeout: cli.StringFlag{
-               Name:  EtagTimeout,
+       HfHubEtagTimeout: cli.IntFlag{
+               Name:  HfHubEtagTimeout,
                Usage: "Timeout in seconds for ETag validation. Defaults to 
86400 (24 hours).` `",
        },
+       HfHubDownloadTimeout: cli.IntFlag{
+               Name:  HfHubDownloadTimeout,
+               Usage: "Timeout in seconds for Download. Defaults to 86400 (24 
hours).` `",
+       },
        RepoType: cli.StringFlag{
                Name:  RepoType,
                Usage: "[Default: model] Type of repository. Can be 'model', 
'dataset'.` `",
        },
        RepoKey: cli.StringFlag{
                Name:  RepoKey,
-               Usage: "Repository Key for uploading/downloading 
dataset/models.",
+               Usage: "[Optional] Repository Key for uploading/downloading 
dataset/models.` `",
        },
 }
 
@@ -2005,7 +2012,13 @@
                BuildName, BuildNumber, module, Project, serverId, username, 
password,
        },
        HuggingFace: {
-               BuildName, BuildNumber, module, Project, serverId, Revision, 
RepoType, EtagTimeout, RepoKey,
+               BuildName, BuildNumber, module, Project, serverId, Revision, 
RepoType, HfHubEtagTimeout, RepoKey, HfHubDownloadTimeout,
+       },
+       HuggingFaceUpload: {
+               BuildName, BuildNumber, module, Project, serverId, Revision, 
RepoType, RepoKey, HfHubEtagTimeout, HfHubDownloadTimeout,
+       },
+       HuggingFaceDownload: {
+               BuildName, BuildNumber, module, Project, serverId, Revision, 
RepoType, HfHubEtagTimeout, RepoKey, HfHubDownloadTimeout,
        },
        RubyConfig: {
                global, serverIdResolve, serverIdDeploy, repoResolve, 
repoDeploy,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jfrog-cli-2.96.0/utils/cliutils/utils_test.go 
new/jfrog-cli-2.97.0/utils/cliutils/utils_test.go
--- old/jfrog-cli-2.96.0/utils/cliutils/utils_test.go   2026-03-11 
10:17:35.000000000 +0100
+++ new/jfrog-cli-2.97.0/utils/cliutils/utils_test.go   2026-03-26 
09:04:44.000000000 +0100
@@ -130,6 +130,9 @@
        assert.NoError(t, err)
        assert.False(t, shouldCheck)
        setEnvCallback()
+       // Explicitly unset the env var in case it was pre-set in the 
environment (e.g. in CI),
+       // so it does not interfere with the remaining assertions in this test.
+       assert.NoError(t, os.Unsetenv(JfrogCliAvoidNewVersionWarning))
 
        // First run, should be true
        shouldCheck, err = shouldCheckLatestCliVersion()

++++++ jfrog-cli.obsinfo ++++++
--- /var/tmp/diff_new_pack.6BrWdt/_old  2026-03-27 16:53:28.737423363 +0100
+++ /var/tmp/diff_new_pack.6BrWdt/_new  2026-03-27 16:53:28.741423531 +0100
@@ -1,5 +1,5 @@
 name: jfrog-cli
-version: 2.96.0
-mtime: 1773220655
-commit: 98e042f987347358f01d7d9a991e576bc82aa119
+version: 2.97.0
+mtime: 1774512284
+commit: f5cdf710b5ab0c6df30b1ba6fb719affb96d1e6d
 

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

Reply via email to