Skip to content

Commit

Permalink
handle github exception
Browse files Browse the repository at this point in the history
  • Loading branch information
jaeyeonling committed Jul 11, 2024
1 parent f43cfe4 commit b7f284d
Showing 1 changed file with 24 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import cholog.github.PullRequest;
import cholog.github.PullRequestMergeRequest;
import cholog.github.PullRequestUrl;
import feign.FeignException;
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand All @@ -12,12 +13,15 @@
import java.util.Arrays;
import java.util.HashMap;
import java.util.Objects;
import java.util.stream.Collectors;

@Component
public final class GithubPullRequestMergeSubscription implements MessageSubscription {

private static final Logger log = LoggerFactory.getLogger(GithubPullRequestMergeSubscription.class);

public static final String DONE_EMOJI_ID = "1189497983142727770";

private final MessagesProperties properties;

private final GithubApi githubApi;
Expand Down Expand Up @@ -83,23 +87,33 @@ public void onEvent(final MessageReceivedEvent event) {
pullRequest.head().sha(),
PullRequestMergeRequest.MergeMethod.SQUASH
);
final var mergeResult = githubApi.mergePullRequest(
pullRequestUrl.owner(),
pullRequestUrl.repository(),
pullRequestUrl.pullNumber(),
mergeRequest
);
if (!mergeResult.merged()) {
fails.put(url, mergeResult.message());
try {
final var mergeResult = githubApi.mergePullRequest(
pullRequestUrl.owner(),
pullRequestUrl.repository(),
pullRequestUrl.pullNumber(),
mergeRequest
);
if (!mergeResult.merged()) {
fails.put(url, mergeResult.message());
}
} catch (final FeignException e) {
switch (e.status()) {
case 403, 404, 409, 422 -> {
log.error("Failed to merge PR [url={}]", url, e);
fails.put(url, "PR 머지에 실패했습니다. 관리자에게 문의해주세요.");
}
case 405 -> fails.put(url, "이 PR은 머지할 수 없습니다. 머지가 가능한 상태인지 확인해주세요.");
}
}
}

final var doneEmoji = Objects.requireNonNull(message.getJDA().getEmojiById("1189497983142727770"));
final var doneEmoji = Objects.requireNonNull(message.getJDA().getEmojiById(DONE_EMOJI_ID));
message.addReaction(doneEmoji).queue();
if (!fails.isEmpty()) {
final var failMessages = fails.entrySet().stream()
.map(entry -> entry.getKey() + ": " + entry.getValue())
.collect(StringBuilder::new, StringBuilder::append, StringBuilder::append);
.collect(Collectors.joining());
message.reply(failMessages).queue();
}
}
Expand Down

0 comments on commit b7f284d

Please sign in to comment.