Skip to content

Commit

Permalink
Support for Build info overwrite for all occurrences for given build …
Browse files Browse the repository at this point in the history
…name and number (#1083)

* Added delete build info service.

* Updated readme and tests for build info deletion.
  • Loading branch information
bhanurp authored Feb 19, 2025
1 parent 08198f5 commit e17342f
Show file tree
Hide file tree
Showing 8 changed files with 111 additions and 76 deletions.
13 changes: 13 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@
- [Deleting Properties from Files in Artifactory](#deleting-properties-from-files-in-artifactory)
- [Getting Properties from Files in Artifactory](#getting-properties-from-files-in-artifactory)
- [Publishing Build Info to Artifactory](#publishing-build-info-to-artifactory)
- [Delete Build Info from Artifactory](#Deleting-build-info-from-artifactory)
- [Fetching Build Info from Artifactory](#fetching-build-info-from-artifactory)
- [Fetching Build Runs from Artifactory](#fetching-build-runs-from-artifactory)
- [Promoting Published Builds in Artifactory](#promoting-published-builds-in-artifactory)
Expand Down Expand Up @@ -704,6 +705,18 @@ projectKey := "my-project-key"
rtManager.PublishBuildInfo(buildInfo, projectKey)
```

#### Deleting Build Info from Artifactory

```go
buildInfo := &buildinfo.BuildInfo{}
// Optional Artifactory project key
projectKey := "my-project-key"
// Determines a number of build occurrences with same build number in build info to be deleted
numberOfBuildOccurrencesToBeDeleted := 2
...
rtManager.DeleteBuildInfo(buildInfo, projectKey, numberOfBuildOccurrencesToBeDeleted)
```

#### Fetching Build Info from Artifactory

```go
Expand Down
5 changes: 5 additions & 0 deletions artifactory/buildinfo/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ type Configuration struct {
DryRun bool
EnvInclude string
EnvExclude string
Overwrite bool
}

func (config *Configuration) GetArtifactoryDetails() auth.ServiceDetails {
Expand All @@ -23,3 +24,7 @@ func (config *Configuration) SetArtifactoryDetails(artDetails auth.ServiceDetail
func (config *Configuration) IsDryRun() bool {
return config.DryRun
}

func (cinfif *Configuration) DoOverwrite() bool {
return cinfif.Overwrite
}
5 changes: 5 additions & 0 deletions artifactory/emptymanager.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ type ArtifactoryServicesManager interface {
DeletePermissionTarget(permissionTargetName string) error
GetPermissionTarget(permissionTargetName string) (*services.PermissionTargetParams, error)
PublishBuildInfo(build *buildinfo.BuildInfo, projectKey string) (*clientutils.Sha256Summary, error)
DeleteBuildInfo(build *buildinfo.BuildInfo, projectKey string, buildNumberFrequency int) error
DistributeBuild(params services.BuildDistributionParams) error
PromoteBuild(params services.PromotionParams) error
DiscardBuilds(params services.DiscardBuildsParams) error
Expand Down Expand Up @@ -480,6 +481,10 @@ func (esm *EmptyArtifactoryServicesManager) GetPackageLeadFile(services.LeadFile
panic("Failed: Method is not implemented")
}

func (esm *EmptyArtifactoryServicesManager) DeleteBuildInfo(*buildinfo.BuildInfo, string, int) error {
panic("Failed: Method is not implemented")
}

// Compile time check of interface implementation.
// Since EmptyArtifactoryServicesManager can be used by tests external to this project, we want this project's tests to fail,
// if EmptyArtifactoryServicesManager stops implementing the ArtifactoryServicesManager interface.
Expand Down
6 changes: 6 additions & 0 deletions artifactory/manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -204,6 +204,12 @@ func (sm *ArtifactoryServicesManagerImp) PublishBuildInfo(build *buildinfo.Build
return buildInfoService.PublishBuildInfo(build, projectKey)
}

func (sm *ArtifactoryServicesManagerImp) DeleteBuildInfo(build *buildinfo.BuildInfo, projectKey string, numberOfBuildOccurrencesToBeDeleted int) error {
buildInfoService := services.NewBuildInfoService(sm.config.GetServiceDetails(), sm.client)
buildInfoService.DryRun = sm.config.IsDryRun()
return buildInfoService.DeleteBuildInfo(build, projectKey, numberOfBuildOccurrencesToBeDeleted)
}

func (sm *ArtifactoryServicesManagerImp) DistributeBuild(params services.BuildDistributionParams) error {
distributionService := services.NewDistributionService(sm.client)
distributionService.DryRun = sm.config.IsDryRun()
Expand Down
46 changes: 46 additions & 0 deletions artifactory/services/buildinfo.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,14 @@ type BuildInfoService struct {
DryRun bool
}

type DeleteBuildInfoBody struct {
BuildName string `json:"buildName,omitempty"`
Project string `json:"project,omitempty"`
BuildNumber []string `json:"buildNumbers,omitempty"`
DeleteArtifacts bool `json:"deleteArtifacts,omitempty"`
DeleteAll bool `json:"deleteAll,omitempty"`
}

func NewBuildInfoService(artDetails auth.ServiceDetails, client *jfroghttpclient.JfrogHttpClient) *BuildInfoService {
return &BuildInfoService{artDetails: &artDetails, client: client}
}
Expand Down Expand Up @@ -87,3 +95,41 @@ func (bis *BuildInfoService) PublishBuildInfo(build *buildinfo.BuildInfo, projec
log.Debug("Artifactory response:", resp.Status)
return summary, nil
}

func (bis *BuildInfoService) DeleteBuildInfo(build *buildinfo.BuildInfo, projectKey string, numberOfBuildOccurrencesToBeDeleted int) error {
params := createDeleteBuildInfoBody(build, projectKey, numberOfBuildOccurrencesToBeDeleted)
content, err := json.Marshal(params)
if err != nil {
return errorutils.CheckError(err)
}
if bis.IsDryRun() {
log.Info("[Dry run] Deleting build info preview...")
log.Output(clientutils.IndentJson(content))
return nil
}
httpClientsDetails := bis.GetArtifactoryDetails().CreateHttpClientDetails()
httpClientsDetails.SetContentTypeApplicationJson()
resp, body, err := bis.client.SendPost(bis.GetArtifactoryDetails().GetUrl()+"api/build/delete", content, &httpClientsDetails)
if err != nil {
return fmt.Errorf("error occurred while deleting build info: %w", err)
}
if err = errorutils.CheckResponseStatusWithBody(resp, body, http.StatusOK, http.StatusNoContent); err != nil {
return err
}
log.Debug("Artifactory response", resp.Status)
return nil
}

func createDeleteBuildInfoBody(build *buildinfo.BuildInfo, projectKey string, numberOfBuildOccurrencesToBeDeleted int) DeleteBuildInfoBody {
buildNumbers := make([]string, 0, numberOfBuildOccurrencesToBeDeleted)
for i := 0; i < numberOfBuildOccurrencesToBeDeleted; i++ {
buildNumbers = append(buildNumbers, build.Number)
}
return DeleteBuildInfoBody{
BuildName: build.Name,
BuildNumber: buildNumbers,
Project: projectKey,
DeleteArtifacts: false,
DeleteAll: false,
}
}
7 changes: 0 additions & 7 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,10 @@ require (

require (
dario.cat/mergo v1.0.1 // indirect
github.com/BurntSushi/toml v1.4.0 // indirect
github.com/CycloneDX/cyclonedx-go v0.9.2 // indirect
github.com/Microsoft/go-winio v0.6.2 // indirect
github.com/andybalholm/brotli v1.1.1 // indirect
github.com/cloudflare/circl v1.6.0 // indirect
github.com/cpuguy83/go-md2man/v2 v2.0.6 // indirect
github.com/cyphar/filepath-securejoin v0.4.1 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/dsnet/compress v0.0.1 // indirect
Expand All @@ -46,19 +44,14 @@ require (
github.com/pjbgf/sha1cd v0.3.2 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/rivo/uniseg v0.4.7 // indirect
github.com/russross/blackfriday/v2 v2.1.0 // indirect
github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect
github.com/skeema/knownhosts v1.3.1 // indirect
github.com/ulikunitz/xz v0.5.12 // indirect
github.com/urfave/cli/v2 v2.27.5 // indirect
github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 // indirect
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect
github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 // indirect
golang.org/x/mod v0.23.0 // indirect
golang.org/x/net v0.34.0 // indirect
golang.org/x/sync v0.11.0 // indirect
golang.org/x/sys v0.30.0 // indirect
golang.org/x/tools v0.29.0 // indirect
gopkg.in/warnings.v0 v0.1.2 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
Expand Down
Loading

0 comments on commit e17342f

Please sign in to comment.