Monorepo for Tangled
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

appview/knotstream: check for repo existience before permitting events

Signed-off-by: oppiliappan <me@oppi.li>

+26 -22
+26 -22
appview/state/knotstream.go
··· 96 96 return fmt.Errorf("%s does not belong to %s, something is fishy", record.CommitterDid, source.Key()) 97 97 } 98 98 99 + repo, err := db.GetRepo( 100 + d, 101 + orm.FilterEq("did", record.RepoDid), 102 + orm.FilterEq("name", record.RepoName), 103 + orm.FilterEq("knot", source.Key()), 104 + ) 105 + if err != nil { 106 + return fmt.Errorf("repo %s/%s on knot %s not found", record.RepoDid, record.RepoName, source.Key()) 107 + } 108 + 99 109 logger.Info("processing gitRefUpdate event", 100 110 "repo_did", record.RepoDid, 101 111 "repo_name", record.RepoName, ··· 103 113 "old_sha", record.OldSha, 104 114 "new_sha", record.NewSha) 105 115 106 - // trigger webhook notifications first (before other ops that might fail) 107 - var errWebhook error 108 - repos, err := db.GetRepos( 109 - d, 110 - 0, 111 - orm.FilterEq("did", record.RepoDid), 112 - orm.FilterEq("name", record.RepoName), 113 - ) 114 - if err != nil { 115 - errWebhook = fmt.Errorf("failed to lookup repo for webhooks: %w", err) 116 - } else if len(repos) == 1 { 117 - notifier.Push(ctx, &repos[0], record.Ref, record.OldSha, record.NewSha, record.CommitterDid) 118 - } 116 + notifier.Push(ctx, repo, record.Ref, record.OldSha, record.NewSha, record.CommitterDid) 119 117 120 118 errPunchcard := populatePunchcard(d, record) 121 119 errLanguages := updateRepoLanguages(d, record) ··· 133 131 go triggerSitesDeployIfNeeded(ctx, d, cfClient, c, record, source) 134 132 } 135 133 136 - return errors.Join(errWebhook, errPunchcard, errLanguages, errPosthog) 134 + return errors.Join(errPunchcard, errLanguages, errPosthog) 137 135 } 138 136 139 137 // triggerSitesDeployIfNeeded checks whether the pushed ref matches the sites ··· 304 302 return fmt.Errorf("empty repo: nsid %s, rkey %s", msg.Nsid, msg.Rkey) 305 303 } 306 304 307 - // does this repo have a spindle configured? 308 - repos, err := db.GetRepos( 305 + repo, err := db.GetRepo( 309 306 d, 310 - 0, 311 307 orm.FilterEq("did", record.TriggerMetadata.Repo.Did), 312 308 orm.FilterEq("name", record.TriggerMetadata.Repo.Repo), 309 + orm.FilterEq("knot", source.Key()), 313 310 ) 314 311 if err != nil { 315 - return fmt.Errorf("failed to look for repo in DB: nsid %s, rkey %s, %w", msg.Nsid, msg.Rkey, err) 316 - } 317 - if len(repos) != 1 { 318 - return fmt.Errorf("incorrect number of repos returned: %d (expected 1)", len(repos)) 312 + return fmt.Errorf( 313 + "failed to look for repo in DB: nsid %s, rkey %s, %s/%s, knot %s, %w", 314 + msg.Nsid, 315 + msg.Rkey, 316 + record.TriggerMetadata.Repo.Did, 317 + record.TriggerMetadata.Repo.Did, 318 + source.Key(), 319 + err, 320 + ) 319 321 } 320 - if repos[0].Spindle == "" { 322 + 323 + // does this repo have a spindle configured? 324 + if repo.Spindle == "" { 321 325 return fmt.Errorf("repo does not have a spindle configured yet: nsid %s, rkey %s", msg.Nsid, msg.Rkey) 322 326 } 323 327