Skip to content

Commit

Permalink
feat: status checks review
Browse files Browse the repository at this point in the history
  • Loading branch information
christophehurpeau committed Oct 19, 2018
1 parent 2ffc5e0 commit 4658ee1
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 9 deletions.
56 changes: 49 additions & 7 deletions lib/context/repoContext.js
Expand Up @@ -9,6 +9,24 @@ const initRepoContext = async (context, config) => {
const repoContext = Object.create(teamContext);

const labels = await initRepoLabels(context, config);
const needsReviewLabelIds = Object.keys(config.labels.review)
.map((key) => config.labels.review[key].needsReview)
.filter(Boolean)
.map((name) => labels[name].id);

const addStatusCheck = (context, statusInfo) => {
const pr = context.payload.pull_request;

return context.github.checks.create(
context.repo({
name: 'reviewflow',
head_sha: pr.head.sha,
...statusInfo,
})
);
};

// const updateStatusCheck = (context, reviewGroup, statusInfo) => {};

return Object.assign(repoContext, {
updateReviewStatus: async (
Expand All @@ -18,47 +36,71 @@ const initRepoContext = async (context, config) => {
) => {
const prLabels = context.payload.pull_request.labels || [];
const newLabels = new Set(prLabels.map((label) => label.name));
let modified = false;
const toAdd = new Set();
const toDelete = new Set();

const getLabelFromKey = (key) =>
key && labels[config.labels.review[reviewGroup][key]];

if (labelsToAdd) {
labelsToAdd.map(getLabelFromKey).forEach((label) => {
labelsToAdd.forEach((key) => {
const label = getLabelFromKey(key);
if (!label || prLabels.some((prLabel) => prLabel.id === label.id)) {
return;
}
newLabels.add(label.name);
modified = true;
toAdd.add(key);
});
}

if (labelsToRemove) {
labelsToRemove.map(getLabelFromKey).forEach((label) => {
labelsToRemove.forEach((key) => {
const label = getLabelFromKey(key);
if (!label) return;
const existing = prLabels.find((prLabel) => prLabel.id === label.id);
if (existing) {
newLabels.delete(existing.name);
modified = true;
toDelete.add(key);
}
});
}

context.log.info('updateReviewStatus', {
modified,
reviewGroup,
toAdd: [...toAdd],
toDelete: [...toDelete],
oldLabels: prLabels.map((l) => l.name),
newLabels: [...newLabels],
});

if (process.env.DRY_RUN) return;

if (modified) {
if (toAdd.size || toDelete.size) {
await context.github.issues.replaceAllLabels(
context.issue({
labels: [...newLabels],
})
);
}

if (toAdd.has('needsReview')) {
addStatusCheck(context, {
status: 'in_progress',
});
} else if (toDelete.has('needsReview')) {
if (newLabels.some((label) => needsReviewLabelIds.includes(label.id))) {
return;
}

addStatusCheck(context, {
status: 'completed',
conclusion: 'success',
output: {
title: 'All reviews done !',
summary: 'Pull request was successfully reviewed ',
},
});
}
},
});
};
Expand Down
15 changes: 13 additions & 2 deletions lib/teamconfig.js
Expand Up @@ -30,6 +30,10 @@ module.exports = {
// 'ci/passed': { name: ':green_heart: ci/passed', color: '#86f9b4' },

/* code */
'code/needs-review': {
name: ':ok_hand: code/needs-review',
color: '#fef2c0',
},
'code/review-requested': {
name: ':ok_hand: code/review-requested',
color: '#fef2c0',
Expand All @@ -38,7 +42,10 @@ module.exports = {
name: ':ok_hand: code/changes-requested',
color: '#e11d21',
},
'code/approved': { name: ':ok_hand: code/approved', color: '#86f9b4' },
'code/approved': {
name: ':ok_hand: code/approved',
color: '#86f9b4',
},

/* design */
'design/needs-review': {
Expand All @@ -53,7 +60,10 @@ module.exports = {
name: ':art: design/changes-requested',
color: '#e11d21',
},
'design/approved': { name: ':art: design/approved', color: '#86f9b4' },
'design/approved': {
name: ':art: design/approved',
color: '#86f9b4',
},
},

review: {
Expand All @@ -63,6 +73,7 @@ module.exports = {
failed: 'ci/fail',
},
dev: {
needsReview: 'code/needs-review',
requested: 'code/review-requested',
changesRequested: 'code/changes-requested',
approved: 'code/approved',
Expand Down

0 comments on commit 4658ee1

Please sign in to comment.