Skip to content

ensure OCI artifacts are handled strictly by digest #1245

Open
@errordeveloper

Description

@errordeveloper

Currently artifact revision (i.e. digest) is obtain here:

// Get the upstream revision from the artifact digest
revision, err := r.getRevision(url, opts.craneOpts)

It is also observed as a condition here:

message := fmt.Sprintf("new revision '%s' for '%s'", revision, url)
if obj.GetArtifact() != nil {
conditions.MarkTrue(obj, sourcev1.ArtifactOutdatedCondition, "NewRevision", message)
}
rreconcile.ProgressiveStatus(true, obj, meta.ProgressingReason, "building artifact: %s", message)
if err := sp.Patch(ctx, obj, r.patchOptions...); err != nil {
ctrl.LoggerFrom(ctx).Error(err, "failed to patch")
return
}
}

However, verification and fetching is only done by URL, and it's possible there is an update in registry in between all of these calls:

err := r.verifySignature(ctx, obj, url, opts.verifyOpts...)

// Pull artifact from the remote container registry
img, err := crane.Pull(url, opts.craneOpts...)

There maybe other race coditions. It will be easy enough to address this and reinfoce use of the same digest for all of the registry API calls.

Metadata

Metadata

Assignees

No one assigned

    Labels

    area/ociOCI related issues and pull requestsbugSomething isn't workinghelp wantedExtra attention is needed

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions