Skip to content

Commit 0d46111

Browse files
Added test for maven cleanup
1 parent a7b6d01 commit 0d46111

File tree

8 files changed

+298
-16
lines changed

8 files changed

+298
-16
lines changed

models/fixtures/package.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
-
2+
id: 1
3+
owner_id: 2
4+
type: maven
5+
name: com.gitea:test-project
6+
lower_name: com.gitea:test-project

models/fixtures/package_blob.yml

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
-
2+
id: 1
3+
size: 14
4+
hash_md5: 27224a672372115e5a1d125ed7b2a0b1
5+
hash_sha1: 9854582a2958b2d31541ce4a6a1a36201b80c01
6+
hash_sha256: 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a01
7+
hash_sha512: ee26b0dd4af7e749aa1a8ee3c10ae9923f618980772e473f8819a5d4940e0db27ac185f8a0e1d5f84f88bc887fd67b143732c304cc5fa9ad8e6f57f50028a801
8+
created_unix: 1672531200
9+
-
10+
id: 2
11+
size: 14
12+
hash_md5: 27224a672372115e5a1d125ed7b2a0b2
13+
hash_sha1: 9854582a2958b2d31541ce4a6a1a36201b80c02
14+
hash_sha256: 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a02
15+
hash_sha512: ee26b0dd4af7e749aa1a8ee3c10ae9923f618980772e473f8819a5d4940e0db27ac185f8a0e1d5f84f88bc887fd67b143732c304cc5fa9ad8e6f57f50028a802
16+
created_unix: 1672531200
17+
-
18+
id: 3
19+
size: 14
20+
hash_md5: 27224a672372115e5a1d125ed7b2a0b3
21+
hash_sha1: 9854582a2958b2d31541ce4a6a1a36201b80c03
22+
hash_sha256: 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a03
23+
hash_sha512: ee26b0dd4af7e749aa1a8ee3c10ae9923f618980772e473f8819a5d4940e0db27ac185f8a0e1d5f84f88bc887fd67b143732c304cc5fa9ad8e6f57f50028a803
24+
created_unix: 1672531200
25+
-
26+
id: 4
27+
size: 14
28+
hash_md5: 27224a672372115e5a1d125ed7b2a0b4
29+
hash_sha1: 9854582a2958b2d31541ce4a6a1a36201b80c04
30+
hash_sha256: 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a04
31+
hash_sha512: ee26b0dd4af7e749aa1a8ee3c10ae9923f618980772e473f8819a5d4940e0db27ac185f8a0e1d5f84f88bc887fd67b143732c304cc5fa9ad8e6f57f50028a804
32+
created_unix: 1672531200
33+
-
34+
id: 5
35+
size: 14
36+
hash_md5: 27224a672372115e5a1d125ed7b2a0b5
37+
hash_sha1: 9854582a2958b2d31541ce4a6a1a36201b80c05
38+
hash_sha256: 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a05
39+
hash_sha512: ee26b0dd4af7e749aa1a8ee3c10ae9923f618980772e473f8819a5d4940e0db27ac185f8a0e1d5f84f88bc887fd67b143732c304cc5fa9ad8e6f57f50028a805
40+
created_unix: 1672531200
41+

models/fixtures/package_file.yml

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
-
2+
id: 1
3+
version_id: 1
4+
blob_id: 1
5+
name: gitea-test-1.0-20230101.000000-1.jar
6+
lower_name: gitea-test-1.0-20230101.000000-1.jar
7+
composite_key: ""
8+
is_lead: false
9+
created_unix: 1672531200
10+
-
11+
id: 2
12+
version_id: 1
13+
blob_id: 2
14+
name: gitea-test-1.0-20230101.000000-2.jar
15+
lower_name: gitea-test-1.0-20230101.000000-2.jar
16+
composite_key: ""
17+
is_lead: false
18+
created_unix: 1672531200
19+
-
20+
id: 3
21+
version_id: 1
22+
blob_id: 3
23+
name: gitea-test-1.0-20230101.000000-3.jar
24+
lower_name: gitea-test-1.0-20230101.000000-3.jar
25+
composite_key: ""
26+
is_lead: false
27+
created_unix: 1672531200
28+
-
29+
id: 4
30+
version_id: 1
31+
blob_id: 4
32+
name: gitea-test-1.0-20230101.000000-4.jar
33+
lower_name: gitea-test-1.0-20230101.000000-4.jar
34+
composite_key: ""
35+
is_lead: false
36+
created_unix: 1672531200
37+
-
38+
id: 5
39+
version_id: 1
40+
blob_id: 5
41+
name: gitea-test-1.0-20230101.000000-5.jar
42+
lower_name: gitea-test-1.0-20230101.000000-5.jar
43+
composite_key: ""
44+
is_lead: false
45+
created_unix: 1672531200
46+
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
-
2+
id: 1
3+
package_id: 1
4+
creator_id: 2
5+
version: 1.0-SNAPSHOT
6+
lower_version: 1.0-snapshot
7+
metadata_json: '{"artifact_id":"test-project","group_id":"com.gitea"}'
8+
created_unix: 1672531200

