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
