Preserve delivery outcomes when cleanup fails
This commit is contained in:
@@ -426,20 +426,7 @@ func deliverWithDestination(ctx context.Context, invocation cli.Invocation, sett
|
||||
Output: stderr,
|
||||
})
|
||||
if err != nil {
|
||||
fmt.Fprintf(stderr, "delivery state=%s module=%s module-dir=%s version=%s tag=%s commit=%s url=%s: %v\n", result.State, result.ModulePath, result.ModuleDir, result.Version, result.Tag, result.CandidateCommit, result.ReleaseURL, err)
|
||||
writeDeliveryAssets(stderr, result)
|
||||
writeDeliveryRecovery(stderr, result)
|
||||
if errors.Is(err, releasekit.ErrInvalidVersion) {
|
||||
return 2
|
||||
}
|
||||
var preflightErr *releasekit.DeliveryPreflightError
|
||||
if errors.As(err, &preflightErr) {
|
||||
return deliveryPreflightExitStatus(preflightErr)
|
||||
}
|
||||
if result.State == releasekit.DeliveryUnknown {
|
||||
return 3
|
||||
}
|
||||
return 1
|
||||
return reportDeliveryFailure(stderr, result, err)
|
||||
}
|
||||
fmt.Fprintf(stdout, "delivered module %s version %s tag %s at %s (state %s)\n", result.ModulePath, result.Version, result.Tag, result.CandidateCommit, result.State)
|
||||
if result.ReleaseURL != "" {
|
||||
@@ -449,6 +436,29 @@ func deliverWithDestination(ctx context.Context, invocation cli.Invocation, sett
|
||||
return 0
|
||||
}
|
||||
|
||||
func reportDeliveryFailure(output io.Writer, result releasekit.DeliveryResult, err error) int {
|
||||
if result.State == releasekit.DeliveryComplete {
|
||||
fmt.Fprintln(output, "hosted delivery completed; local cleanup failed")
|
||||
}
|
||||
fmt.Fprintf(output, "delivery state=%s module=%s module-dir=%s version=%s tag=%s commit=%s url=%s: %v\n", result.State, result.ModulePath, result.ModuleDir, result.Version, result.Tag, result.CandidateCommit, result.ReleaseURL, err)
|
||||
writeDeliveryAssets(output, result)
|
||||
writeDeliveryRecovery(output, result)
|
||||
if result.State == releasekit.DeliveryComplete {
|
||||
return 1
|
||||
}
|
||||
if errors.Is(err, releasekit.ErrInvalidVersion) {
|
||||
return 2
|
||||
}
|
||||
var preflightErr *releasekit.DeliveryPreflightError
|
||||
if errors.As(err, &preflightErr) {
|
||||
return deliveryPreflightExitStatus(preflightErr)
|
||||
}
|
||||
if result.State == releasekit.DeliveryUnknown {
|
||||
return 3
|
||||
}
|
||||
return 1
|
||||
}
|
||||
|
||||
func deliveryPreflightExitStatus(err error) int {
|
||||
var preflightErr *releasekit.DeliveryPreflightError
|
||||
if !errors.As(err, &preflightErr) {
|
||||
|
||||
@@ -1061,6 +1061,15 @@ func TestDeliverRejectsInvalidTaggedSourceBeforeManagedBuild(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestCompletedDeliveryCleanupFailureReportsCompletedState(t *testing.T) {
|
||||
var output bytes.Buffer
|
||||
result := releasekit.DeliveryResult{State: releasekit.DeliveryComplete, ModulePath: "example.com/app", Tag: "v1.2.3", ReleaseURL: "https://example.invalid/release", Uploaded: []releasekit.DeliveryAsset{{Filename: "app", SHA256: "digest"}}}
|
||||
status := reportDeliveryFailure(&output, result, errors.New("remove temporary directory: failed"))
|
||||
if status != 1 || !strings.Contains(output.String(), "hosted delivery completed; local cleanup failed") || !strings.Contains(output.String(), "uploaded app digest") || strings.Contains(output.String(), "retry") {
|
||||
t.Fatalf("status = %d, output = %q", status, output.String())
|
||||
}
|
||||
}
|
||||
|
||||
func TestDeliverFailureReportsRecoveryForPartialConflictAndUnknownStates(t *testing.T) {
|
||||
for _, test := range []struct {
|
||||
name string
|
||||
|
||||
Reference in New Issue
Block a user