models/packages/package_file.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,7 @@ func HasFiles(ctx context.Context, opts *PackageFileSearchOptions) (bool, error)
236236
return db.Exist[PackageFile](ctx, opts.toConds())
237237
}
238238

239-
// GetFilesBelowBuildNumber retrieves all files for maven snapshot version where the build number is <= maxBuildNumber.
239+
// GetFilesBelowBuildNumber retrieves all files for a Maven snapshot version where the build number is <= maxBuildNumber.
240240
// Returns two slices: one for filtered files and one for skipped files.
241241
func GetFilesBelowBuildNumber(ctx context.Context, versionID int64, maxBuildNumber int, classifiers ...string) ([]*PackageFile, []*PackageFile, error) {
242242
if maxBuildNumber <= 0 {
@@ -255,13 +255,14 @@ func GetFilesBelowBuildNumber(ctx context.Context, versionID int64, maxBuildNumb
255255

256256
var filteredFiles, skippedFiles []*PackageFile
257257
for _, file := range files {
258-
buildNumber, err := ExtractBuildNumberFromFileName(file.Name, classifiers...)
258+
buildNumber, err := extractBuildNumberFromFileName(file.Name, classifiers...)
259259
if err != nil {
260260
if !errors.Is(err, ErrMetadataFile) {
261261
skippedFiles = append(skippedFiles, file)
262262
}
263263
continue
264264
}
265+
265266
if buildNumber <= maxBuildNumber {
266267
filteredFiles = append(filteredFiles, file)
267268
}
@@ -270,12 +271,12 @@ func GetFilesBelowBuildNumber(ctx context.Context, versionID int64, maxBuildNumb
270271
return filteredFiles, skippedFiles, nil
271272
}
272273

273-
// ExtractBuildNumberFromFileName extracts the build number from a Maven snapshot file name.
274+
// extractBuildNumberFromFileName extracts the build number from a Maven snapshot file name.
274275
// Expected formats:
275276
//
276277
// "artifact-1.0.0-20250311.083409-9.tgz" returns 9
277278
// "artifact-to-test-2.0.0-20250311.083409-10-sources.tgz" returns 10
278-
func ExtractBuildNumberFromFileName(filename string, classifiers ...string) (int, error) {
279+
func extractBuildNumberFromFileName(filename string, classifiers ...string) (int, error) {
279280
if strings.Contains(filename, "maven-metadata.xml") {
280281
return 0, ErrMetadataFile
281282
}

models/packages/package_version.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,15 @@ func GetVersionsByPackageName(ctx context.Context, ownerID int64, packageType Ty
156156
return pvs, err
157157
}
158158

159+
// GetVersionsByPackageID gets all versions of a specific package
160+
func GetVersionsByPackageID(ctx context.Context, packageID int64) ([]*PackageVersion, error) {
161+
pvs, _, err := SearchVersions(ctx, &PackageSearchOptions{
162+
PackageID: packageID,
163+
IsInternal: optional.Some(false),
164+
})
165+
return pvs, err
166+
}
167+
159168
// DeleteVersionByID deletes a version by id
160169
func DeleteVersionByID(ctx context.Context, versionID int64) error {
161170
_, err := db.GetEngine(ctx).ID(versionID).Delete(&PackageVersion{})

services/packages/maven/cleanup.go

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@ package maven
22

33
import (
44
"context"
5-
"encoding/json"
65
"errors"
76
"fmt"
87
"strings"
98

109
"code.gitea.io/gitea/models/packages"
10+
"code.gitea.io/gitea/modules/json"
1111
"code.gitea.io/gitea/modules/log"
1212
"code.gitea.io/gitea/modules/packages/maven"
1313
"code.gitea.io/gitea/modules/setting"
@@ -38,21 +38,21 @@ func CleanupSnapshotVersions(ctx context.Context) error {
3838
continue
3939
}
4040

41-
var artifactId, groupId string
41+
var artifactID, groupID string
4242
if version.MetadataJSON != "" {
43-
var metadata map[string]interface{}
43+
var metadata map[string]any
4444
if err := json.Unmarshal([]byte(version.MetadataJSON), &metadata); err != nil {
4545
log.Warn("Maven Cleanup: error during cleanup: failed to unmarshal metadataJSON for package version ID: %d: %w", version.ID, err)
4646
} 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)
47+
artifactID, _ = metadata["artifact_id"].(string)
48+
groupID, _ = metadata["group_id"].(string)
49+
log.Debug("Maven Cleanup: processing package version with ID: %s, Group ID: %s, Artifact ID: %s, Version: %s", version.ID, groupID, artifactID, version.Version)
5050
}
5151
}
5252

5353
if err := cleanSnapshotFiles(ctx, version.ID, retainBuilds, debugSession); err != nil {
5454
formattedErr := fmt.Errorf("version '%s' (ID: %d, Group ID: %s, Artifact ID: %s): %w",
55-
version.Version, version.ID, groupId, artifactId, err)
55+
version.Version, version.ID, groupID, artifactID, err)
5656

5757
if errors.Is(err, packages.ErrMetadataFile) {
5858
metadataErrors = append(metadataErrors, formattedErr)
@@ -70,10 +70,10 @@ func CleanupSnapshotVersions(ctx context.Context) error {
7070
for _, err := range errs {
7171
log.Error("Maven Cleanup: error during cleanup: %v", err)
7272
}
73-
return fmt.Errorf("maven Cleanup: completed with errors: %v", errs)
73+
return fmt.Errorf("maven cleanup: completed with errors: %v", errs)
7474
}
7575

76-
log.Trace("Completed Maven Cleanup")
76+
log.Debug("Completed Maven Cleanup")
7777
return nil
7878
}
7979

@@ -82,7 +82,7 @@ func isSnapshotVersion(version string) bool {
8282
}
8383

8484
func cleanSnapshotFiles(ctx context.Context, versionID int64, retainBuilds int, debugSession bool) error {
85-
log.Trace("Maven Cleanup: starting cleanSnapshotFiles for versionID: %d with retainBuilds: %d, debugSession: %t", versionID, retainBuilds, debugSession)
85+
log.Debug("Maven Cleanup: starting cleanSnapshotFiles for versionID: %d with retainBuilds: %d, debugSession: %t", versionID, retainBuilds, debugSession)
8686

8787
metadataFile, err := packages.GetFileForVersionByName(ctx, versionID, "maven-metadata.xml", packages.EmptyFileKey)
8888
if err != nil {
@@ -96,7 +96,7 @@ func cleanSnapshotFiles(ctx context.Context, versionID int64, retainBuilds int,
9696

9797
thresholdBuildNumber := maxBuildNumber - retainBuilds
9898
if thresholdBuildNumber <= 0 {
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)
99+
log.Debug("Maven Cleanup: no files to clean up, as the threshold build number is less than or equal to zero for versionID %d", versionID)
100100
return nil
101101
}
102102

@@ -121,7 +121,7 @@ func cleanSnapshotFiles(ctx context.Context, versionID int64, retainBuilds int,
121121
}
122122

123123
for _, file := range filesToRemove {
124-
log.Trace("Maven Cleanup: removing file '%s' below threshold %d", file.Name, thresholdBuildNumber)
124+
log.Debug("Maven Cleanup: removing file '%s' below threshold %d", file.Name, thresholdBuildNumber)
125125
if err := packages_service.DeletePackageFile(ctx, file); err != nil {
126126
return fmt.Errorf("cleanSnapshotFiles: failed to delete file '%s': %w", file.Name, err)
127127
}

0 commit comments

Comments
 (0)