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 2025-10-03 15:44:41
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/jfrog-cli (Old)
 and      /work/SRC/openSUSE:Factory/.jfrog-cli.new.11973 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "jfrog-cli"

Fri Oct  3 15:44:41 2025 rev:16 rq:1308766 version:2.80.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/jfrog-cli/jfrog-cli.changes      2025-09-29 
16:35:40.979125937 +0200
+++ /work/SRC/openSUSE:Factory/.jfrog-cli.new.11973/jfrog-cli.changes   
2025-10-03 15:45:57.754845478 +0200
@@ -1,0 +2,7 @@
+Fri Oct 03 05:07:21 UTC 2025 - Johannes Kastl 
<[email protected]>
+
+- Update to version 2.80.0:
+  * Bug Fixes
+    - add timestamp as props for python pkg by @reshmifrog in #3144
+
+-------------------------------------------------------------------

Old:
----
  jfrog-cli-2.79.2.obscpio

New:
----
  jfrog-cli-2.80.0.obscpio

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

Other differences:
------------------
++++++ jfrog-cli.spec ++++++
--- /var/tmp/diff_new_pack.GIDr9G/_old  2025-10-03 15:45:59.170904802 +0200
+++ /var/tmp/diff_new_pack.GIDr9G/_new  2025-10-03 15:45:59.170904802 +0200
@@ -19,7 +19,7 @@
 %define executable_name jf
 
 Name:           jfrog-cli
-Version:        2.79.2
+Version:        2.80.0
 Release:        0
 Summary:        A client that automates access to the JFrog products
 License:        Apache-2.0

++++++ _service ++++++
--- /var/tmp/diff_new_pack.GIDr9G/_old  2025-10-03 15:45:59.202906143 +0200
+++ /var/tmp/diff_new_pack.GIDr9G/_new  2025-10-03 15:45:59.210906478 +0200
@@ -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.79.2</param>
+    <param name="revision">v2.80.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.GIDr9G/_old  2025-10-03 15:45:59.238907652 +0200
+++ /var/tmp/diff_new_pack.GIDr9G/_new  2025-10-03 15:45:59.242907819 +0200
@@ -1,6 +1,6 @@
 <servicedata>
 <service name="tar_scm">
                 <param 
name="url">https://github.com/jfrog/jfrog-cli.git</param>
-              <param 
name="changesrevision">6336cdbee40952fe06e2a7adf73b5a46fce72486</param></service></servicedata>
+              <param 
name="changesrevision">d55b5a0231332a482bd5eef2e5f6d66fc1e74066</param></service></servicedata>
 (No newline at EOF)
 

