Skip to content

Commit ca5e1cd

Browse files
Merge remote-tracking branch 'origin/dev' into v2
2 parents cd4cbbf + 86e1e0a commit ca5e1cd

File tree

31 files changed

+1597
-577
lines changed

31 files changed

+1597
-577
lines changed

.github/workflows/npmTests.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,4 +41,6 @@ jobs:
4141
RTLIC: ${{ secrets.RTLIC }}
4242

4343
- name: Run npm tests
44+
env:
45+
YARN_IGNORE_NODE: 1
4446
run: go test -v github.com/jfrog/jfrog-cli --timeout 0 --test.npm

artifactory/cli.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1962,6 +1962,19 @@ func curlCmd(c *cli.Context) error {
19621962
if err != nil {
19631963
return err
19641964
}
1965+
1966+
// Check if --server-id is explicitly passed in arguments
1967+
flagIndex, _, _, err := coreutils.FindFlag("--server-id", cliutils.ExtractCommand(c))
1968+
if err != nil {
1969+
return err
1970+
}
1971+
// If --server-id is NOT present, then we check for JFROG_CLI_SERVER_ID env variable
1972+
if flagIndex == -1 {
1973+
if artDetails, err := cliutils.CreateArtifactoryDetailsByFlags(c); err == nil && artDetails.ArtifactoryUrl != "" {
1974+
rtCurlCommand.SetServerDetails(artDetails)
1975+
rtCurlCommand.SetUrl(artDetails.ArtifactoryUrl)
1976+
}
1977+
}
19651978
return commands.Exec(rtCurlCommand)
19661979
}
19671980

@@ -2640,6 +2653,7 @@ func createBuildInfoConfiguration(c *cli.Context) *buildinfocmd.Configuration {
26402653
if flags.EnvExclude == "" {
26412654
flags.EnvExclude = "*password*;*psw*;*secret*;*key*;*token*;*auth*"
26422655
}
2656+
flags.Overwrite = c.Bool("overwrite")
26432657
return flags
26442658
}
26452659

artifactory_test.go

Lines changed: 35 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5543,15 +5543,41 @@ func TestArtifactoryCurl(t *testing.T) {
55435543
_, err := createServerConfigAndReturnPassphrase(t)
55445544
defer deleteServerConfig(t)
55455545
assert.NoError(t, err)
5546-
// Check curl command with config default server
5547-
err = artifactoryCli.WithoutCredentials().Exec("curl", "-XGET", "/api/system/version")
5548-
assert.NoError(t, err)
5549-
// Check curl command with '--server-id' flag
5550-
err = artifactoryCli.WithoutCredentials().Exec("curl", "-XGET", "/api/system/version", "--server-id="+tests.ServerId)
5551-
assert.NoError(t, err)
5552-
// Check curl command with invalid server id - should get an error.
5553-
err = artifactoryCli.WithoutCredentials().Exec("curl", "-XGET", "/api/system/version", "--server-id=not_configured_name_"+tests.ServerId)
5554-
assert.Error(t, err)
5546+
5547+
baseArgs := []string{"curl", "-XGET", "/api/system/version"}
5548+
5549+
testRuns := []struct {
5550+
testName string
5551+
serverIDEnvValue string
5552+
expectedErr bool
5553+
serverID string
5554+
}{
5555+
{"defaultConfig", "", false, ""},
5556+
{"serverIdFlag", "", false, tests.ServerId},
5557+
{"invalidServerId", "", true, "not_configured_name_" + tests.ServerId},
5558+
{"envVarSet", tests.ServerId, false, ""},
5559+
{"envVarWithFlag", tests.ServerId, false, tests.ServerId},
5560+
{"priorityFlagOverEnv", "wrong_server_id", false, tests.ServerId},
5561+
{"priorityEnvOverDefault", tests.ServerId, false, ""},
5562+
}
5563+
5564+
for _, test := range testRuns {
5565+
t.Run(test.testName, func(t *testing.T) {
5566+
setEnvCallBack := clientTestUtils.SetEnvWithCallbackAndAssert(t, coreutils.ServerID, test.serverIDEnvValue)
5567+
5568+
args := append([]string{}, baseArgs...)
5569+
if test.serverID != "" {
5570+
args = append(args, "--server-id="+test.serverID)
5571+
}
5572+
err = artifactoryCli.WithoutCredentials().Exec(args...)
5573+
if test.expectedErr {
5574+
assert.Error(t, err)
5575+
} else {
5576+
assert.NoError(t, err)
5577+
}
5578+
setEnvCallBack()
5579+
})
5580+
}
55555581

55565582
cleanArtifactoryTest()
55575583
}

build/npm/v2-jf/package-lock.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

