diff --git a/.github/workflows/nugetTests.yml b/.github/workflows/nugetTests.yml index 98ca0e586..59d96286a 100644 --- a/.github/workflows/nugetTests.yml +++ b/.github/workflows/nugetTests.yml @@ -44,12 +44,12 @@ jobs: - name: Install NuGet uses: nuget/setup-nuget@v2 with: - nuget-version: '6.x' + nuget-version: '5.0.0' - name: Install .NET uses: actions/setup-dotnet@v4 with: - dotnet-version: '6.x' + dotnet-version: '5.0.0' - name: Setup Go with cache uses: jfrog/.github/actions/install-go-with-cache@main diff --git a/buildtools/cli.go b/buildtools/cli.go index fa7d87993..60ab0baf7 100644 --- a/buildtools/cli.go +++ b/buildtools/cli.go @@ -566,9 +566,18 @@ func NugetCmd(c *cli.Context) error { return err } + allowInsecureConnection, err := cliutils.ExtractBoolFlagFromArgs(&filteredNugetArgs, "allow-insecure-connections") + if err != nil { + return err + } + nugetCmd := dotnet.NewNugetCommand() - nugetCmd.SetServerDetails(rtDetails).SetRepoName(targetRepo).SetBuildConfiguration(buildConfiguration). - SetBasicCommand(filteredNugetArgs[0]).SetUseNugetV2(useNugetV2) + nugetCmd.SetServerDetails(rtDetails). + SetRepoName(targetRepo). + SetBuildConfiguration(buildConfiguration). + SetBasicCommand(filteredNugetArgs[0]). + SetUseNugetV2(useNugetV2). + SetAllowInsecureConnections(allowInsecureConnection) // Since we are using the values of the command's arguments and flags along the buildInfo collection process, // we want to separate the actual NuGet basic command (restore/build...) from the arguments and flags if len(filteredNugetArgs) > 1 { diff --git a/go.mod b/go.mod index 5791e80aa..b21db9958 100644 --- a/go.mod +++ b/go.mod @@ -167,12 +167,12 @@ require ( gopkg.in/yaml.v3 v3.0.1 // indirect ) -// replace github.com/jfrog/jfrog-cli-core/v2 => github.com/jfrog/jfrog-cli-core/v2 v2.31.1-0.20241113152357-24197a744331 +replace github.com/jfrog/jfrog-cli-core/v2 => github.com/EyalDelarea/jfrog-cli-core/v2 v2.0.0-20241114105558-ffd4d869d4b0 -// replace github.com/jfrog/jfrog-cli-security => github.com/jfrog/jfrog-cli-security v1.12.5-0.20241107141149-42cf964808a1 +replace github.com/jfrog/jfrog-cli-security => github.com/EyalDelarea/jfrog-cli-security v0.0.0-20241114092834-aff9aaf573ba // replace github.com/jfrog/jfrog-client-go => github.com/jfrog/jfrog-client-go v1.28.1-0.20240918081224-1c584cc334c7 -// replace github.com/jfrog/build-info-go => github.com/jfrog/build-info-go v1.8.9-0.20240918150101-ad5b10435a12 +replace github.com/jfrog/build-info-go => github.com/EyalDelarea/build-info-go v0.0.0-20241114092335-1c47774e5ded // replace github.com/jfrog/gofrog => github.com/jfrog/gofrog dev diff --git a/go.sum b/go.sum index f3263fde9..1b259c6f0 100644 --- a/go.sum +++ b/go.sum @@ -10,6 +10,12 @@ github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0 github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/CycloneDX/cyclonedx-go v0.9.0 h1:inaif7qD8bivyxp7XLgxUYtOXWtDez7+j72qKTMQTb8= github.com/CycloneDX/cyclonedx-go v0.9.0/go.mod h1:NE/EWvzELOFlG6+ljX/QeMlVt9VKcTwu8u0ccsACEsw= +github.com/EyalDelarea/build-info-go v0.0.0-20241114092335-1c47774e5ded h1:GMCP2b4v6N/tKZBQIwtneO2CJEOmt741VGse5288Im4= +github.com/EyalDelarea/build-info-go v0.0.0-20241114092335-1c47774e5ded/go.mod h1:JcISnovFXKx3wWf3p1fcMmlPdt6adxScXvoJN4WXqIE= +github.com/EyalDelarea/jfrog-cli-core/v2 v2.0.0-20241114105558-ffd4d869d4b0 h1:KP/+ILK0qeTkV+YTG61o0QVKe6l/iczVi41u52qDcGY= +github.com/EyalDelarea/jfrog-cli-core/v2 v2.0.0-20241114105558-ffd4d869d4b0/go.mod h1:Lj9khgWhazp6RoiBk/AJts3O3iaSM4x/3OqYUfKqL54= +github.com/EyalDelarea/jfrog-cli-security v0.0.0-20241114092834-aff9aaf573ba h1:Q45EF0k22gMvkDJqWK+CVtufrw32nL/kkJ/AE/jhI0c= +github.com/EyalDelarea/jfrog-cli-security v0.0.0-20241114092834-aff9aaf573ba/go.mod h1:5LBGwth7TXkEH8MO0JJXvpoRktMAV2BK7Q5nQePNrv4= github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= @@ -161,8 +167,6 @@ github.com/jedib0t/go-pretty/v6 v6.6.1 h1:iJ65Xjb680rHcikRj6DSIbzCex2huitmc7bDtx github.com/jedib0t/go-pretty/v6 v6.6.1/go.mod h1:zbn98qrYlh95FIhwwsbIip0LYpwSG8SUOScs+v9/t0E= github.com/jfrog/archiver/v3 v3.6.1 h1:LOxnkw9pOn45DzCbZNFV6K0+6dCsQ0L8mR3ZcujO5eI= github.com/jfrog/archiver/v3 v3.6.1/go.mod h1:VgR+3WZS4N+i9FaDwLZbq+jeU4B4zctXL+gL4EMzfLw= -github.com/jfrog/build-info-go v1.10.5 h1:cW03JlPlKv7RMUU896uLUxyLWXAmCgR5Y5QX0fwgz0Q= -github.com/jfrog/build-info-go v1.10.5/go.mod h1:JcISnovFXKx3wWf3p1fcMmlPdt6adxScXvoJN4WXqIE= github.com/jfrog/froggit-go v1.16.2 h1:F//S83iXH14qsCwYzv0zB2JtjS2pJVEsUoEmYA+37dQ= github.com/jfrog/froggit-go v1.16.2/go.mod h1:5VpdQfAcbuyFl9x/x8HGm7kVk719kEtW/8YJFvKcHPA= github.com/jfrog/gofrog v1.7.6 h1:QmfAiRzVyaI7JYGsB7cxfAJePAZTzFz0gRWZSE27c6s= @@ -171,12 +175,8 @@ github.com/jfrog/jfrog-apps-config v1.0.1 h1:mtv6k7g8A8BVhlHGlSveapqf4mJfonwvXYL github.com/jfrog/jfrog-apps-config v1.0.1/go.mod h1:8AIIr1oY9JuH5dylz2S6f8Ym2MaadPLR6noCBO4C22w= github.com/jfrog/jfrog-cli-artifactory v0.1.7 h1:/PBDO6nS6cf3PK+GRkd6BJtZnvYasi1PrQhRiayirso= github.com/jfrog/jfrog-cli-artifactory v0.1.7/go.mod h1:M5pZTHnsYNDmml/FAnoxxt4QiHOIUHPx91th30AtwfM= -github.com/jfrog/jfrog-cli-core/v2 v2.56.8 h1:UexulAwRVN20VmYACijkTFYKqtUq5myE4okEgmUrorw= -github.com/jfrog/jfrog-cli-core/v2 v2.56.8/go.mod h1:RY74eDpw1WBxruSfZ0HO1ax7c1NAj+rbBgA/hVOJNME= github.com/jfrog/jfrog-cli-platform-services v1.4.0 h1:g6A30+tOfXd1h6VASeNwH+5mhs5bPQJ0MFzZs/4nlvs= github.com/jfrog/jfrog-cli-platform-services v1.4.0/go.mod h1:Ky4SDXuMeaiNP/5zMT1YSzIuXG+cNYYOl8BaEA7Awbc= -github.com/jfrog/jfrog-cli-security v1.12.5 h1:2JHPyapXuHQw/qEaElGxBUGrJCZlVFLXDdxkqhf10vE= -github.com/jfrog/jfrog-cli-security v1.12.5/go.mod h1:5LBGwth7TXkEH8MO0JJXvpoRktMAV2BK7Q5nQePNrv4= github.com/jfrog/jfrog-client-go v1.48.0 h1:hx5B7+Wnobmzq4aFVZtALtbEVDFcjpn0Wb4q2m6H4KU= github.com/jfrog/jfrog-client-go v1.48.0/go.mod h1:1a7bmQHkRmPEza9wva2+WVrYzrGbosrMymq57kyG5gU= github.com/jszwec/csvutil v1.10.0 h1:upMDUxhQKqZ5ZDCs/wy+8Kib8rZR8I8lOR34yJkdqhI= diff --git a/nuget_test.go b/nuget_test.go index e8b42d2bb..c95c39a5b 100644 --- a/nuget_test.go +++ b/nuget_test.go @@ -83,7 +83,7 @@ func testNativeNugetDotnetResolve(t *testing.T, uniqueTests []testDescriptor, bu return } t.Run(test.name, func(t *testing.T) { - testNugetCmd(t, projectPath, buildName, strconv.Itoa(buildNumber), test.expectedModules, test.args, test.expectedDependencies) + testNugetCmd(t, projectPath, buildName, strconv.Itoa(buildNumber), test.expectedModules, test.args, test.expectedDependencies, projectType.String()) }) } cleanTestsHomeEnv() @@ -107,17 +107,21 @@ func TestNuGetWithGlobalConfig(t *testing.T) { assert.NoError(t, err) err = createConfigFileForTest([]string{jfrogHomeDir}, tests.NugetRemoteRepo, "", t, project.Nuget, true) assert.NoError(t, err) - testNugetCmd(t, projectPath, tests.NuGetBuildName, "1", []string{"packagesconfig"}, []string{"nuget", "restore"}, []int{6}) + // allow insecure connection for testings to work with localhost server + testNugetCmd(t, projectPath, tests.NuGetBuildName, "1", []string{"packagesconfig"}, []string{"nuget", "restore"}, []int{6}, project.Nuget.String()) cleanTestsHomeEnv() } -func testNugetCmd(t *testing.T, projectPath, buildName, buildNumber string, expectedModule, args []string, expectedDependencies []int) { +func testNugetCmd(t *testing.T, projectPath, buildName, buildNumber string, expectedModule, args []string, expectedDependencies []int, projectType string) { wd, err := os.Getwd() assert.NoError(t, err, "Failed to get current dir") chdirCallback := clientTestUtils.ChangeDirWithCallback(t, wd, projectPath) defer chdirCallback() + args = append(args, "--build-name="+buildName, "--build-number="+buildNumber) + + allowInsecureConnectionForTests(projectType, &args) err = runNuGet(t, args...) if err != nil { return @@ -152,6 +156,15 @@ func testNugetCmd(t *testing.T, projectPath, buildName, buildNumber string, expe inttestutils.DeleteBuild(serverDetails.ArtifactoryUrl, buildName, artHttpDetails) } +// Add allow insecure connection for testings to work with localhost server +// dotNet also uses this cmd, and we want to apply this only for Nuget. +func allowInsecureConnectionForTests(projectType string, args *[]string) *[]string { + if projectType == project.Nuget.String() { + *args = append(*args, "--allow-insecure-connections") + } + return args +} + func assertNugetDependencies(t *testing.T, module buildInfo.Module, moduleName string) { for _, dependency := range module.Dependencies { switch dependency.Id { @@ -224,10 +237,11 @@ func runInitNewConfig(t *testing.T, testSuite testInitNewConfigDescriptor, baseR params := &dotnet.DotnetCommand{} server := &config.ServerDetails{ArtifactoryUrl: baseRtUrl, User: "user", Password: "password"} params.SetServerDetails(server). - SetUseNugetV2(testSuite.useNugetV2) + SetUseNugetV2(testSuite.useNugetV2). + SetAllowInsecureConnections(true) // Prepare the config file with NuGet authentication - configFile, err := dotnet.InitNewConfig(tempDirPath, "", server, testSuite.useNugetV2) + configFile, err := dotnet.InitNewConfig(tempDirPath, "", server, testSuite.useNugetV2, true) if err != nil { assert.NoError(t, err) return diff --git a/utils/cliutils/commandsflags.go b/utils/cliutils/commandsflags.go index 446f84eff..18e6a19d8 100644 --- a/utils/cliutils/commandsflags.go +++ b/utils/cliutils/commandsflags.go @@ -376,7 +376,8 @@ const ( npmDetailedSummary = npmPrefix + detailedSummary // Unique nuget/dotnet config flags - nugetV2 = "nuget-v2" + nugetV2 = "nuget-v2" + allowInsecureConnections = "allow-insecure-connections" // Unique go flags noFallback = "no-fallback" @@ -1161,6 +1162,10 @@ var flagsMap = map[string]cli.Flag{ Name: nugetV2, Usage: "[Default: false] Set to true if you'd like to use the NuGet V2 protocol when restoring packages from Artifactory.` `", }, + allowInsecureConnections: cli.BoolFlag{ + Name: allowInsecureConnections, + Usage: "[Default: false] Set to true if you wish to configure NuGet sources with unsecured connections. This is recommended for testing purposes only. ` `", + }, noFallback: cli.BoolTFlag{ Name: noFallback, Usage: "[Default: false] Set to true to avoid downloading packages from the VCS, if they are missing in Artifactory.` `", @@ -1882,7 +1887,7 @@ var commandFlags = map[string][]string{ global, serverIdResolve, repoResolve, nugetV2, }, Nuget: { - buildName, buildNumber, module, Project, + buildName, buildNumber, module, Project, allowInsecureConnections, }, DotnetConfig: { global, serverIdResolve, repoResolve, nugetV2, diff --git a/utils/cliutils/utils.go b/utils/cliutils/utils.go index 17781fe50..ac43b25a8 100644 --- a/utils/cliutils/utils.go +++ b/utils/cliutils/utils.go @@ -809,3 +809,15 @@ func getDebFlag(c *cli.Context) (deb string, err error) { } return deb, nil } + +// ExtractBoolFlagFromArgs Extracts a boolean flag from the args and removes it from the slice. +func ExtractBoolFlagFromArgs(filteredArgs *[]string, flagName string) (value bool, err error) { + var flagIndex int + var boolFlag bool + flagIndex, boolFlag, err = coreutils.FindBooleanFlag("--"+flagName, *filteredArgs) + if err != nil { + return false, err + } + coreutils.RemoveFlagFromCommand(filteredArgs, flagIndex, flagIndex) + return boolFlag, nil +}