Monorepo for Tangled tangled.org

appview: update state, ingester, middleware, and resolver for repo DID #1140

open opened by oyster.cafe targeting master from oyster.cafe/tangled-core: master
Labels

None yet.

assignee

None yet.

Participants 2
AT URI
at://did:plc:3fwecdnvtcscjnrx2p4n7alz/sh.tangled.repo.pull/3mgprvt2eon22
+46 -46
Interdiff #9 #10
appview/ingester.go

This file has not been changed.

appview/issues/issues.go

This file has not been changed.

appview/middleware/middleware.go

This file has not been changed.

appview/pulls/pulls.go

This file has not been changed.

appview/repo/archive.go

This file has not been changed.

appview/repo/artifact.go

This file has not been changed.

appview/repo/blob.go

This file has not been changed.

appview/repo/branches.go

This file has not been changed.

appview/repo/compare.go

This file has not been changed.

appview/repo/index.go

This file has not been changed.

appview/repo/log.go

This file has not been changed.

appview/repo/repo.go

This file has not been changed.

appview/repo/settings.go

This file has not been changed.

appview/repo/tags.go

This file has not been changed.

appview/repo/tree.go

This file has not been changed.

appview/reporesolver/resolver.go

This file has not been changed.

appview/state/git_http.go

This file has not been changed.

