func fixOCIArchive()

in scripts/pusher/main.go [245:292]


func fixOCIArchive(dir string) error {
	indexPath := filepath.Join(dir, "index.json")

	index, err := os.Open(indexPath)
	if err != nil {
		return fmt.Errorf("opening index: %w", err)
	}
	defer index.Close()

	indexManifest, err := v1.ParseIndexManifest(index)
	if err != nil {
		return err
	}

	// only proceed if we get one manifest
	if len(indexManifest.Manifests) > 1 {
		return nil
	}
	if !indexManifest.Manifests[0].MediaType.IsIndex() {
		return nil
	}

	digest := indexManifest.Manifests[0].Digest
	blobPath := filepath.Join(dir, "blobs", digest.Algorithm, digest.Hex)
	imageIndex, err := os.Open(blobPath)
	if err != nil {
		return err
	}

	indexManifest, err = v1.ParseIndexManifest(imageIndex)
	if err != nil {
		return err
	}

	// only proceed if we get an image manifest
	if len(indexManifest.Manifests) == 0 || !indexManifest.Manifests[0].MediaType.IsImage() {
		return nil
	}

	if err := os.Remove(indexPath); err != nil {
		return err
	}
	if err := os.Rename(blobPath, indexPath); err != nil {
		return err
	}

	return nil
}