build/npm/v2-jf/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "jfrog-cli-v2-jf",
3-
"version": "2.73.3",
3+
"version": "2.74.0",
44
"description": "🐸 Command-line interface for JFrog Artifactory, Xray, Distribution, Pipelines and Mission Control 🐸",
55
"homepage": "https://github.com/jfrog/jfrog-cli",
66
"preferGlobal": true,

build/npm/v2/package-lock.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

build/npm/v2/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "jfrog-cli-v2",
3-
"version": "2.73.3",
3+
"version": "2.74.0",
44
"description": "🐸 Command-line interface for JFrog Artifactory, Xray, Distribution, Pipelines and Mission Control 🐸",
55
"homepage": "https://github.com/jfrog/jfrog-cli",
66
"preferGlobal": true,

buildinfo_test.go

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import (
1818
"github.com/jfrog/jfrog-cli-core/v2/common/spec"
1919
"github.com/jfrog/jfrog-client-go/utils/log"
2020

21+
rtBuildInfo "github.com/jfrog/jfrog-cli-artifactory/artifactory/commands/buildinfo"
2122
"github.com/jfrog/jfrog-cli-artifactory/artifactory/commands/generic"
2223
"github.com/jfrog/jfrog-cli-core/v2/artifactory/utils"
2324
"github.com/jfrog/jfrog-cli-core/v2/utils/coreutils"
@@ -267,6 +268,17 @@ func TestBuildPublishDryRun(t *testing.T) {
267268
buildInfo := publishedBuildInfo.BuildInfo
268269
validateBuildInfo(buildInfo, t, 0, 9, tests.RtBuildName1, buildinfo.Generic)
269270

271+
inttestutils.DeleteBuild(serverDetails.ArtifactoryUrl, tests.RtBuildName1, artHttpDetails)
272+
// Verify build publish info overwrite flag with dryrun
273+
for i := 0; i < 2; i++ {
274+
runRt(t, "bp", tests.RtBuildName1, buildNumber)
275+
}
276+
existingBuildInfo, found, err := tests.GetBuildRuns(serverDetails, tests.RtBuildName1)
277+
assertBuildNumberOccurrencesForGivenBuildNameAndNumber(t, existingBuildInfo, 2, found, buildNumber, err)
278+
runRt(t, "bp", tests.RtBuildName1, buildNumber, "--dry-run=true", "--overwrite=true")
279+
// Expect no changes in the build info since it's a dry run
280+
assertBuildNumberOccurrencesForGivenBuildNameAndNumber(t, existingBuildInfo, 2, found, buildNumber, err)
281+
270282
inttestutils.DeleteBuild(serverDetails.ArtifactoryUrl, tests.RtBuildName1, artHttpDetails)
271283
cleanArtifactoryTest()
272284
}
@@ -517,7 +529,9 @@ func testArtifactoryPublishWithoutBuildUrl(t *testing.T, buildName, buildNumber
517529
func TestArtifactoryPublishBuildInfoBuildUrl(t *testing.T) {
518530
initArtifactoryTest(t, "")
519531
buildNumber := "11"
532+
// jfrog-ignore - false positive not a real URL.
520533
buildUrl := "http://example.ci.com"
534+
// jfrog-ignore - false positive not a real URL.
521535
setEnvCallBack := clientTestUtils.SetEnvWithCallbackAndAssert(t, cliutils.BuildUrl, "http://override-me.ci.com")
522536
defer setEnvCallBack()
523537
inttestutils.DeleteBuild(serverDetails.ArtifactoryUrl, tests.RtBuildName1, artHttpDetails)
@@ -538,6 +552,7 @@ func TestArtifactoryPublishBuildInfoBuildUrl(t *testing.T) {
538552
func TestArtifactoryPublishBuildInfoBuildUrlFromEnv(t *testing.T) {
539553
initArtifactoryTest(t, "")
540554
buildNumber := "11"
555+
// jfrog-ignore - false positive not a real URL.
541556
buildUrl := "http://example-env.ci.com"
542557
inttestutils.DeleteBuild(serverDetails.ArtifactoryUrl, tests.RtBuildName1, artHttpDetails)
543558
setEnvCallBack := clientTestUtils.SetEnvWithCallbackAndAssert(t, cliutils.BuildUrl, buildUrl)
@@ -658,6 +673,80 @@ func TestBuildAddGitEnvBuildNameAndNumber(t *testing.T) {
658673
testBuildAddGit(t, true)
659674
}
660675

676+
func TestBuildPublishWithOverwrite(t *testing.T) {
677+
initArtifactoryTest(t, "")
678+
buildName := tests.RtBuildName1
679+
buildNumber := "1"
680+
preReleaseBuildNumber := "1-rc"
681+
defaultNumberOfBuilds := 5
682+
683+
// Clean old build tests if exists
684+
inttestutils.DeleteBuild(serverDetails.ArtifactoryUrl, buildName, artHttpDetails)
685+
686+
// Publish build info without overwrite flag
687+
for i := 0; i < defaultNumberOfBuilds; i++ {
688+
runRt(t, "bp", buildName, buildNumber)
689+
}
690+
for i := 0; i < 2; i++ {
691+
runRt(t, "bp", buildName, preReleaseBuildNumber)
692+
}
693+
publishedBuildInfo, found, err := tests.GetBuildRuns(serverDetails, buildName)
694+
assertNoErrorAndAssertBuildInfoFound(t, err, found)
695+
// Verify if total of 7 build info's are available
696+
assert.Equal(t, 7, len(publishedBuildInfo.BuildsNumbers), "expected five build info's to be available")
697+
698+
buildNumberFrequency := rtBuildInfo.CalculateBuildNumberFrequency(publishedBuildInfo)
699+
// Verify if 5 build info's are available for given build number and 2 for pre-release build number
700+
assert.Equal(t, defaultNumberOfBuilds, buildNumberFrequency[buildNumber])
701+
assert.Equal(t, 2, buildNumberFrequency[preReleaseBuildNumber])
702+
703+
// Publish build info with overwrite flag
704+
runRt(t, "bp", buildName, buildNumber, "--overwrite=true")
705+
publishedBuildInfo, found, err = tests.GetBuildRuns(serverDetails, buildName)
706+
assertNoErrorAndAssertBuildInfoFound(t, err, found)
707+
buildNumbersFrequencyAfterOverwrite := rtBuildInfo.CalculateBuildNumberFrequency(publishedBuildInfo)
708+
// Since overwrite is ran for buildNumber verify if only one build info is available for given build number
709+
assert.Equal(t, 1, buildNumbersFrequencyAfterOverwrite[buildNumber])
710+
// Since overwrite is ran for buildNumber verify no change for preReleaseBuildNumber
711+
assert.Equal(t, 2, buildNumbersFrequencyAfterOverwrite[preReleaseBuildNumber])
712+
713+
// Verify that only one build info is available for given build number with overwrite
714+
runRt(t, "bp", buildName, preReleaseBuildNumber, "--overwrite=true")
715+
publishedBuildInfo, found, err = tests.GetBuildRuns(serverDetails, buildName)
716+
assertNoErrorAndAssertBuildInfoFound(t, err, found)
717+
buildNumbersFrequencyAfterOverwrite = rtBuildInfo.CalculateBuildNumberFrequency(publishedBuildInfo)
718+
// Since overwrite is ran for preReleaseBuildNumber verify no change for buildNumber
719+
assert.Equal(t, 1, buildNumbersFrequencyAfterOverwrite[buildNumber], "expected only one build info to be available")
720+
// Since overwrite is ran for preReleaseBuildNumber verify if only one build info is available for given preReleaseBuildNumber
721+
assert.Equal(t, 1, buildNumbersFrequencyAfterOverwrite[preReleaseBuildNumber])
722+
723+
// Delete existing build info
724+
inttestutils.DeleteBuild(serverDetails.ArtifactoryUrl, buildName, artHttpDetails)
725+
726+
// Run build-publish with overwrite flag and build should be published
727+
runRt(t, "bp", buildName, buildNumber, "--overwrite=true")
728+
publishedBuildInfo, found, err = tests.GetBuildRuns(serverDetails, buildName)
729+
// Verify even though overwrite is used when no build infos are available build info should be published
730+
assertBuildNumberOccurrencesForGivenBuildNameAndNumber(t, publishedBuildInfo, 1, found, buildNumber, err)
731+
732+
// Cleanup
733+
inttestutils.DeleteBuild(serverDetails.ArtifactoryUrl, buildName, artHttpDetails)
734+
cleanArtifactoryTest()
735+
}
736+
737+
func assertBuildNumberOccurrencesForGivenBuildNameAndNumber(t *testing.T, existingBuildInfo *buildinfo.BuildRuns,
738+
expectedOccurrences int, found bool, buildNumber string, err error) {
739+
740+
buildNumbersFrequencyAfterOverwrite := rtBuildInfo.CalculateBuildNumberFrequency(existingBuildInfo)
741+
assertNoErrorAndAssertBuildInfoFound(t, err, found)
742+
assert.Equal(t, expectedOccurrences, buildNumbersFrequencyAfterOverwrite[buildNumber], "expected only one build info to be available")
743+
}
744+
745+
func assertNoErrorAndAssertBuildInfoFound(t *testing.T, err error, found bool) {
746+
assert.NoError(t, err)
747+
assert.True(t, found, "build info was expected to be found")
748+
}
749+
661750
func testBuildAddGit(t *testing.T, useEnvBuildNameAndNumber bool) {
662751
initArtifactoryTest(t, "")
663752
gitCollectCliRunner := coretests.NewJfrogCli(execMain, "jfrog rt", "")

0 commit comments

Comments
 (0)