+44 -42
appview/state/knotstream.go
··· 67 67 return ec.NewConsumer(cfg), nil 68 68 } 69 69 70 + func resolveRepo(d *db.DB, repoDid *string, ownerDid, repoName string) (*models.Repo, error) { 71 + if repoDid != nil && *repoDid != "" { 72 + return db.GetRepoByDid(d, *repoDid) 73 + } 74 + repos, err := db.GetRepos(d, 1, orm.FilterEq("did", ownerDid), orm.FilterEq("name", repoName)) 75 + if err != nil { 76 + return nil, err 77 + } 78 + if len(repos) == 0 { 79 + return nil, sql.ErrNoRows 80 + } 81 + return &repos[0], nil 82 + } 83 + 70 84 func knotIngester(d *db.DB, enforcer *rbac.Enforcer, posthog posthog.Client, notifier notify.Notifier, dev bool, c *config.Config, cfClient *cloudflare.Client) ec.ProcessFunc { 71 85 return func(ctx context.Context, source ec.Source, msg ec.Message) error { 72 86 switch msg.Nsid { ··· 89 103 return err 90 104 } 91 105 92 - if record.RepoDid == nil || *record.RepoDid == "" { 93 - logger.Error("gitRefUpdate missing repoDid, skipping", "repo_name", record.RepoName) 94 - return fmt.Errorf("gitRefUpdate missing repoDid") 95 - } 96 - 97 106 knownKnots, err := enforcer.GetKnotsForUser(record.CommitterDid) 98 107 if err != nil { 99 108 return err ··· 102 111 return fmt.Errorf("%s does not belong to %s, something is fishy", record.CommitterDid, source.Key()) 103 112 } 104 113 114 + ownerDid := "" 115 + if record.OwnerDid != nil { 116 + ownerDid = *record.OwnerDid 117 + } 118 + 119 + repo, lookupErr := resolveRepo(d, record.RepoDid, ownerDid, record.RepoName) 120 + if lookupErr != nil { 121 + return fmt.Errorf("failed to look up repo: %w", lookupErr) 122 + } 123 + 105 124 logger.Info("processing gitRefUpdate event", 106 - "repo_did", *record.RepoDid, 125 + "repo", repo.RepoIdentifier(), 107 126 "ref", record.Ref, 108 127 "old_sha", record.OldSha, 109 128 "new_sha", record.NewSha) 110 129 111 - var errWebhook error 112 - 113 - repo, lookupErr := db.GetRepoByDid(d, *record.RepoDid) 114 - if lookupErr != nil && !errors.Is(lookupErr, sql.ErrNoRows) { 115 - return fmt.Errorf("failed to look up repo by DID %s: %w", *record.RepoDid, lookupErr) 116 - } 117 - 118 - var repos []models.Repo 119 - if lookupErr == nil { 120 - repos = []models.Repo{*repo} 121 - } 122 - 123 - if errWebhook == nil && len(repos) == 1 { 124 - notifier.Push(ctx, &repos[0], record.Ref, record.OldSha, record.NewSha, record.CommitterDid) 125 - } 130 + notifier.Push(ctx, repo, record.Ref, record.OldSha, record.NewSha, record.CommitterDid) 126 131 127 132 errPunchcard := populatePunchcard(d, record) 128 133 errLanguages := updateRepoLanguages(d, record) ··· 140 145 go triggerSitesDeployIfNeeded(ctx, d, cfClient, c, record, source) 141 146 } 142 147 143 - return errors.Join(errWebhook, errPunchcard, errLanguages, errPosthog) 148 + return errors.Join(errPunchcard, errLanguages, errPosthog) 144 149 } 145 150 146 151 // triggerSitesDeployIfNeeded checks whether the pushed ref matches the sites ··· 154 159 } 155 160 pushedBranch := ref.Short() 156 161 157 - if record.RepoDid == nil || *record.RepoDid == "" { 158 - return 162 + ownerDid := "" 163 + if record.OwnerDid != nil { 164 + ownerDid = *record.OwnerDid 159 165 } 160 166 161 - repo, err := db.GetRepoByDid(d, *record.RepoDid) 167 + repo, err := resolveRepo(d, record.RepoDid, ownerDid, record.RepoName) 162 168 if err != nil { 163 169 return 164 170 } ··· 185 191 Trigger: models.SiteDeployTriggerPush, 186 192 } 187 193 188 - deployErr := sites.Deploy(ctx, cfClient, knotHost, *record.RepoDid, record.RepoName, siteConfig.Branch, siteConfig.Dir) 194 + deployErr := sites.Deploy(ctx, cfClient, knotHost, repo.RepoIdentifier(), record.RepoName, siteConfig.Branch, siteConfig.Dir) 189 195 if deployErr != nil { 190 196 logger.Error("sites: R2 sync failed on push", "repo", repo.RepoIdentifier(), "err", deployErr) 191 197 deploy.Status = models.SiteDeployStatusFailure ··· 244 250 return fmt.Errorf("empty language data for repo: %v/%s", record.OwnerDid, record.RepoName) 245 251 } 246 252 247 - if record.RepoDid == nil || *record.RepoDid == "" { 248 - return fmt.Errorf("gitRefUpdate missing repoDid for language update") 253 + ownerDid := "" 254 + if record.OwnerDid != nil { 255 + ownerDid = *record.OwnerDid 249 256 } 250 257 251 - r, lookupErr := db.GetRepoByDid(d, *record.RepoDid) 258 + r, lookupErr := resolveRepo(d, record.RepoDid, ownerDid, record.RepoName) 252 259 if lookupErr != nil { 253 - return fmt.Errorf("failed to look up repo by DID %s: %w", *record.RepoDid, lookupErr) 260 + return fmt.Errorf("failed to look up repo: %w", lookupErr) 254 261 } 255 262 repo := *r 256 263 ··· 305 312 return fmt.Errorf("empty repo: nsid %s, rkey %s", msg.Nsid, msg.Rkey) 306 313 } 307 314 308 - if record.TriggerMetadata.Repo.RepoDid == nil || *record.TriggerMetadata.Repo.RepoDid == "" { 309 - return fmt.Errorf("pipeline missing repoDid: nsid %s, rkey %s", msg.Nsid, msg.Rkey) 315 + repoName := "" 316 + if record.TriggerMetadata.Repo.Repo != nil { 317 + repoName = *record.TriggerMetadata.Repo.Repo 310 318 } 311 319 312 - repo, lookupErr := db.GetRepoByDid(d, *record.TriggerMetadata.Repo.RepoDid) 320 + repo, lookupErr := resolveRepo(d, record.TriggerMetadata.Repo.RepoDid, record.TriggerMetadata.Repo.Did, repoName) 313 321 if lookupErr != nil { 314 - return fmt.Errorf("failed to look up repo by DID %s: %w", *record.TriggerMetadata.Repo.RepoDid, lookupErr) 322 + return fmt.Errorf("failed to look up repo: %w", lookupErr) 315 323 } 316 - repos := []models.Repo{*repo} 317 - if repos[0].Spindle == "" { 324 + if repo.Spindle == "" { 318 325 return fmt.Errorf("repo does not have a spindle configured yet: nsid %s, rkey %s", msg.Nsid, msg.Rkey) 319 326 } 320 327 ··· 346 353 return fmt.Errorf("failed to add trigger entry: %w", err) 347 354 } 348 355 349 - repoName := "" 350 - if record.TriggerMetadata.Repo.Repo != nil { 351 - repoName = *record.TriggerMetadata.Repo.Repo 352 - } 353 - 354 356 pipeline := models.Pipeline{ 355 357 Rkey: msg.Rkey, 356 358 Knot: source.Key(), 357 359 RepoOwner: syntax.DID(record.TriggerMetadata.Repo.Did), 358 360 RepoName: repoName, 359 - RepoDid: repos[0].RepoDid, 361 + RepoDid: repo.RepoDid, 360 362 TriggerId: int(triggerId), 361 363 Sha: sha, 362 364 }
+1 -3
appview/state/router.go
··· 1 1 package state 2 2 3 3 import ( 4 - "context" 5 4 "database/sql" 6 5 "errors" 7 6 "net/http" ··· 62 61 r2 := r.Clone(r.Context()) 63 62 r2.URL.Path = rewritten 64 63 r2.URL.RawPath = rewritten 65 - ctx := context.WithValue(r2.Context(), "repoDidCanonical", true) 66 - userRouter.ServeHTTP(w, r2.WithContext(ctx)) 64 + userRouter.ServeHTTP(w, r2) 67 65 case errors.Is(err, sql.ErrNoRows): 68 66 userRouter.ServeHTTP(w, r) 69 67 default:
appview/state/star.go

This file has not been changed.

appview/state/state.go

This file has not been changed.

+1 -1
appview/strings/strings.go
··· 149 149 showRendered = r.URL.Query().Get("code") != "true" 150 150 } 151 151 152 + starCount, err := db.GetStarCount(s.Db, "", string.AtUri()) 152 - starCount, err := db.GetStarCount(s.Db, string.AtUri()) 153 153 if err != nil { 154 154 l.Error("failed to get star count", "err", err) 155 155 }
appview/validator/label.go

