Skip to content

Commit f31dcc7

Browse files
authored
Fix notFound errors when encountering an old transferred issue (#371)
1 parent 9ce129b commit f31dcc7

File tree

2 files changed

+38
-19
lines changed

2 files changed

+38
-19
lines changed

.github/workflows/test.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ jobs:
1515
with_tsan: false
1616
with_api_check: false
1717
with_linting: true
18+
extra_flags: "--disable-experimental-prebuilts"
1819

1920
cloudformation-lint:
2021
name: Check CloudFormation

Lambdas/GHHooks/EventHandler/Handlers/IssueHandler.swift

Lines changed: 37 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import DiscordBM
22
import GitHubAPI
3+
import Logging
34
import Shared
45

56
struct IssueHandler: Sendable {
@@ -70,25 +71,42 @@ struct IssueHandler: Sendable {
7071
let newIssue = try changes.new_issue.requireValue()
7172
let newRepo = try changes.new_repository.requireValue()
7273
let repo = try repo
73-
let existingMessageID = try await context.messageLookupRepo.getMessageID(
74-
repoID: repo.id,
75-
number: self.issue.number
76-
)
77-
try await self.makeReporter(
78-
embedIssue: newIssue,
79-
embedRepo: changes.new_repository
80-
).reportEdition(
81-
requiresPreexistingReport: self.action == .labeled
82-
)
83-
try await self.context.messageLookupRepo.markAsUnavailable(
84-
repoID: repo.id,
85-
number: self.issue.number
86-
)
87-
try await self.context.messageLookupRepo.saveMessageID(
88-
messageID: existingMessageID,
89-
repoID: newRepo.id,
90-
number: newIssue.number
91-
)
74+
do {
75+
let existingMessageID = try await context.messageLookupRepo.getMessageID(
76+
repoID: repo.id,
77+
number: self.issue.number
78+
)
79+
context.logger.debug(
80+
"Found existing Discord message for transferred ticket",
81+
metadata: [
82+
"messageID": .stringConvertible(existingMessageID)
83+
]
84+
)
85+
try await self.makeReporter(
86+
embedIssue: newIssue,
87+
embedRepo: changes.new_repository
88+
).reportEdition(
89+
requiresPreexistingReport: self.action == .labeled
90+
)
91+
try await self.context.messageLookupRepo.markAsUnavailable(
92+
repoID: repo.id,
93+
number: self.issue.number
94+
)
95+
try await self.context.messageLookupRepo.saveMessageID(
96+
messageID: existingMessageID,
97+
repoID: newRepo.id,
98+
number: newIssue.number
99+
)
100+
} catch let error as DynamoMessageRepo.Errors where error == .unavailable {
101+
context.logger.debug("The transferred ticket's Discord message is marked as unavailable")
102+
return
103+
} catch let error as DynamoMessageRepo.Errors where error == .notFound {
104+
context.logger.debug("Couldn't find a Discord message for the transferred ticket, will create a new one")
105+
try await self.makeReporter(
106+
embedIssue: newIssue,
107+
embedRepo: changes.new_repository
108+
).reportCreation()
109+
}
92110
}
93111

94112
func makeReporter(

0 commit comments

Comments
 (0)