++++++ jfrog-cli-2.79.2.obscpio -> jfrog-cli-2.80.0.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jfrog-cli-2.79.2/build/npm/v2/package-lock.json 
new/jfrog-cli-2.80.0/build/npm/v2/package-lock.json
--- old/jfrog-cli-2.79.2/build/npm/v2/package-lock.json 2025-09-26 
11:53:37.000000000 +0200
+++ new/jfrog-cli-2.80.0/build/npm/v2/package-lock.json 2025-10-02 
12:35:01.000000000 +0200
@@ -1,5 +1,5 @@
 {
   "name": "jfrog-cli-v2",
-  "version": "2.79.2",
+  "version": "2.80.0",
   "lockfileVersion": 2
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jfrog-cli-2.79.2/build/npm/v2/package.json 
new/jfrog-cli-2.80.0/build/npm/v2/package.json
--- old/jfrog-cli-2.79.2/build/npm/v2/package.json      2025-09-26 
11:53:37.000000000 +0200
+++ new/jfrog-cli-2.80.0/build/npm/v2/package.json      2025-10-02 
12:35:01.000000000 +0200
@@ -1,6 +1,6 @@
 {
   "name": "jfrog-cli-v2",
-  "version": "2.79.2",
+  "version": "2.80.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.79.2/build/npm/v2-jf/package-lock.json 
new/jfrog-cli-2.80.0/build/npm/v2-jf/package-lock.json
--- old/jfrog-cli-2.79.2/build/npm/v2-jf/package-lock.json      2025-09-26 
11:53:37.000000000 +0200
+++ new/jfrog-cli-2.80.0/build/npm/v2-jf/package-lock.json      2025-10-02 
12:35:01.000000000 +0200
@@ -1,5 +1,5 @@
 {
   "name": "jfrog-cli-v2-jf",
-  "version": "2.79.2",
+  "version": "2.80.0",
   "lockfileVersion": 1
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jfrog-cli-2.79.2/build/npm/v2-jf/package.json 
new/jfrog-cli-2.80.0/build/npm/v2-jf/package.json
--- old/jfrog-cli-2.79.2/build/npm/v2-jf/package.json   2025-09-26 
11:53:37.000000000 +0200
+++ new/jfrog-cli-2.80.0/build/npm/v2-jf/package.json   2025-10-02 
12:35:01.000000000 +0200
@@ -1,6 +1,6 @@
 {
   "name": "jfrog-cli-v2-jf",
-  "version": "2.79.2",
+  "version": "2.80.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.79.2/go.mod new/jfrog-cli-2.80.0/go.mod
--- old/jfrog-cli-2.79.2/go.mod 2025-09-26 11:53:37.000000000 +0200
+++ new/jfrog-cli-2.80.0/go.mod 2025-10-02 12:35:01.000000000 +0200
@@ -5,6 +5,7 @@
 replace (
        // Should not be updated to 0.2.6 due to a bug 
(https://github.com/jfrog/jfrog-cli-core/pull/372)
        github.com/c-bata/go-prompt => github.com/c-bata/go-prompt v0.2.5
+       github.com/jfrog/jfrog-cli-artifactory => 
github.com/jfrog/jfrog-cli-artifactory v0.7.3-0.20250930060931-d9c7efa90fbb
 
        // Should not be updated to 0.2.0-beta.2 due to a bug 
(https://github.com/jfrog/jfrog-cli-core/pull/372)
        github.com/pkg/term => github.com/pkg/term v1.1.0
@@ -18,11 +19,11 @@
        github.com/jfrog/archiver/v3 v3.6.1
        github.com/jfrog/build-info-go v1.11.0
        github.com/jfrog/gofrog v1.7.6
-       github.com/jfrog/jfrog-cli-artifactory 
v0.7.3-0.20250924123948-4fce9d68fabe
-       github.com/jfrog/jfrog-cli-core/v2 v2.60.1-0.20250925124759-72e2205de3f6
+       github.com/jfrog/jfrog-cli-artifactory 
v0.7.3-0.20250930060931-d9c7efa90fbb
+       github.com/jfrog/jfrog-cli-core/v2 v2.60.1-0.20250929083739-7ec32085edd8
        github.com/jfrog/jfrog-cli-platform-services v1.10.0
        github.com/jfrog/jfrog-cli-security v1.21.8
-       github.com/jfrog/jfrog-client-go v1.55.1-0.20250925123235-756731f0df63
+       github.com/jfrog/jfrog-client-go v1.55.1-0.20250930132408-a9fbd1cd0967
        github.com/jszwec/csvutil v1.10.0
        github.com/manifoldco/promptui v0.9.0
        github.com/stretchr/testify v1.11.1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jfrog-cli-2.79.2/go.sum new/jfrog-cli-2.80.0/go.sum
--- old/jfrog-cli-2.79.2/go.sum 2025-09-26 11:53:37.000000000 +0200
+++ new/jfrog-cli-2.80.0/go.sum 2025-10-02 12:35:01.000000000 +0200
@@ -361,16 +361,16 @@
 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-artifactory v0.7.3-0.20250924123948-4fce9d68fabe 
h1:RTOKkKrAjAn/bV5phpCUgOJY+4LHLpjK1YdwpBSTwGs=
-github.com/jfrog/jfrog-cli-artifactory 
v0.7.3-0.20250924123948-4fce9d68fabe/go.mod 
h1:N1nn6tNbyAjtdhLp89tO1CstT+iWcQSzAJGvAml7Deg=
-github.com/jfrog/jfrog-cli-core/v2 v2.60.1-0.20250925124759-72e2205de3f6 
h1:BA6o4MYduG3IxZbSxqIQQ7maTjUszgK3YOXQrZdP/Rk=
-github.com/jfrog/jfrog-cli-core/v2 
v2.60.1-0.20250925124759-72e2205de3f6/go.mod 
h1:Z1nBKbz0ZOZrOIS9maGp5LZpHaxuufZAABVF+DAz9wo=
+github.com/jfrog/jfrog-cli-artifactory v0.7.3-0.20250930060931-d9c7efa90fbb 
h1:wrl9zkkzfc2lFgEY+LhPbLK5quRX6/N8utq1WVdiM7I=
+github.com/jfrog/jfrog-cli-artifactory 
v0.7.3-0.20250930060931-d9c7efa90fbb/go.mod 
h1:N1nn6tNbyAjtdhLp89tO1CstT+iWcQSzAJGvAml7Deg=
+github.com/jfrog/jfrog-cli-core/v2 v2.60.1-0.20250929083739-7ec32085edd8 
h1:75pslZpPWy6w5mM/mpEssbnKLyivUr7YXkGoUaQY4Oc=
+github.com/jfrog/jfrog-cli-core/v2 
v2.60.1-0.20250929083739-7ec32085edd8/go.mod 
h1:Z1nBKbz0ZOZrOIS9maGp5LZpHaxuufZAABVF+DAz9wo=
 github.com/jfrog/jfrog-cli-platform-services v1.10.0 
h1:O+N/VAF+QjFvq9xkHpmzKLcdl9aJu3IP204Su0L14rw=
 github.com/jfrog/jfrog-cli-platform-services v1.10.0/go.mod 
h1:qbu4iqBST9x8LgD8HhzUm91iOB3vHqtoGmaxOnmw0ok=
 github.com/jfrog/jfrog-cli-security v1.21.8 
h1:yRVOW4FqETd0tVeHxdC7l19aLi5gS3hai9XwkMQuVr8=
 github.com/jfrog/jfrog-cli-security v1.21.8/go.mod 
h1:AYckVBA3qNmCku1MrBLpQwbr9eAZ91U/3zMa88gckD8=
-github.com/jfrog/jfrog-client-go v1.55.1-0.20250925123235-756731f0df63 
h1:jA1EVmPljElsEb8pGboWgf1oDVGj52l8u5hYRmwYMz4=
-github.com/jfrog/jfrog-client-go v1.55.1-0.20250925123235-756731f0df63/go.mod 
h1:UYhn61e3VNb7Oo4dWpzI9TaObxTbdFosagEfcPlkvmg=
+github.com/jfrog/jfrog-client-go v1.55.1-0.20250930132408-a9fbd1cd0967 
h1:+bfy3c+3cIA3waeKVuAaBTFum4eMTiFwzHFe6iGJXD4=
+github.com/jfrog/jfrog-client-go v1.55.1-0.20250930132408-a9fbd1cd0967/go.mod 
h1:UYhn61e3VNb7Oo4dWpzI9TaObxTbdFosagEfcPlkvmg=
 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.79.2/pip_test.go 
new/jfrog-cli-2.80.0/pip_test.go
--- old/jfrog-cli-2.79.2/pip_test.go    2025-09-26 11:53:37.000000000 +0200
+++ new/jfrog-cli-2.80.0/pip_test.go    2025-10-02 12:35:01.000000000 +0200
@@ -8,12 +8,16 @@
        "os/exec"
        "path/filepath"
        "strconv"
+       "strings"
        "testing"
 
+       "github.com/jfrog/jfrog-cli-core/v2/artifactory/utils"
+
        biutils "github.com/jfrog/build-info-go/utils"
        "github.com/jfrog/jfrog-cli-core/v2/utils/coreutils"
        coretests "github.com/jfrog/jfrog-cli-core/v2/utils/tests"
        
"github.com/jfrog/jfrog-cli-security/sca/bom/buildinfo/technologies/python"
+       "github.com/jfrog/jfrog-client-go/artifactory"
        "github.com/jfrog/jfrog-client-go/http/httpclient"
        clientTestUtils "github.com/jfrog/jfrog-client-go/utils/tests"
 
@@ -369,6 +373,228 @@
        assert.Equal(t, expectedModuleId, twineModule.Id)
 }
 
+func TestTwineWithBuildNameAndNumberAndTimeStampProperties(t *testing.T) {
+       if !*tests.TestPip {
+               t.Skip("Skipping test. Requires '-test.pip=true' options.")
+       }
+       initPipTest(t)
+
+       oldHomeDir, newHomeDir := prepareHomeDir(t)
+       defer func() {
+               clientTestUtils.SetEnvAndAssert(t, coreutils.HomeDir, 
oldHomeDir)
+               clientTestUtils.RemoveAllAndAssert(t, newHomeDir)
+       }()
+
+       allTests := []struct {
+               name              string
+               project           string
+               outputFolder      string
+               expectedModuleId  string
+               args              []string
+               expectedArtifacts int
+       }{
+               {"twineWithProps", "pyproject", "twine", 
"jfrog-python-example:1.0", []string{}, 2},
+       }
+
+       for testNumber, test := range allTests {
+               t.Run(test.name, func(t *testing.T) {
+                       cleanVirtualEnv, err := prepareVirtualEnv(t)
+                       assert.NoError(t, err)
+
+                       buildNumber := strconv.Itoa(100 + testNumber)
+                       test.args = append([]string{"twine", "upload", 
"dist/*", "--build-name=" + tests.PipBuildName, "--build-number=" + 
buildNumber}, test.args...)
+                       
verifyBuildNameNumberTimestampPropertiesOnTwineArtifact(t, createPypiProject(t, 
test.outputFolder, test.project, "twine"), buildNumber, test.expectedModuleId, 
test.expectedArtifacts, test.args)
+
+                       cleanVirtualEnv()
+                       inttestutils.DeleteBuild(serverDetails.ArtifactoryUrl, 
tests.PipBuildName, artHttpDetails)
+               })
+       }
+}
+
+func verifyBuildNameNumberTimestampPropertiesOnTwineArtifact(t *testing.T, 
projectPath, buildNumber, expectedModuleId string, expectedArtifacts int, args 
[]string) {
+       wd, err := os.Getwd()
+       assert.NoError(t, err, "Failed to get current dir")
+       chdirCallback := clientTestUtils.ChangeDirWithCallback(t, wd, 
projectPath)
+       defer chdirCallback()
+
+       jfrogCli := coretests.NewJfrogCli(execMain, "jfrog", "")
+       err = jfrogCli.Exec(args...)
+       if err != nil {
+               assert.Fail(t, "Failed executing twine upload command", 
err.Error())
+               return
+       }
+
+       assert.NoError(t, artifactoryCli.Exec("bp", tests.PipBuildName, 
buildNumber))
+
+       publishedBuildInfo, found, err := tests.GetBuildInfo(serverDetails, 
tests.PipBuildName, buildNumber)
+       if err != nil {
+               assert.NoError(t, err)
+               return
+       }
+       if !found {
+               assert.True(t, found, "build info was expected to be found")
+               return
+       }
+       buildInfo := publishedBuildInfo.BuildInfo
+       require.Len(t, buildInfo.Modules, 1)
+       twineModule := buildInfo.Modules[0]
+       assert.Equal(t, buildinfo.Python, twineModule.Type)
+       assert.Len(t, twineModule.Artifacts, expectedArtifacts)
+       assert.Equal(t, expectedModuleId, twineModule.Id)
+
+       serviceManager, err := utils.CreateServiceManager(serverDetails, 3, 
1000, false)
+       if err != nil {
+               return
+       }
+
+       var allErrors []string
+       for _, artifact := range twineModule.Artifacts {
+               errors := verifyBuildProperties(serviceManager, artifact, 
buildinfo.Python, tests.PipBuildName, buildNumber)
+               allErrors = append(allErrors, errors...)
+       }
+
+       if len(allErrors) > 0 {
+               assert.Fail(t, "Missing build properties for the 
artifacts:\n"+strings.Join(allErrors, "\n"))
+       }
+}
+
+func TestTwineAndGenericUploadSameBuildInfo(t *testing.T) {
+       if !*tests.TestArtifactory || !*tests.TestPip {
+               t.Skip("Skipping test. Requires both '-test.artifactory=true' 
and '-test.pip=true' options.")
+       }
+
+       oldHomeDir, newHomeDir := prepareHomeDir(t)
+       defer func() {
+               clientTestUtils.SetEnvAndAssert(t, coreutils.HomeDir, 
oldHomeDir)
+               clientTestUtils.RemoveAllAndAssert(t, newHomeDir)
+       }()
+
+       cleanVirtualEnv, err := prepareVirtualEnv(t)
+       assert.NoError(t, err)
+       defer cleanVirtualEnv()
+
+       projectPath := createPypiProject(t, "twine-generic-test", "pyproject", 
"twine")
+       wd, err := os.Getwd()
+       assert.NoError(t, err, "Failed to get current dir")
+       chdirCallback := clientTestUtils.ChangeDirWithCallback(t, wd, 
projectPath)
+       defer chdirCallback()
+
+       buildName := "test-twine-generic-build"
+       buildNumber := "1"
+
+       jfrogCli := coretests.NewJfrogCli(execMain, "jfrog", "")
+       twineArgs := []string{"twine", "upload", "dist/*", "--build-name=" + 
buildName, "--build-number=" + buildNumber}
+       err = jfrogCli.Exec(twineArgs...)
+       assert.NoError(t, err, "Failed executing twine upload command")
+
+       chdirCallback()
+
+       testFileName := "test-artifact.zip"
+       testFilePath := filepath.Join(t.TempDir(), testFileName)
+       err = os.WriteFile(testFilePath, []byte("test content for generic 
upload"), 0644)
+       assert.NoError(t, err)
+
+       uploadArgs := []string{"upload", testFilePath, tests.RtRepo1 + "/", 
"--build-name=" + buildName, "--build-number=" + buildNumber}
+       err = artifactoryCli.Exec(uploadArgs...)
+       assert.NoError(t, err, "Failed executing generic upload command")
+
+       err = artifactoryCli.Exec("bp", buildName, buildNumber)
+       assert.NoError(t, err, "Failed publishing build info")
+
+       publishedBuildInfo, found, err := tests.GetBuildInfo(serverDetails, 
buildName, buildNumber)
+       assert.NoError(t, err)
+       assert.True(t, found, "build info was expected to be found")
+
+       buildInfo := publishedBuildInfo.BuildInfo
+
+       require.Len(t, buildInfo.Modules, 2, "Expected 2 modules in build info")
+
+       serviceManager, err := utils.CreateServiceManager(serverDetails, 3, 
1000, false)
+       assert.NoError(t, err)
+
+       var allErrors []string
+       for _, module := range buildInfo.Modules {
+               for _, artifact := range module.Artifacts {
+                       errors := verifyBuildProperties(serviceManager, 
artifact, module.Type, buildName, buildNumber)
+                       allErrors = append(allErrors, errors...)
+               }
+       }
+
+       if len(allErrors) > 0 {
+               assert.Fail(t, "Missing build properties for the 
artifacts:\n"+strings.Join(allErrors, "\n"))
+       }
+
+       inttestutils.DeleteBuild(serverDetails.ArtifactoryUrl, buildName, 
artHttpDetails)
+}
+
+func verifyBuildProperties(serviceManager 
artifactory.ArtifactoryServicesManager, artifact buildinfo.Artifact,
+       moduleType buildinfo.ModuleType, expectedBuildName, expectedBuildNumber 
string) []string {
+
+       var errors []string
+
+       relativePath := artifact.OriginalDeploymentRepo + "/" + artifact.Path
+       props, err := serviceManager.GetItemProps(relativePath)
+       if err != nil {
+               return []string{fmt.Sprintf("Failed to get properties for %s 
artifact '%s': %v",
+                       moduleType, artifact.Name, err)}
+       }
+
+       if props == nil {
+               return []string{fmt.Sprintf("Properties are nil for %s artifact 
'%s'",
+                       moduleType, artifact.Name)}
+       }
+
+       errors = append(errors, validateBuildNameProperty(props.Properties, 
moduleType, artifact.Name, expectedBuildName)...)
+       errors = append(errors, validateBuildNumberProperty(props.Properties, 
moduleType, artifact.Name, expectedBuildNumber)...)
+       errors = append(errors, 
validateBuildTimestampProperty(props.Properties, moduleType, artifact.Name)...)
+
+       return errors
+}
+
+func validateBuildNameProperty(properties map[string][]string, moduleType 
buildinfo.ModuleType, artifactName, expectedBuildName string) []string {
+       buildNameProp, exists := properties["build.name"]
+       if !exists {
+               return []string{fmt.Sprintf("Missing build.name property for %s 
artifact '%s'", moduleType, artifactName)}
+       }
+       if !contains(buildNameProp, expectedBuildName) {
+               return []string{fmt.Sprintf("Incorrect build.name for %s 
artifact '%s': expected %s, got %v",
+                       moduleType, artifactName, expectedBuildName, 
buildNameProp)}
+       }
+       return nil
+}
+
+func validateBuildNumberProperty(properties map[string][]string, moduleType 
buildinfo.ModuleType, artifactName, expectedBuildNumber string) []string {
+       buildNumberProp, exists := properties["build.number"]
+       if !exists {
+               return []string{fmt.Sprintf("Missing build.number property for 
%s artifact '%s'", moduleType, artifactName)}
+       }
+       if !contains(buildNumberProp, expectedBuildNumber) {
+               return []string{fmt.Sprintf("Incorrect build.number for %s 
artifact '%s': expected %s, got %v",
+                       moduleType, artifactName, expectedBuildNumber, 
buildNumberProp)}
+       }
+       return nil
+}
+
+func validateBuildTimestampProperty(properties map[string][]string, moduleType 
buildinfo.ModuleType, artifactName string) []string {
+       buildTimestampProp, exists := properties["build.timestamp"]
+       if !exists {
+               return []string{fmt.Sprintf("Missing build.timestamp property 
for %s artifact '%s'", moduleType, artifactName)}
+       }
+
+       if len(buildTimestampProp) == 0 || buildTimestampProp[0] == "" {
+               return []string{fmt.Sprintf("Empty build.timestamp property for 
%s artifact '%s'", moduleType, artifactName)}
+       }
+
+       timestampStr := buildTimestampProp[0]
+       _, err := strconv.ParseInt(timestampStr, 10, 64)
+       if err != nil {
+               return []string{fmt.Sprintf("Invalid build.timestamp format for 
%s artifact '%s': %s",
+                       moduleType, artifactName, timestampStr)}
+       }
+
+       return nil
+}
+
 func TestSetupPipCommand(t *testing.T) {
        if !*tests.TestPip {
                t.Skip("Skipping Pip test. To run Pip test add the 
'-test.pip=true' option.")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/jfrog-cli-2.79.2/utils/cliutils/cli_consts.go 
new/jfrog-cli-2.80.0/utils/cliutils/cli_consts.go
--- old/jfrog-cli-2.79.2/utils/cliutils/cli_consts.go   2025-09-26 
11:53:37.000000000 +0200
+++ new/jfrog-cli-2.80.0/utils/cliutils/cli_consts.go   2025-10-02 
12:35:01.000000000 +0200
@@ -4,7 +4,7 @@
 
 const (
        // General CLI constants
-       CliVersion  = "2.79.2"
+       CliVersion  = "2.80.0"
        ClientAgent = "jfrog-cli-go"
 
        // CLI base commands constants:

++++++ jfrog-cli.obsinfo ++++++
--- /var/tmp/diff_new_pack.GIDr9G/_old  2025-10-03 15:46:01.078984739 +0200
+++ /var/tmp/diff_new_pack.GIDr9G/_new  2025-10-03 15:46:01.086985074 +0200
@@ -1,5 +1,5 @@
 name: jfrog-cli
-version: 2.79.2
-mtime: 1758880417
-commit: 6336cdbee40952fe06e2a7adf73b5a46fce72486
+version: 2.80.0
+mtime: 1759401301
+commit: d55b5a0231332a482bd5eef2e5f6d66fc1e74066
 

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

Reply via email to