This file has not been changed.

History

14 rounds 2 comments
sign up or login to add to the discussion
1 commit
expand
appview: DID-based routing, state/handler/middleware updates
no conflicts, ready to merge
expand 0 comments
1 commit
expand
appview: DID-based routing, state/handler/middleware updates
expand 0 comments
1 commit
expand
appview: DID-based routing, state/handler/middleware updates
expand 2 comments

appview/state/state.go:631 won't this eventually redirect to /{owner}/{reponame}?

wdym by eventually? I was thinking to keep this in, so that we don't simply error out if someone does decide to be clever and link to their git repo by repoDID, we should render the page anyway to reward them for being clever instead of punishing heh

oyster.cafe submitted #10
1 commit
expand
appview: DID-based routing, state/handler/middleware updates
expand 0 comments
1 commit
expand
appview: DID-based routing, state/handler/middleware updates
expand 0 comments
1 commit
expand
appview: update state, ingester, middleware, and resolver for repo DID
expand 0 comments
1 commit
expand
appview: update state, ingester, middleware, and resolver for repo DID
expand 0 comments
1 commit
expand
appview: update state, ingester, middleware, and resolver for repo DID
expand 0 comments
1 commit
expand
appview: update state, ingester, middleware, and resolver for repo DID
expand 0 comments
1 commit
expand
appview: update state, ingester, middleware, and resolver for repo DID
expand 0 comments
1 commit
expand
appview: update state, ingester, middleware, and resolver for repo DID
expand 0 comments
1 commit
expand
appview: update state, ingester, middleware, and resolver for repo DID
expand 0 comments
1 commit
expand
appview: update state, ingester, middleware, and resolver for repo DID
expand 0 comments
1 commit
expand
appview: update state, ingester, middleware, and resolver for repo DID
expand 0 comments