|
|
|
|
@ -82,9 +82,11 @@ type processManifestTxRet struct {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func handleCreateManifestResult(ctx context.Context, err error, mci *manifestCreationInfo, contentStore *packages_module.ContentStore, txRet *processManifestTxRet) (string, error) {
|
|
|
|
|
if err != nil && txRet.created && txRet.pb != nil {
|
|
|
|
|
if err := contentStore.Delete(packages_module.BlobHash256Key(txRet.pb.HashSHA256)); err != nil {
|
|
|
|
|
log.Error("Error deleting package blob from content store: %v", err)
|
|
|
|
|
if err != nil {
|
|
|
|
|
if txRet.created && txRet.pb != nil {
|
|
|
|
|
if err := contentStore.Delete(packages_module.BlobHash256Key(txRet.pb.HashSHA256)); err != nil {
|
|
|
|
|
log.Error("Error deleting package blob from content store: %v", err)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return "", err
|
|
|
|
|
}
|
|
|
|
|
@ -198,14 +200,14 @@ func processOciImageIndex(ctx context.Context, mci *manifestCreationInfo, buf *p
|
|
|
|
|
if errors.Is(err, container_model.ErrContainerBlobNotExist) {
|
|
|
|
|
return errManifestBlobUnknown
|
|
|
|
|
}
|
|
|
|
|
return err
|
|
|
|
|
return fmt.Errorf("GetContainerBlob: %w", err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
size, err := packages_model.CalculateFileSize(ctx, &packages_model.PackageFileSearchOptions{
|
|
|
|
|
VersionID: pfd.File.VersionID,
|
|
|
|
|
})
|
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
return fmt.Errorf("CalculateFileSize: %w", err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
metadata.Manifests = append(metadata.Manifests, &container_module.Manifest{
|
|
|
|
|
@ -217,7 +219,7 @@ func processOciImageIndex(ctx context.Context, mci *manifestCreationInfo, buf *p
|
|
|
|
|
|
|
|
|
|
pv, err := createPackageAndVersion(ctx, mci, metadata)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
return fmt.Errorf("createPackageAndVersion: %w", err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
txRet.pv = pv
|
|
|
|
|
@ -240,7 +242,7 @@ func createPackageAndVersion(ctx context.Context, mci *manifestCreationInfo, met
|
|
|
|
|
if p, err = packages_model.TryInsertPackage(ctx, p); err != nil {
|
|
|
|
|
if !errors.Is(err, packages_model.ErrDuplicatePackage) {
|
|
|
|
|
log.Error("Error inserting package: %v", err)
|
|
|
|
|
return nil, err
|
|
|
|
|
return nil, fmt.Errorf("TryInsertPackage: %w", err)
|
|
|
|
|
}
|
|
|
|
|
created = false
|
|
|
|
|
}
|
|
|
|
|
@ -248,7 +250,7 @@ func createPackageAndVersion(ctx context.Context, mci *manifestCreationInfo, met
|
|
|
|
|
if created {
|
|
|
|
|
if _, err := packages_model.InsertProperty(ctx, packages_model.PropertyTypePackage, p.ID, container_module.PropertyRepository, strings.ToLower(mci.Owner.LowerName+"/"+mci.Image)); err != nil {
|
|
|
|
|
log.Error("Error setting package property: %v", err)
|
|
|
|
|
return nil, err
|
|
|
|
|
return nil, fmt.Errorf("InsertProperty(PropertyRepository): %w", err)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -256,7 +258,7 @@ func createPackageAndVersion(ctx context.Context, mci *manifestCreationInfo, met
|
|
|
|
|
|
|
|
|
|
metadataJSON, err := json.Marshal(metadata)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
return nil, fmt.Errorf("json.Marshal(metadata): %w", err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// "docker buildx imagetools create" multi-arch operations:
|
|
|
|
|
@ -276,43 +278,43 @@ func createPackageAndVersion(ctx context.Context, mci *manifestCreationInfo, met
|
|
|
|
|
pv, err := packages_model.GetOrInsertVersion(ctx, _pv)
|
|
|
|
|
if err != nil {
|
|
|
|
|
if !errors.Is(err, packages_model.ErrDuplicatePackageVersion) {
|
|
|
|
|
log.Error("Error inserting package: %v", err)
|
|
|
|
|
return nil, err
|
|
|
|
|
log.Error("Error GetOrInsertVersion (first try) package: %v", err)
|
|
|
|
|
return nil, fmt.Errorf("GetOrInsertVersion: first try: %w", err)
|
|
|
|
|
}
|
|
|
|
|
if err = packages_service.DeletePackageVersionAndReferences(ctx, pv); err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
return nil, fmt.Errorf("DeletePackageVersionAndReferences: %w", err)
|
|
|
|
|
}
|
|
|
|
|
// keep download count on overwriting
|
|
|
|
|
_pv.DownloadCount = pv.DownloadCount
|
|
|
|
|
pv, err = packages_model.GetOrInsertVersion(ctx, _pv)
|
|
|
|
|
if err != nil {
|
|
|
|
|
if !errors.Is(err, packages_model.ErrDuplicatePackageVersion) {
|
|
|
|
|
log.Error("Error inserting package: %v", err)
|
|
|
|
|
return nil, err
|
|
|
|
|
log.Error("Error GetOrInsertVersion (second try) package: %v", err)
|
|
|
|
|
return nil, fmt.Errorf("GetOrInsertVersion: second try: %w", err)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if err := packages_service.CheckCountQuotaExceeded(ctx, mci.Creator, mci.Owner); err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
return nil, fmt.Errorf("CheckCountQuotaExceeded: %w", err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if mci.IsTagged {
|
|
|
|
|
if err = packages_model.InsertOrUpdateProperty(ctx, packages_model.PropertyTypeVersion, pv.ID, container_module.PropertyManifestTagged, ""); err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
return nil, fmt.Errorf("InsertOrUpdateProperty(ManifestTagged): %w", err)
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
if err = packages_model.DeletePropertiesByName(ctx, packages_model.PropertyTypeVersion, pv.ID, container_module.PropertyManifestTagged); err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
return nil, fmt.Errorf("DeletePropertiesByName(ManifestTagged): %w", err)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if err = packages_model.DeletePropertiesByName(ctx, packages_model.PropertyTypeVersion, pv.ID, container_module.PropertyManifestReference); err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
return nil, fmt.Errorf("DeletePropertiesByName(ManifestReference): %w", err)
|
|
|
|
|
}
|
|
|
|
|
for _, manifest := range metadata.Manifests {
|
|
|
|
|
if _, err = packages_model.InsertProperty(ctx, packages_model.PropertyTypeVersion, pv.ID, container_module.PropertyManifestReference, manifest.Digest); err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
return nil, fmt.Errorf("InsertProperty(ManifestReference): %w", err)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|