github.com/jfrog/jfrog-cli-core/v2@v2.52.0/general/project/repoutils.go (about)

     1  package project
     2  
     3  import (
     4  	rtUtils "github.com/jfrog/jfrog-cli-core/v2/artifactory/utils"
     5  	"github.com/jfrog/jfrog-cli-core/v2/utils/config"
     6  	"github.com/jfrog/jfrog-cli-core/v2/utils/coreutils"
     7  
     8  	"github.com/jfrog/jfrog-client-go/artifactory"
     9  	"github.com/jfrog/jfrog-client-go/artifactory/services"
    10  )
    11  
    12  const (
    13  	Local     = "local"
    14  	Remote    = "remote"
    15  	Virtual   = "virtual"
    16  	RemoteUrl = "url"
    17  
    18  	// Defaults Repositories
    19  	MavenLocalDefaultName    = "default-maven-local"
    20  	MavenRemoteDefaultName   = "default-maven-remote"
    21  	MavenRemoteDefaultUrl    = "https://repo.maven.apache.org/maven2"
    22  	MavenVirtualDefaultName  = "default-maven-virtual"
    23  	GradleLocalDefaultName   = "default-gradle-local"
    24  	GradleRemoteDefaultName  = "default-gradle-remote"
    25  	GradleRemoteDefaultUrl   = "https://repo.maven.apache.org/maven2"
    26  	GradleVirtualDefaultName = "default-gradle-virtual"
    27  	NpmLocalDefaultName      = "default-npm-local"
    28  	NpmRemoteDefaultName     = "default-npm-remote"
    29  	NpmRemoteDefaultUrl      = "https://registry.npmjs.org"
    30  	NpmVirtualDefaultName    = "default-npm-virtual"
    31  	GoLocalDefaultName       = "default-go-local"
    32  	GoRemoteDefaultName      = "default-go-remote"
    33  	GoRemoteDefaultUrl       = "https://gocenter.io/"
    34  	GoVirtualDefaultName     = "default-go-virtual"
    35  	PypiLocalDefaultName     = "default-pypi-local"
    36  	PypiRemoteDefaultName    = "default-pypi-remote"
    37  	PypiRemoteDefaultUrl     = "https://files.pythonhosted.org"
    38  	PypiVirtualDefaultName   = "default-pypi-virtual"
    39  	NugetLocalDefaultName    = "default-nuget-local"
    40  	NugetRemoteDefaultName   = "default-nuget-remote"
    41  	NugetRemoteDefaultUrl    = "https://www.nuget.org/"
    42  	NugetVirtualDefaultName  = "default-nuget-virtual"
    43  	DockerLocalDefaultName   = "default-docker-local"
    44  	DockerRemoteDefaultName  = "default-docker-remote"
    45  	DockerRemoteDefaultUrl   = "https://registry-1.docker.io"
    46  	DockerVirtualDefaultName = "default-docker-virtual"
    47  )
    48  
    49  var RepoDefaultName = map[coreutils.Technology]map[string]string{
    50  	coreutils.Maven: {
    51  		Local:     MavenLocalDefaultName,
    52  		Remote:    MavenRemoteDefaultName,
    53  		RemoteUrl: MavenRemoteDefaultUrl,
    54  		Virtual:   MavenVirtualDefaultName,
    55  	},
    56  	coreutils.Gradle: {
    57  		Local:     GradleLocalDefaultName,
    58  		Remote:    GradleRemoteDefaultName,
    59  		RemoteUrl: GradleRemoteDefaultUrl,
    60  		Virtual:   GradleVirtualDefaultName,
    61  	},
    62  	coreutils.Npm: {
    63  		Local:     NpmLocalDefaultName,
    64  		Remote:    NpmRemoteDefaultName,
    65  		RemoteUrl: NpmRemoteDefaultUrl,
    66  		Virtual:   NpmVirtualDefaultName,
    67  	},
    68  	coreutils.Go: {
    69  		Local:     GoLocalDefaultName,
    70  		Remote:    GoRemoteDefaultName,
    71  		RemoteUrl: GoRemoteDefaultUrl,
    72  		Virtual:   GoVirtualDefaultName,
    73  	},
    74  	coreutils.Pip: {
    75  		Local:     PypiLocalDefaultName,
    76  		Remote:    PypiRemoteDefaultName,
    77  		RemoteUrl: PypiRemoteDefaultUrl,
    78  		Virtual:   PypiVirtualDefaultName,
    79  	},
    80  	coreutils.Pipenv: {
    81  		Local:     PypiLocalDefaultName,
    82  		Remote:    PypiRemoteDefaultName,
    83  		RemoteUrl: PypiRemoteDefaultUrl,
    84  		Virtual:   PypiVirtualDefaultName,
    85  	},
    86  	coreutils.Nuget: {
    87  		Local:     NugetLocalDefaultName,
    88  		Remote:    NugetRemoteDefaultName,
    89  		RemoteUrl: NugetRemoteDefaultUrl,
    90  		Virtual:   NugetVirtualDefaultName,
    91  	},
    92  	coreutils.Dotnet: {
    93  		Local:     NugetLocalDefaultName,
    94  		Remote:    NugetRemoteDefaultName,
    95  		RemoteUrl: NugetRemoteDefaultUrl,
    96  		Virtual:   NugetVirtualDefaultName,
    97  	},
    98  	coreutils.Docker: {
    99  		Local:     DockerLocalDefaultName,
   100  		Remote:    DockerRemoteDefaultName,
   101  		RemoteUrl: DockerRemoteDefaultUrl,
   102  		Virtual:   DockerVirtualDefaultName,
   103  	},
   104  }
   105  
   106  func CreateDefaultLocalRepo(technologyType coreutils.Technology, serverId string) error {
   107  	servicesManager, err := getServiceManager(serverId)
   108  	if err != nil {
   109  		return err
   110  	}
   111  	params := services.NewLocalRepositoryBaseParams()
   112  	params.PackageType = technologyType.GetPackageType()
   113  	params.Key = RepoDefaultName[technologyType][Local]
   114  	// Check if default repository already exists
   115  	if exists, err := servicesManager.IsRepoExists(params.Key); exists {
   116  		return err
   117  	}
   118  	if err != nil {
   119  		return err
   120  	}
   121  	return servicesManager.CreateLocalRepositoryWithParams(params)
   122  }
   123  
   124  func createDefaultRemoteNugetRepo(serverId string, baseParams services.RemoteRepositoryBaseParams) error {
   125  	servicesManager, err := getServiceManager(serverId)
   126  	if err != nil {
   127  		return err
   128  	}
   129  	params := services.NewNugetRemoteRepositoryParams()
   130  	params.RemoteRepositoryBaseParams = baseParams
   131  	params.DownloadContextPath = "api/v2/package"
   132  	params.FeedContextPath = "api/v2"
   133  	return servicesManager.CreateRemoteRepository().Nuget(params)
   134  }
   135  
   136  func CreateDefaultRemoteRepo(technologyType coreutils.Technology, serverId string) error {
   137  	servicesManager, err := getServiceManager(serverId)
   138  	if err != nil {
   139  		return err
   140  	}
   141  	params := services.NewRemoteRepositoryBaseParams()
   142  	params.PackageType = technologyType.GetPackageType()
   143  	params.Key = RepoDefaultName[technologyType][Remote]
   144  	params.Url = RepoDefaultName[technologyType][RemoteUrl]
   145  	// Check if default repository already exists
   146  	if exists, err := servicesManager.IsRepoExists(params.Key); exists {
   147  		return err
   148  	}
   149  	if err != nil {
   150  		return err
   151  	}
   152  	// NuGet specific case, due to required DownloadContextPath param by Artifactory
   153  	if technologyType == coreutils.Nuget || technologyType == coreutils.Dotnet {
   154  		return createDefaultRemoteNugetRepo(serverId, params)
   155  	}
   156  	return servicesManager.CreateRemoteRepositoryWithParams(params)
   157  }
   158  
   159  func CreateDefaultVirtualRepo(technologyType coreutils.Technology, serverId string) error {
   160  	servicesManager, err := getServiceManager(serverId)
   161  	if err != nil {
   162  		return err
   163  	}
   164  	params := services.NewVirtualRepositoryBaseParams()
   165  	params.PackageType = technologyType.GetPackageType()
   166  	params.Key = RepoDefaultName[technologyType][Virtual]
   167  	params.Repositories = []string{RepoDefaultName[technologyType][Local], RepoDefaultName[technologyType][Remote]}
   168  	params.DefaultDeploymentRepo = RepoDefaultName[technologyType][Local]
   169  	// Check if default repository already exists
   170  	if exists, err := servicesManager.IsRepoExists(params.Key); exists {
   171  		return err
   172  	}
   173  	if err != nil {
   174  		return err
   175  	}
   176  	return servicesManager.CreateVirtualRepositoryWithParams(params)
   177  }
   178  
   179  func getServiceManager(serverId string) (artifactory.ArtifactoryServicesManager, error) {
   180  	serviceDetails, err := config.GetSpecificConfig(serverId, true, false)
   181  	if err != nil {
   182  		return nil, err
   183  	}
   184  	return rtUtils.CreateServiceManager(serviceDetails, -1, 0, false)
   185  
   186  }