-
Notifications
You must be signed in to change notification settings - Fork 80
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Roll back package uploads on metadata failure #645
Comments
The fix for this issue should include a test that verifies a failure in one part of the pipeline rolls back other changes such that we can re-issue the publish command and succeed. The tests for that are located here: registry-dev/app/test/App/API.purs Lines 54 to 58 in 8177cd3
|
I am not convinced about rolling back storage uploads: we support multiple storage backends, so would we try to roll all of them back if the pipeline fails? That feels messy. I wonder if we should instead ensure that the pipeline can never fail after we push to the storage backend(s). |
I don’t see how we could ensure the pipeline never fails — we can do our best to avoid failure, but we’re dealing with a remote git server so there’s always some possibility of failure |
Yeah I see. I guess my gut feel on this is that once we have "committed" to a package publish, then the only option is to move forward with is and deletion should not be an option.
|
A recent package upload failed to upload metadata to the registry after the tarball was uploaded to storage. The author retried the publishing workflow, but publishing failed because there was already a tarball in storage. See:
purescript/registry#336 (comment)
purescript/registry#336 (comment)
Specifically, in this section of
publishRegistry
, theStorage.upload
andRegistry.writeMetadata
functions can throw exceptions, and the process is aborted if so:registry-dev/app/src/App/API.purs
Lines 644 to 647 in 8177cd3
We should probably catch the
Registry.writeMetadata
exception and roll back theStorage.upload
(ie. issue aStorage.delete
) before fully exiting the pipeline. Alternately, we could have a sort of bracket functionality built into the publish pipeline where we record what resources have been modified and on publish failure we roll back all of those modifications.The text was updated successfully, but these errors were encountered: