diff --git a/routers/api/packages/arch/arch.go b/routers/api/packages/arch/arch.go index 614bc4cb11..38599dcde7 100644 --- a/routers/api/packages/arch/arch.go +++ b/routers/api/packages/arch/arch.go @@ -165,6 +165,12 @@ func PushPackage(ctx *context.Context) { apiError(ctx, http.StatusInternalServerError, err) return } + if p.FileMetadata.Arch == "any" { + if err = arch_service.BuildCustomRepositoryFiles(ctx, ctx.Package.Owner.ID, group); err != nil { + apiError(ctx, http.StatusInternalServerError, err) + return + } + } ctx.Status(http.StatusCreated) } diff --git a/services/packages/arch/repository.go b/services/packages/arch/repository.go index a326ac325a..714998223a 100644 --- a/services/packages/arch/repository.go +++ b/services/packages/arch/repository.go @@ -285,6 +285,14 @@ func GetPackageDBFile(ctx context.Context, group, arch string, ownerID int64, si fileName = fmt.Sprintf("%s.db.sig", arch) } file, err := packages_model.GetFileForVersionByName(ctx, pv.ID, fileName, group) + // failback to any db + if errors.Is(err, util.ErrNotExist) && arch != "any" { + fileName = "any.db" + if signFile { + fileName = "any.db.sig" + } + file, err = packages_model.GetFileForVersionByName(ctx, pv.ID, fileName, group) + } if err != nil { return nil, nil, nil, err } diff --git a/tests/integration/api_packages_arch_test.go b/tests/integration/api_packages_arch_test.go index 2cf0186416..8651af4a58 100644 --- a/tests/integration/api_packages_arch_test.go +++ b/tests/integration/api_packages_arch_test.go @@ -336,6 +336,30 @@ HMhNSS1IzUsBcpJAPFAwwUXSM0u4BjoaR8EoGAWjgGQAAILFeyQADAAA MakeRequest(t, req, http.StatusNoContent) } }) + t.Run("Package Arch Test", func(t *testing.T) { + defer tests.PrintCurrentTest(t)() + req := NewRequestWithBody(t, "PUT", rootURL, bytes.NewReader(pkgs["any"])). + AddBasicAuth(user.Name) + MakeRequest(t, req, http.StatusCreated) + + req = NewRequest(t, "GET", rootURL+"/x86_64/base.db") + respPkg := MakeRequest(t, req, http.StatusOK) + + files, err := listTarGzFiles(respPkg.Body.Bytes()) + require.NoError(t, err) + require.Len(t, files, 1) + + req = NewRequestWithBody(t, "PUT", rootURL, bytes.NewReader(pkgs["otherXZ"])). + AddBasicAuth(user.Name) + MakeRequest(t, req, http.StatusCreated) + + req = NewRequest(t, "GET", rootURL+"/x86_64/base.db") + respPkg = MakeRequest(t, req, http.StatusOK) + + files, err = listTarGzFiles(respPkg.Body.Bytes()) + require.NoError(t, err) + require.Len(t, files, 2) + }) } func getProperty(data, key string) string {