From 4190c206fe7d78663b06ceb0f2c9fd186a9aee95 Mon Sep 17 00:00:00 2001 From: Kanishk Date: Tue, 25 Feb 2025 14:42:15 +0530 Subject: [PATCH] Extended support for snapshot policy for resolver in Maven Projects --- go.mod | 4 ++- go.sum | 8 ++--- maven_test.go | 61 +++++++++++++++++++++++++++++++++ utils/cliutils/commandsflags.go | 24 +++++++++---- 4 files changed, 85 insertions(+), 12 deletions(-) diff --git a/go.mod b/go.mod index cd6c03e78..18dec2a78 100644 --- a/go.mod +++ b/go.mod @@ -191,6 +191,8 @@ require ( replace github.com/jfrog/jfrog-cli-artifactory => github.com/jfrog/jfrog-cli-artifactory v0.1.13-0.20250221101554-05889536ad05 -replace github.com/jfrog/jfrog-cli-core/v2 => github.com/jfrog/jfrog-cli-core/v2 v2.31.1-0.20250221100045-5b6a23a37852 +replace github.com/jfrog/jfrog-cli-core/v2 => github.com/jfrog/jfrog-cli-core/v2 v2.31.1-0.20250226093426-131ae1505b58 + +replace github.com/jfrog/build-info-go => github.com/fluxxBot/build-info-go v1.8.9-0.20250203111011-4ff16d3d42be replace github.com/jfrog/jfrog-client-go => github.com/jfrog/jfrog-client-go v1.28.1-0.20250221062042-87cb5136765e diff --git a/go.sum b/go.sum index d8c0364e4..69af25fd9 100644 --- a/go.sum +++ b/go.sum @@ -92,6 +92,8 @@ github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM= github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/fluxxBot/build-info-go v1.8.9-0.20250203111011-4ff16d3d42be h1:K9d43ZYkRj9Y0XI78KZvHlCWdZ7O24np+Xv9C7PKJwk= +github.com/fluxxBot/build-info-go v1.8.9-0.20250203111011-4ff16d3d42be/go.mod h1:JcISnovFXKx3wWf3p1fcMmlPdt6adxScXvoJN4WXqIE= github.com/forPelevin/gomoji v1.2.0 h1:9k4WVSSkE1ARO/BWywxgEUBvR/jMnao6EZzrql5nxJ8= github.com/forPelevin/gomoji v1.2.0/go.mod h1:8+Z3KNGkdslmeGZBC3tCrwMrcPy5GRzAD+gL9NAwMXg= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= @@ -175,8 +177,6 @@ github.com/jedib0t/go-pretty/v6 v6.6.5 h1:9PgMJOVBedpgYLI56jQRJYqngxYAAzfEUua+3N github.com/jedib0t/go-pretty/v6 v6.6.5/go.mod h1:Uq/HrbhuFty5WSVNfjpQQe47x16RwVGXIveNGEyGtHs= 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.9 h1:mdJ+wlLw2ReFsqC7rifJVlRYLEqYk38uXDYAOZASuGE= -github.com/jfrog/build-info-go v1.10.9/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/go-mockhttp v0.3.1 h1:/wac8v4GMZx62viZmv4wazB5GNKs+GxawuS1u3maJH8= @@ -187,8 +187,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.13-0.20250221101554-05889536ad05 h1:UV9W1ZImGWLks4+w+zg9hMtySvEIU+WxO73lsO6NIyY= github.com/jfrog/jfrog-cli-artifactory v0.1.13-0.20250221101554-05889536ad05/go.mod h1:223EqxDx7Ogrj7zJZkKAoFuQJStC5qtPXjwsf+r6d/A= -github.com/jfrog/jfrog-cli-core/v2 v2.31.1-0.20250221100045-5b6a23a37852 h1:tz6j/XO+BDoemr2LvQHN16ZHEG6dHT+79A+O+AvxXfk= -github.com/jfrog/jfrog-cli-core/v2 v2.31.1-0.20250221100045-5b6a23a37852/go.mod h1:VAVY5umw94aXf+yGzKCoEqijeUjIUNv+ikJUeQkd9tw= +github.com/jfrog/jfrog-cli-core/v2 v2.31.1-0.20250226093426-131ae1505b58 h1:r8aE1Amm8CLbMLMCbNhivs7WqhoLlj+cBhzStohBYOU= +github.com/jfrog/jfrog-cli-core/v2 v2.31.1-0.20250226093426-131ae1505b58/go.mod h1:8uzry1RGoxmw2aeJVE/8kLIFTXCE23ApLUNRUGFRu90= github.com/jfrog/jfrog-cli-platform-services v1.7.0 h1:u0AOyG4JX3VT7xhEeA9gDpBgW8tYILONpQURtzR3FkI= github.com/jfrog/jfrog-cli-platform-services v1.7.0/go.mod h1:u3lMRG7XC8MeUy/OPkHkZnsgCMIi0br4sjk2/W1Pm8I= github.com/jfrog/jfrog-cli-security v1.15.0 h1:TYNIID231X/AivYtptDCF25JyH8qTQht6ISHRfwejL8= diff --git a/maven_test.go b/maven_test.go index 51571b14d..60422d718 100644 --- a/maven_test.go +++ b/maven_test.go @@ -9,7 +9,9 @@ import ( "github.com/jfrog/jfrog-cli-core/v2/utils/ioutils" "github.com/jfrog/jfrog-cli/utils/cliutils" "github.com/jfrog/jfrog-client-go/http/httpclient" + "github.com/jfrog/jfrog-client-go/utils/io/fileutils" "github.com/stretchr/testify/require" + "gopkg.in/yaml.v2" "net/http" "os" "os/exec" @@ -435,3 +437,62 @@ func prepareMavenSetupTest(t *testing.T, homeDir string) func() { restoreDir() } } + +func TestMavenConfig(t *testing.T) { + jfrogCli := initializeMvnProjectAndReturnExecutor(t) + + err := jfrogCli.Exec("mvn-config", "--repo-resolve-releases=pipe-test-mvn", "--repo-resolve-snapshots=pipe-test-mvn", + "--disable-snapshots=true", "--snapshots-update-policy=never") + assert.NoError(t, err) + + configFile := readConfigFileCreated(t) + + assert.Equal(t, configFile.Resolver.SnapshotRepo, "pipe-test-mvn") + assert.Equal(t, configFile.Resolver.ReleaseRepo, "pipe-test-mvn") + assert.Equal(t, configFile.Resolver.DisableSnapshots, true) + assert.Equal(t, configFile.Resolver.SnapshotsUpdatePolicy, "never") + + cleanMavenTest(t) +} + +func TestMavenConfigWhenSnapshotPolicyNotPresent(t *testing.T) { + jfrogCli := initializeMvnProjectAndReturnExecutor(t) + + err := jfrogCli.Exec("mvn-config", "--repo-resolve-releases=pipe-test-mvn", "--repo-resolve-snapshots=pipe-test-mvn", "--repo-deploy-releases=default", "--repo-deploy-snapshots=default") + assert.NoError(t, err) + + configFile := readConfigFileCreated(t) + + assert.NoError(t, err) + assert.Equal(t, configFile.Resolver.SnapshotRepo, "pipe-test-mvn") + assert.Equal(t, configFile.Resolver.ReleaseRepo, "pipe-test-mvn") + assert.Empty(t, configFile.Resolver.DisableSnapshots) + assert.Empty(t, configFile.Resolver.SnapshotsUpdatePolicy) + + cleanMavenTest(t) +} + +func initializeMvnProjectAndReturnExecutor(t *testing.T) *coreTests.JfrogCli { + initMavenTest(t, false) + pomDir := createSimpleMavenProject(t) + + oldHomeDir := changeWD(t, pomDir) + defer clientTestUtils.ChangeDirAndAssert(t, oldHomeDir) + + jfrogCli := coreTests.NewJfrogCli(execMain, "jfrog", "") + + return jfrogCli +} + +func readConfigFileCreated(t *testing.T) commands.ConfigFile { + configFile := commands.ConfigFile{ + Version: 1, + ConfigType: project.Maven.String(), + } + mavenConfigPath := filepath.Join(".jfrog", "projects", "maven.yaml") + content, err := fileutils.ReadFile(mavenConfigPath) + assert.NoError(t, err) + err = yaml.Unmarshal(content, &configFile) + assert.NoError(t, err) + return configFile +} diff --git a/utils/cliutils/commandsflags.go b/utils/cliutils/commandsflags.go index c79ec15b9..b44242b3f 100644 --- a/utils/cliutils/commandsflags.go +++ b/utils/cliutils/commandsflags.go @@ -332,12 +332,14 @@ const ( repoDeploy = "repo-deploy" // Unique maven-config flags - repoResolveReleases = "repo-resolve-releases" - repoResolveSnapshots = "repo-resolve-snapshots" - repoDeployReleases = "repo-deploy-releases" - repoDeploySnapshots = "repo-deploy-snapshots" - includePatterns = "include-patterns" - excludePatterns = "exclude-patterns" + repoResolveReleases = "repo-resolve-releases" + repoResolveSnapshots = "repo-resolve-snapshots" + repoDeployReleases = "repo-deploy-releases" + repoDeploySnapshots = "repo-deploy-snapshots" + includePatterns = "include-patterns" + excludePatterns = "exclude-patterns" + disableSnapshots = "disable-snapshots" + snapshotsUpdatePolicy = "snapshots-update-policy" // Unique gradle-config flags usesPlugin = "uses-plugin" @@ -1117,6 +1119,14 @@ var flagsMap = map[string]cli.Flag{ Name: excludePatterns, Usage: "[Optional] Filter deployed artifacts by setting a wildcard pattern that specifies which artifacts to exclude. You may provide multiple patterns separated by ', '.` `", }, + disableSnapshots: cli.BoolFlag{ + Name: disableSnapshots, + Usage: "[Default: false] Set to true to disable snapshot resolution.` `", + }, + snapshotsUpdatePolicy: cli.StringFlag{ + Name: snapshotsUpdatePolicy, + Usage: "[Optional] Set snapshot update policy. Defaults to daily.` `", + }, repoResolve: cli.StringFlag{ Name: repoResolve, Usage: "[Optional] Repository for dependencies resolution.` `", @@ -1837,7 +1847,7 @@ var commandFlags = map[string][]string{ global, serverIdResolve, repoResolve, }, MvnConfig: { - global, serverIdResolve, serverIdDeploy, repoResolveReleases, repoResolveSnapshots, repoDeployReleases, repoDeploySnapshots, includePatterns, excludePatterns, UseWrapper, + global, serverIdResolve, serverIdDeploy, repoResolveReleases, repoResolveSnapshots, repoDeployReleases, repoDeploySnapshots, includePatterns, excludePatterns, UseWrapper, disableSnapshots, snapshotsUpdatePolicy, }, GradleConfig: { global, serverIdResolve, serverIdDeploy, repoResolve, repoDeploy, usesPlugin, UseWrapper, deployMavenDesc,