@@ -2,6 +2,8 @@ package maven
22
33import (
44 "context"
5+ "encoding/json"
6+ "errors"
57 "fmt"
68 "strings"
79
@@ -16,42 +18,62 @@ import (
1618func CleanupSnapshotVersions (ctx context.Context ) error {
1719 retainBuilds := setting .Packages .RetainMavenSnapshotBuilds
1820 debugSession := setting .Packages .DebugMavenCleanup
19- log .Debug ("Starting Maven CleanupSnapshotVersions with retainBuilds: %d, debugSession: %t" , retainBuilds , debugSession )
20-
21- if retainBuilds == - 1 {
22- log .Info ("Maven CleanupSnapshotVersions skipped because retainBuilds is set to -1" )
23- return nil
24- }
21+ log .Debug ("Maven Cleanup: starting with retainBuilds: %d, debugSession: %t" , retainBuilds , debugSession )
2522
2623 if retainBuilds < 1 {
27- return fmt .Errorf ("Maven CleanupSnapshotVersions: forbidden value for retainBuilds: %d. Minimum 1 build should be retained" , retainBuilds )
24+ log .Warn ("Maven Cleanup: skipped as value for retainBuilds less than 1: %d. Minimum 1 build should be retained" , retainBuilds )
25+ return nil
2826 }
2927
3028 versions , err := packages .GetVersionsByPackageType (ctx , 0 , packages .TypeMaven )
3129 if err != nil {
32- return fmt .Errorf ("Maven CleanupSnapshotVersions : failed to retrieve Maven package versions: %w" , err )
30+ return fmt .Errorf ("maven Cleanup : failed to retrieve Maven package versions: %w" , err )
3331 }
3432
35- var errors []error
33+ var errs []error
34+ var metadataErrors []error
3635
3736 for _ , version := range versions {
3837 if ! isSnapshotVersion (version .Version ) {
3938 continue
4039 }
4140
41+ var artifactId , groupId string
42+ if version .MetadataJSON != "" {
43+ var metadata map [string ]interface {}
44+ if err := json .Unmarshal ([]byte (version .MetadataJSON ), & metadata ); err != nil {
45+ log .Warn ("Maven Cleanup: error during cleanup: failed to unmarshal metadataJSON for package version ID: %d: %w" , version .ID , err )
46+ } else {
47+ artifactId , _ = metadata ["artifact_id" ].(string )
48+ groupId , _ = metadata ["group_id" ].(string )
49+ log .Trace ("Maven Cleanup: processing package version with ID: %s, Group ID: %s, Artifact ID: %s, Version: %s" , version .ID , groupId , artifactId , version .Version )
50+ }
51+ }
52+
4253 if err := cleanSnapshotFiles (ctx , version .ID , retainBuilds , debugSession ); err != nil {
43- errors = append (errors , fmt .Errorf ("Maven CleanupSnapshotVersions: version '%s' (ID: %d): %w" , version .Version , version .ID , err ))
54+ formattedErr := fmt .Errorf ("version '%s' (ID: %d, Group ID: %s, Artifact ID: %s): %w" ,
55+ version .Version , version .ID , groupId , artifactId , err )
56+
57+ if errors .Is (err , packages .ErrMetadataFile ) {
58+ metadataErrors = append (metadataErrors , formattedErr )
59+ } else {
60+ errs = append (errs , formattedErr )
61+ }
4462 }
4563 }
4664
47- if len (errors ) > 0 {
48- for _ , err := range errors {
49- log .Warn ("Maven CleanupSnapshotVersions: Error during cleanup: %v" , err )
65+ for _ , err := range metadataErrors {
66+ log .Warn ("Maven Cleanup: error during cleanup: %v" , err )
67+ }
68+
69+ if len (errs ) > 0 {
70+ for _ , err := range errs {
71+ log .Error ("Maven Cleanup: error during cleanup: %v" , err )
5072 }
51- return fmt .Errorf ("Maven CleanupSnapshotVersions: cleanup completed with errors: %v" , errors )
73+ return fmt .Errorf ("maven Cleanup: completed with errors: %v" , errs )
5274 }
5375
54- log .Debug ("Completed Maven CleanupSnapshotVersions " )
76+ log .Trace ("Completed Maven Cleanup " )
5577 return nil
5678}
5779
@@ -60,27 +82,27 @@ func isSnapshotVersion(version string) bool {
6082}
6183
6284func cleanSnapshotFiles (ctx context.Context , versionID int64 , retainBuilds int , debugSession bool ) error {
63- log .Debug ( "Starting Maven cleanSnapshotFiles for versionID: %d with retainBuilds: %d, debugSession: %t" , versionID , retainBuilds , debugSession )
85+ log .Trace ( " Maven Cleanup: starting cleanSnapshotFiles for versionID: %d with retainBuilds: %d, debugSession: %t" , versionID , retainBuilds , debugSession )
6486
6587 metadataFile , err := packages .GetFileForVersionByName (ctx , versionID , "maven-metadata.xml" , packages .EmptyFileKey )
6688 if err != nil {
67- return fmt .Errorf ("cleanSnapshotFiles : failed to retrieve Maven metadata file for version ID %d : %w" , versionID , err )
89+ return fmt .Errorf ("%w : failed to retrieve maven- metadata.xml : %w" , packages . ErrMetadataFile , err )
6890 }
6991
7092 maxBuildNumber , classifiers , err := extractMaxBuildNumber (ctx , metadataFile )
7193 if err != nil {
72- return fmt .Errorf ("cleanSnapshotFiles : failed to extract max build number from maven-metadata.xml for version ID %d : %w" , versionID , err )
94+ return fmt .Errorf ("%w : failed to extract max build number from maven-metadata.xml: %w" , packages . ErrMetadataFile , err )
7395 }
7496
7597 thresholdBuildNumber := maxBuildNumber - retainBuilds
7698 if thresholdBuildNumber <= 0 {
77- log .Debug ( "cleanSnapshotFiles: No files to clean up, as the threshold build number is less than or equal to zero for versionID %d" , versionID )
99+ log .Trace ( "Maven Cleanup: no files to clean up, as the threshold build number is less than or equal to zero for versionID %d" , versionID )
78100 return nil
79101 }
80102
81103 filesToRemove , skippedFiles , err := packages .GetFilesBelowBuildNumber (ctx , versionID , thresholdBuildNumber , classifiers ... )
82104 if err != nil {
83- return fmt .Errorf ("cleanSnapshotFiles: failed to retrieve files for version ID %d : %w" , versionID , err )
105+ return fmt .Errorf ("cleanSnapshotFiles: failed to retrieve files for version: %w" , err )
84106 }
85107
86108 if debugSession {
@@ -94,36 +116,35 @@ func cleanSnapshotFiles(ctx context.Context, versionID int64, retainBuilds int,
94116 skippedFileNames = append (skippedFileNames , file .Name )
95117 }
96118
97- log .Info ( "cleanSnapshotFiles: Debug session active. Files to remove: %v, Skipped files: %v" , fileNamesToRemove , skippedFileNames )
119+ log .Debug ( "Maven Cleanup: debug session active. Files to remove: %v, Skipped files: %v" , fileNamesToRemove , skippedFileNames )
98120 return nil
99121 }
100122
101123 for _ , file := range filesToRemove {
102- log .Debug ( "Removing file '%s' below threshold %d" , file .Name , thresholdBuildNumber )
124+ log .Trace ( "Maven Cleanup: removing file '%s' below threshold %d" , file .Name , thresholdBuildNumber )
103125 if err := packages_service .DeletePackageFile (ctx , file ); err != nil {
104- return fmt .Errorf ("Maven cleanSnapshotFiles: failed to delete file '%s': %w" , file .Name , err )
126+ return fmt .Errorf ("cleanSnapshotFiles: failed to delete file '%s': %w" , file .Name , err )
105127 }
106128 }
107129
108- log .Debug ("Completed Maven cleanSnapshotFiles for versionID: %d" , versionID )
109130 return nil
110131}
111132
112133func extractMaxBuildNumber (ctx context.Context , metadataFile * packages.PackageFile ) (int , []string , error ) {
113134 pb , err := packages .GetBlobByID (ctx , metadataFile .BlobID )
114135 if err != nil {
115- return 0 , nil , fmt .Errorf ("extractMaxBuildNumber: failed to get package blob: %w" , err )
136+ return 0 , nil , fmt .Errorf ("failed to get package blob: %w" , err )
116137 }
117138
118- content , _ , _ , err := packages_service .GetPackageBlobStream (ctx , metadataFile , pb , nil , true )
139+ content , _ , _ , err := packages_service .OpenBlobForDownload (ctx , metadataFile , pb , "" , nil , true )
119140 if err != nil {
120- return 0 , nil , fmt .Errorf ("extractMaxBuildNumber: failed to get package file stream: %w" , err )
141+ return 0 , nil , fmt .Errorf ("failed to get package file stream: %w" , err )
121142 }
122143 defer content .Close ()
123144
124145 snapshotMetadata , err := maven .ParseSnapshotVersionMetaData (content )
125146 if err != nil {
126- return 0 , nil , fmt .Errorf ("extractMaxBuildNumber: failed to parse maven-metadata.xml: %w" , err )
147+ return 0 , nil , fmt .Errorf ("failed to parse maven-metadata.xml: %w" , err )
127148 }
128149
129150 buildNumber := snapshotMetadata .BuildNumber
0 commit comments