Record publication evidence before tag pushes
This commit is contained in:
@@ -174,6 +174,13 @@ func TestPublishPushesOnlyTheCapturedAnnotatedTag(t *testing.T) {
|
||||
if result.RepositoryDir != repo.work || result.ModuleDir != repo.work || result.ModulePath != "example.com/releasekit-publish-fixture" || result.Tag != "v1.2.3" || result.CandidateCommit != commit || result.Endpoint != repo.bare || result.TagObject == "" {
|
||||
t.Fatalf("publication identity = %#v", result)
|
||||
}
|
||||
if result.RecordPath == "" || result.RecordError != nil {
|
||||
t.Fatalf("publication record path=%q error=%v", result.RecordPath, result.RecordError)
|
||||
}
|
||||
recorded, err := releasekit.LoadPublicationEvidence(result.RecordPath)
|
||||
if err != nil || recorded.Endpoint != repo.bare || recorded.Tag != result.Tag || recorded.CandidateCommit != commit || recorded.TagObject != result.TagObject || recorded.RecordedAt == "" {
|
||||
t.Fatalf("saved publication evidence=%#v, error=%v", recorded, err)
|
||||
}
|
||||
|
||||
refsAfter := gitText(t, repo.bare, "show-ref", "--heads", "--tags")
|
||||
for _, ref := range strings.Split(refsBefore, "\n") {
|
||||
@@ -207,6 +214,21 @@ func TestPublishPushesOnlyTheCapturedAnnotatedTag(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestPublishKeepsSuccessWhenAttemptRecordCannotBeSaved(t *testing.T) {
|
||||
repo := newPublishFixture(t)
|
||||
result, err := releasekit.Publish(context.Background(), releasekit.ReleaseRequest{
|
||||
RepositoryDir: repo.work, Product: "Sample App", Version: "v1.2.3", PublicationRecordDir: "unignored-records",
|
||||
AdditionalChecks: func(context.Context, releasekit.Candidate) error { return nil },
|
||||
})
|
||||
var recovery *releasekit.PublicationRecoveryError
|
||||
if err != nil || result.State != releasekit.PublicationPublished {
|
||||
t.Fatalf("publication=%#v error=%v", result, err)
|
||||
}
|
||||
if result.RecordPath != "" || !errors.As(result.RecordError, &recovery) || recovery.Kind != "record_write" {
|
||||
t.Fatalf("record path=%q error=%v", result.RecordPath, result.RecordError)
|
||||
}
|
||||
}
|
||||
|
||||
func TestPublishRejectsReplacementDerivedCheckout(t *testing.T) {
|
||||
repo := newPublishFixture(t)
|
||||
writeFile(t, repo.work, "broken.go", "package fixture\nfunc broken(\n")
|
||||
@@ -431,6 +453,10 @@ exec %s "$@"
|
||||
if !strings.Contains(err.Error(), "refs/tags/v1.2.3") || !strings.Contains(err.Error(), "may remain") {
|
||||
t.Fatalf("missing local ref evidence: %v", err)
|
||||
}
|
||||
evidence, loadErr := releasekit.LoadPublicationEvidence(result.RecordPath)
|
||||
if loadErr != nil || evidence.Tag != result.Tag || evidence.CandidateCommit != result.CandidateCommit || evidence.TagObject != result.TagObject {
|
||||
t.Fatalf("tag-inspection record=%#v error=%v", evidence, loadErr)
|
||||
}
|
||||
actual, readErr := exec.Command(realGit, "-C", repo.work, "rev-parse", "--verify", "refs/tags/v1.2.3").Output()
|
||||
if readErr != nil {
|
||||
t.Fatal(readErr)
|
||||
@@ -737,6 +763,9 @@ func TestPublishRejectedPushKeepsLocalTagAndReportsNotPublished(t *testing.T) {
|
||||
if result.State != releasekit.PublicationNotPublished || result.Phase != releasekit.PublicationReconciliation || result.TagObject == "" {
|
||||
t.Fatalf("publication result = %#v", result)
|
||||
}
|
||||
if evidence, loadErr := releasekit.LoadPublicationEvidence(result.RecordPath); loadErr != nil || evidence.TagObject != result.TagObject || evidence.CandidateCommit != result.CandidateCommit {
|
||||
t.Fatalf("rejected-push record = %#v, %v", evidence, loadErr)
|
||||
}
|
||||
if !strings.Contains(err.Error(), "failed to push some refs") || !strings.Contains(err.Error(), "authoritative tag is absent") {
|
||||
t.Fatalf("push error was not preserved with absence evidence: %v", err)
|
||||
}
|
||||
@@ -814,6 +843,9 @@ func TestPublishLostAcknowledgmentWithChangedEndpointRemainsUnknown(t *testing.T
|
||||
if err == nil || result.State != releasekit.PublicationUnknown || result.Phase != releasekit.PublicationReconciliation {
|
||||
t.Fatalf("result = %#v, error = %v", result, err)
|
||||
}
|
||||
if evidence, loadErr := releasekit.LoadPublicationEvidence(result.RecordPath); loadErr != nil || evidence.TagObject != result.TagObject {
|
||||
t.Fatalf("unknown-push record = %#v, %v", evidence, loadErr)
|
||||
}
|
||||
if !strings.Contains(err.Error(), "scoped URL resolves") || !strings.Contains(err.Error(), "lost acknowledgment") {
|
||||
t.Fatalf("error does not preserve endpoint verification and push failures: %v", err)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user