Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 8 additions & 7 deletions server/code.ts
Original file line number Diff line number Diff line change
Expand Up @@ -238,9 +238,10 @@ async function respondGitHubDataChange(request: express.Request) {
const issueNumber = request?.body?.issue?.number;
const pullNumber = request?.body?.pull_request?.number;
const repo = request?.body?.repository?.name;
const action = request?.body?.action;

if((event == 'issues' || event == 'issue_comment') && !request?.body?.issue?.pull_request) {
consoleLog('main', 'github', `POST webhook ${event} : keymanapp/${repo}#${issueNumber}`);
consoleLog('main', 'github', `POST webhook ${event}.${action} : keymanapp/${repo}#${issueNumber}`);
try {
if(await statusData.refreshGitHubIssueData(repo, issueNumber)) {
sendWsAlert(true, 'github-issues');
Expand All @@ -263,18 +264,18 @@ async function respondGitHubDataChange(request: express.Request) {
*/
} else {
try {
const prNumbers: {repo: string, pullNumber: number}[] = [];
const prNumbers: {hasBeenClosed: boolean, repo: string, pullNumber: number}[] = [];
if(issueNumber && repo && request?.body?.issue?.pull_request) {
prNumbers.push({repo, pullNumber: issueNumber});
prNumbers.push({hasBeenClosed: false, repo, pullNumber: issueNumber});
} else if(pullNumber && repo) {
prNumbers.push({repo, pullNumber});
prNumbers.push({hasBeenClosed: request.body.action == 'closed', repo, pullNumber});
} else if(event == 'check_suite') {
prNumbers.push(...request.body?.check_suite?.pull_requests?.map(pr => ({ repo: pr.base.repo.name, pullNumber: pr.number })) ?? []);
prNumbers.push(...request.body?.check_suite?.pull_requests?.map(pr => ({ hasBeenClosed: false, repo: pr.base.repo.name, pullNumber: pr.number })) ?? []);
} else if(event == 'check_run') {
prNumbers.push(...request.body?.check_run?.check_suite?.pull_requests?.map(pr => ({ repo: pr.base.repo.name, pullNumber: pr.number })) ?? []);
prNumbers.push(...request.body?.check_run?.check_suite?.pull_requests?.map(pr => ({ hasBeenClosed: false, repo: pr.base.repo.name, pullNumber: pr.number })) ?? []);
}

consoleLog('main', 'github', `POST webhook ${event} : ${prNumbers.map(p => `keymanapp/${p.repo}#${p.pullNumber}`).join(',')}`);
consoleLog('main', 'github', `POST webhook ${event}.${action} : ${prNumbers.map(p => `keymanapp/${p.repo}#${p.pullNumber}`).join(',')}`);

if(await statusData.refreshGitHubPullRequestsData(prNumbers)) {
sendWsAlert(true, 'github'); // TODO: later just refresh prs
Expand Down
32 changes: 17 additions & 15 deletions server/data/status-data.ts
Original file line number Diff line number Diff line change
Expand Up @@ -158,22 +158,24 @@ export class StatusData {
return result;
};

refreshGitHubPullRequestsData = async (pulls: {repo: string, pullNumber: number}[]) => {
refreshGitHubPullRequestsData = async (pulls: {hasBeenClosed: boolean, repo: string, pullNumber: number}[]) => {
let result = false;
for(const pull of pulls) {
result = await this.refreshGitHubPullRequestData(pull.repo, pull.pullNumber) || result;
result = await this.refreshGitHubPullRequestData(pull.hasBeenClosed, pull.repo, pull.pullNumber) || result;
}
return result;
}

refreshGitHubPullRequestData = async (repo: string, number: number) => {
refreshGitHubPullRequestData = async (hasBeenClosed: boolean, repo: string, number: number) => {
let pull;
// this.setServiceStatus(StatusSource.KeymanPullRequest, ServiceStatusState.loading);
try {
pull = await logAsync(`refreshGitHubPullRequestData(${repo}, ${number})`, () => githubPullRequestService.get(repo, number));
} catch(e) {
console.error(e);
return false;
if(!hasBeenClosed) {
try {
pull = await logAsync(`refreshGitHubPullRequestData(${repo}, ${number})`, () => githubPullRequestService.get(repo, number));
} catch(e) {
console.error(e);
return false;
}
}

const repository = this.cache.sprints['current']?.github?.data.organization.repositories.nodes.find(e=>e.name == repo);
Expand All @@ -186,14 +188,14 @@ export class StatusData {

// this.setServiceStatus(StatusSource.KeymanPullRequest, ServiceStatusState.successful);

if(pull.state == 'CLOSED' && idx >= 0) {
// pull has been closed, remove from cache
console.log(`refreshGitHubPullRequestData: Removing ${repo}#${number} from cache and announcing refresh`);
repository.pullRequests.edges.splice(idx, 1);
return true;
}
if(hasBeenClosed || pull.state == 'CLOSED') {
if(idx >= 0) {
// pull has been closed, remove from cache
console.log(`refreshGitHubPullRequestData: Removing ${repo}#${number} from cache and announcing refresh`);
repository.pullRequests.edges.splice(idx, 1);
return true;
}

if(pull.state == 'CLOSED') {
// pull is closed but not in cache, no need to refresh
console.log(`refreshGitHubPullRequestData: ${repo}#${number} was not found in cache`);
return false;
Expand Down
Loading