func DeleteFiles(resultItems []utils.AqlSearchResultItem, flags *DeleteFlags) error { for _, v := range resultItems { fileUrl, err := utils.BuildArtifactoryUrl(flags.ArtDetails.Url, v.GetFullUrl(), make(map[string]string)) if err != nil { return err } if flags.DryRun { log.Info("[Dry run] Deleting:", v.GetFullUrl()) continue } log.Info("Deleting:", v.GetFullUrl()) httpClientsDetails := utils.GetArtifactoryHttpClientDetails(flags.ArtDetails) resp, body, err := ioutils.SendDelete(fileUrl, nil, httpClientsDetails) if err != nil { return err } if resp.StatusCode != 204 { return cliutils.CheckError(errors.New("Artifactory response: " + resp.Status + "\n" + cliutils.IndentJson(body))) } log.Debug("Artifactory response:", resp.Status) } return nil }
func downloadFile(downloadFileDetails *DownloadFileDetails, logMsgPrefix string, flags *DownloadFlags) error { httpClientsDetails := utils.GetArtifactoryHttpClientDetails(flags.ArtDetails) bulkDownload := flags.SplitCount == 0 || flags.MinSplitSize < 0 || flags.MinSplitSize*1000 > downloadFileDetails.Size if !bulkDownload { acceptRange, err := isFileAcceptRange(downloadFileDetails, flags) if err != nil { return err } bulkDownload = !acceptRange } if bulkDownload { resp, err := ioutils.DownloadFile(downloadFileDetails.DownloadPath, downloadFileDetails.LocalPath, downloadFileDetails.LocalFileName, httpClientsDetails) if err != nil { return err } log.Debug(logMsgPrefix, "Artifactory response:", resp.Status) } else { concurrentDownloadFlags := ioutils.ConcurrentDownloadFlags{ DownloadPath: downloadFileDetails.DownloadPath, FileName: downloadFileDetails.LocalFileName, LocalPath: downloadFileDetails.LocalPath, FileSize: downloadFileDetails.Size, SplitCount: flags.SplitCount} ioutils.DownloadFileConcurrently(concurrentDownloadFlags, logMsgPrefix, httpClientsDetails) } return nil }
func BuildPublish(buildName, buildNumber string, flags *utils.BuildInfoFlags) error { err := utils.PreCommandSetup(flags) if err != nil { return err } buildData, err := utils.ReadBuildInfoFiles(buildName, buildNumber) if err != nil { return err } if len(buildData) == 0 { return cliutils.CheckError(fmt.Errorf("Can't find any files related to build name: %q, number: %q", buildName, buildNumber)) } sort.Sort(buildData) buildInfo := createNewBuildInfo() buildInfo.Name = buildName buildInfo.Number = buildNumber buildGeneralDetails, err := utils.ReadBuildInfoGeneralDetails(buildName, buildNumber) if err != nil { return err } buildInfo.Started = buildGeneralDetails.Timestamp.Format("2006-01-02T15:04:05.000-0700") artifactsSet, dependenciesSet, env, err := prepareBuildInfoData(buildData, createIncludeFilter(flags), createExcludeFilter(flags)) if err != nil { return err } if len(env) != 0 { buildInfo.Propertires = env } module := createModule(buildName, artifactsSet, dependenciesSet) buildInfo.Modules = append(buildInfo.Modules, module) marshaledBuildInfo, err := json.Marshal(buildInfo) if cliutils.CheckError(err) != nil { return err } if flags.IsDryRun() { fmt.Println(cliutils.IndentJson(marshaledBuildInfo)) return nil } httpClientsDetails := utils.GetArtifactoryHttpClientDetails(flags.ArtDetails) utils.SetContentType("application/vnd.org.jfrog.artifactory+json", &httpClientsDetails.Headers) log.Info("Deploying build info...") resp, body, err := utils.PublishBuildInfo(flags.ArtDetails.Url, marshaledBuildInfo, httpClientsDetails) if err != nil { return err } if resp.StatusCode != 204 { return cliutils.CheckError(errors.New("Artifactory response: " + resp.Status + "\n" + cliutils.IndentJson(body))) } log.Debug("Artifactory response:", resp.Status) log.Info("Build info successfully deployed. Browse it in Artifactory under " + flags.ArtDetails.Url + "webapp/builds/" + buildName + "/" + buildNumber) if err = utils.RemoveBuildDir(buildName, buildNumber); err != nil { return err } return nil }
func deleteBuild(buildName string) { artHttpDetails := utils.GetArtifactoryHttpClientDetails(artifactoryDetails) resp, body, err := ioutils.SendDelete(*tests.RtUrl+"api/build/"+buildName+"?deleteAll=1", nil, artHttpDetails) if err != nil { log.Error(err) } if resp.StatusCode != 200 { log.Error(resp.Status) log.Error(string(body)) } }
func getFileRemoteDetails(downloadPath string, flags *DownloadFlags) (*ioutils.FileDetails, error) { httpClientsDetails := utils.GetArtifactoryHttpClientDetails(flags.ArtDetails) details, err := ioutils.GetRemoteFileDetails(downloadPath, httpClientsDetails) if err != nil { err = cliutils.CheckError(errors.New("Artifactory " + err.Error())) if err != nil { return details, err } } return details, nil }
func BuildDistribute(buildName, buildNumber, targetRepo string, flags *BuildDistributionFlags) error { err := utils.PreCommandSetup(flags) if err != nil { return err } dryRun := "" if flags.DryRun == true { dryRun = "[Dry run] " } message := "Destributing build..." log.Info(dryRun + message) distributeUrl := flags.ArtDetails.Url restApi := path.Join("api/build/distribute/", buildName, buildNumber) requestFullUrl, err := utils.BuildArtifactoryUrl(distributeUrl, restApi, make(map[string]string)) if err != nil { return err } data := BuildDistributionConfig{ SourceRepos: strings.Split(flags.SourceRepos, ","), TargetRepo: targetRepo, Publish: flags.Publish, OverrideExistingFiles: flags.OverrideExistingFiles, GpgPassphrase: flags.GpgPassphrase, Async: flags.Async, DryRun: flags.DryRun} requestContent, err := json.Marshal(data) if err != nil { return cliutils.CheckError(errors.New("Failed to execute request. " + cliutils.GetDocumentationMessage())) } httpClientsDetails := utils.GetArtifactoryHttpClientDetails(flags.ArtDetails) utils.SetContentType("application/json", &httpClientsDetails.Headers) resp, body, err := ioutils.SendPost(requestFullUrl, requestContent, httpClientsDetails) if err != nil { return err } if resp.StatusCode != 200 { return cliutils.CheckError(errors.New("Artifactory response: " + resp.Status + "\n" + cliutils.IndentJson(body))) } log.Debug("Artifactory response:", resp.Status) if flags.Async && !flags.DryRun { log.Info("Asynchronously distributed build", buildName, "#"+buildNumber, "to:", targetRepo, "repository, logs are avalable in Artifactory.") return nil } log.Info(dryRun+"Distributed build", buildName, "#"+buildNumber, "to:", targetRepo, "repository.") return nil }
func isRepoExist(repoName string) bool { artHttpDetails := utils.GetArtifactoryHttpClientDetails(artifactoryDetails) resp, _, _, err := ioutils.SendGet(*tests.RtUrl+tests.RepoDetailsUrl+repoName, true, artHttpDetails) if err != nil { os.Exit(1) } if resp.StatusCode != 400 { return true } return false }
func TestArtifactoryDeleteFolder(t *testing.T) { initArtifactoryTest(t) prepUploadFiles() artifactoryCli.Exec("delete", tests.Repo1+"/downloadTestResources/", "--quiet=true") artHttpDetails := utils.GetArtifactoryHttpClientDetails(artifactoryDetails) resp, body, _, err := ioutils.SendGet(*tests.RtUrl+"api/storage/"+tests.Repo1+"/downloadTestResources", true, artHttpDetails) if err != nil || resp.StatusCode != 404 { t.Error("Coudln't delete path: " + tests.Repo1 + "/downloadTestResources/ " + string(body)) } cleanArtifactoryTest() }
func execCreateRepoRest(repoConfig, repoName string) error { content, err := ioutil.ReadFile(repoConfig) if err != nil { return err } artHttpDetails := utils.GetArtifactoryHttpClientDetails(artifactoryDetails) artHttpDetails.Headers = map[string]string{"Content-Type": "application/json"} resp, _, err := ioutils.SendPut(*tests.RtUrl+"api/repositories/"+repoName, content, artHttpDetails) if err != nil { return err } if resp.StatusCode != 200 && resp.StatusCode != 201 { return errors.New("Fail to create repository. Reason local repository with key: " + repoName + " already exist\n") } log.Info("Repository", repoName, "was created.") return nil }
func TestArtifactoryDeleteFolderWithWildcard(t *testing.T) { initArtifactoryTest(t) prepUploadFiles() prepCopyFiles() specFile := tests.GetFilePath(tests.MoveCopyDeleteSpec) artifactoryCli.Exec("copy", "--spec="+specFile) artHttpDetails := utils.GetArtifactoryHttpClientDetails(artifactoryDetails) resp, _, _, _ := ioutils.SendGet(*tests.RtUrl+"api/storage/"+tests.Repo2+"/nonflat_recursive_target/nonflat_recursive_source/a/b/", true, artHttpDetails) if resp.StatusCode != 200 { t.Error("Missing folder in artifactory : " + tests.Repo2 + "/nonflat_recursive_target/nonflat_recursive_source/a/b/") } artifactoryCli.Exec("delete", tests.Repo2+"/nonflat_recursive_target/nonflat_recursive_source/*/b/", "--quiet=true") resp, _, _, _ = ioutils.SendGet(*tests.RtUrl+"api/storage/"+tests.Repo2+"/nonflat_recursive_target/nonflat_recursive_source/a/b/", true, artHttpDetails) if resp.StatusCode != 404 { t.Error("Couldn't delete folder in artifactory : " + tests.Repo2 + "/nonflat_recursive_target/nonflat_recursive_source/a/b/") } isExistInArtifactory(tests.Delete1, tests.GetFilePath(tests.SearchMoveDeleteRepoSpec), t) cleanArtifactoryTest() }