diff --git a/README.md b/README.md index 19b7e19..c5db3dd 100644 --- a/README.md +++ b/README.md @@ -55,7 +55,7 @@ Shows the total volume of code merged, reviews conducted, and comments in PRs. H ### Discussion Intensity (Author's Perspective) -Measures how discussion-heavy PRs are from the author's perspective, based on open discussions, review statuses, and the number of comments. Additionally, you can track discussion topics and user agreement by adding discussion topics in `[[]]` and using thumbs up/down ( :+1: / :-1: ) reactions on the opening comment. Use the `pr-quality` value in the `SHOW_STATS_TYPES` parameter. +Measures how discussion-heavy PRs are from the author's perspective, based on open discussions, review statuses, and the number of comments. Additionally, you can analyze discussion-starting messages using the `DISCUSSION_TYPE_PATTERN` parameter and track user agreement using thumbs up/down ( :+1: / :-1: ) reactions on the opening comment. Use the `pr-quality` value in the `SHOW_STATS_TYPES` parameter. | user | Total merged PRs | Changes requested received | Agreed / Disagreed / Total discussions received | Comments received | | :-------: | :--------------: | :------------------------: | :---------------------------------------------: | :---------------: | @@ -284,6 +284,7 @@ Below is a table outlining the various configuration parameters available for ** | `EXCLUDE_USERS` | Data for the specified users or teams will be excluded from the report. Multiple values should be separated by commas. Example: `dev1, dev2, team1` | - | | `FILTER_HEAD_BRANCHES` | Only PRs from head branches (source branches) matching the specified regular expression pattern will be included in the report. Example: `^feature` | - | | `FILTER_BASE_BRANCHES` | Only PRs to base branches (target branches) matching the specified regular expression pattern will be included in the report. Example: `^develop$` | - | +| `DISCUSSION_TYPE_PATTERN` | Regex pattern to extract discussion types from review comments. If specified, matched values will be displayed in a separate table. The first capture group is used if present; otherwise, the full match is used. Example: `\\[\\[(.*?)\\]\\]` | - | | `EXECUTION_OUTCOME` | This parameter allows you to specify the format in which you wish to receive the report. Options include creating a new issue, updating an existing one, obtaining markdown, or JSON. Markdown and JSON will be available in outputs. Can take mulitple values separated by commas: `new-issue`, `markdown`, `collection`, `existing-issue`. This parameter is **required** Example: `existing-issue` | `new-issue` | | `ISSUE_NUMBER` | Issue number to update. Add `existing-issue` to `EXECUTION_OUTCOME` for updating existing issue. The specified issue must already exist at the time the action is executed. This parameter is mandatory if the `EXECUTION_OUTCOME` input includes `existing-issue` value | - | | `ALLOW_ANALYTICS` | Allows sending non-sensitive inputs to mixpanel for better understanding user's needs. Set the value to `false` to disable sending action parameter data | `true` | diff --git a/action.yml b/action.yml index 89116b7..ed08a8f 100644 --- a/action.yml +++ b/action.yml @@ -138,6 +138,9 @@ inputs: description: "Shows activity time graphs" required: false default: false + DISCUSSION_TYPE_PATTERN: + description: "Regex pattern to extract discussion types from review comments" + required: false outputs: JSON_COLLECTION: diff --git a/build/index.js b/build/index.js index 38de7a0..45d30b5 100644 --- a/build/index.js +++ b/build/index.js @@ -80,6 +80,7 @@ const sendActionError = (error) => { SHOW_ACTIVITY_TIME_GRAPHS: (0, utils_1.getValueAsIs)("SHOW_ACTIVITY_TIME_GRAPHS"), FILTER_HEAD_BRANCHES: !!(0, utils_1.getValueAsIs)("FILTER_HEAD_BRANCHES"), FILTER_BASE_BRANCHES: !!(0, utils_1.getValueAsIs)("FILTER_BASE_BRANCHES"), + DISCUSSION_TYPE_PATTERN: !!(0, utils_1.getValueAsIs)("DISCUSSION_TYPE_PATTERN"), }); } else { @@ -142,6 +143,7 @@ const sendActionRun = () => { SHOW_ACTIVITY_TIME_GRAPHS: (0, utils_1.getValueAsIs)("SHOW_ACTIVITY_TIME_GRAPHS"), FILTER_HEAD_BRANCHES: !!(0, utils_1.getValueAsIs)("FILTER_HEAD_BRANCHES"), FILTER_BASE_BRANCHES: !!(0, utils_1.getValueAsIs)("FILTER_BASE_BRANCHES"), + DISCUSSION_TYPE_PATTERN: !!(0, utils_1.getValueAsIs)("DISCUSSION_TYPE_PATTERN"), }); } else { @@ -1058,12 +1060,11 @@ exports.checkRevert = checkRevert; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.getDiscussionType = void 0; -const getDiscussionType = (text) => { - const regex = /\[\[(.*?)\]\]/g; - return (text - .match(regex) - ?.map((el) => el.replace(/[\[\]]/g, "")) - .filter((el) => el) || []); +const getDiscussionType = (text, pattern) => { + if (!pattern) + return []; + const regex = new RegExp(pattern, "g"); + return text.match(regex)?.filter((el) => el) || []; }; exports.getDiscussionType = getDiscussionType; @@ -1206,6 +1207,7 @@ const get_1 = __importDefault(__nccwpck_require__(56908)); const constants_1 = __nccwpck_require__(95354); const getDiscussionType_1 = __nccwpck_require__(49575); const calculations_1 = __nccwpck_require__(16576); +const utils_1 = __nccwpck_require__(41002); const prepareDiscussions = (comments, collection, index, dateKey, pullRequestLogin, teams) => { const reviewComments = comments[index]?.filter((comment) => pullRequestLogin !== (comment.user?.login || constants_1.invalidUserLogin) && (0, calculations_1.checkUserInclusive)(comment.user?.login || constants_1.invalidUserLogin, teams)); @@ -1218,7 +1220,7 @@ const prepareDiscussions = (comments, collection, index, dateKey, pullRequestLog ["total", dateKey].forEach((key) => { discussions?.forEach((discussion) => { const userLogin = discussion.user?.login || constants_1.invalidUserLogin; - (0, getDiscussionType_1.getDiscussionType)(discussion.body).forEach((type) => { + (0, getDiscussionType_1.getDiscussionType)(discussion.body, (0, utils_1.getValueAsIs)("DISCUSSION_TYPE_PATTERN")).forEach((type) => { [userLogin, ...(teams[userLogin] || []), "total"].forEach((userKey) => { if ((0, calculations_1.checkUserInclusive)(userLogin, teams)) { (0, set_1.default)(collection, [userKey, key, "discussionsTypes", type], { @@ -2957,6 +2959,7 @@ ${[ "EXCLUDE_USERS", "EXECUTION_OUTCOME", "ISSUE_NUMBER", + "DISCUSSION_TYPE_PATTERN", ] .filter((name) => (0, utils_1.getValueAsIs)(name)) .map((name) => `${name}: ${(0, utils_1.getValueAsIs)(name)}`) @@ -3104,7 +3107,7 @@ const createDiscussionsPieChart = (data, users, date) => { return (0, common_1.createTable)({ title: `Discussion's types ${date}`, description: "", - table: { headers: ["users", ...headers], rows: userRows }, + table: { headers: ["users", ...headers.map((header) => `\`${header}\``)], rows: userRows }, }); }; exports.createDiscussionsPieChart = createDiscussionsPieChart; diff --git a/configs/yearReportWithoutDevelopers.yml b/configs/yearReportWithoutDevelopers.yml index 9bb62bf..3203c8a 100644 --- a/configs/yearReportWithoutDevelopers.yml +++ b/configs/yearReportWithoutDevelopers.yml @@ -5,11 +5,11 @@ on: report_date_start: description: "Report date start(d/MM/yyyy)" required: false - default: "01/01/2024" + default: "01/01/2025" report_date_end: description: "Report date end(d/MM/yyyy)" required: false - default: "31/12/2024" + default: "31/12/2025" issue_title: description: "Issue title" required: false diff --git a/examples/collectionExample.json b/examples/collectionExample.json deleted file mode 100644 index 3a4c571..0000000 --- a/examples/collectionExample.json +++ /dev/null @@ -1,3597 +0,0 @@ -{ - "total": { - "total": { - "actionsTime": [ - null, - null, - null, - null, - null, - null, - null, - null, - { - "approved": 2 - }, - null, - { - "merged": 4, - "approved": 1, - "changes_requested": 2, - "opened": 2 - }, - { - "approved": 3, - "merged": 2, - "changes_requested": 3 - }, - { - "opened": 2, - "approved": 1 - }, - { - "approved": 2 - }, - { - "opened": 5, - "approved": 2, - "merged": 2 - }, - { - "approved": 3, - "merged": 3, - "changes_requested": 1, - "opened": 2 - }, - { - "merged": 1, - "changes_requested": 1, - "opened": 2 - }, - { - "opened": 1, - "approved": 1 - }, - null, - { - "merged": 1 - } - ], - "reviewRequestsConducted": 55, - "opened": 14, - "closed": 14, - "merged": 13, - "comments": 9, - "totalReviewComments": 18, - "reverted": 1, - "additions": 2230, - "deletions": 4615, - "prSizes": [ - "s", - "m", - "xl", - "s", - "l", - "l", - "s", - "xs", - "m", - "xs", - "s", - "xs", - "m", - "m" - ], - "timeToReview": [ - 1139, - 1216, - 374, - 409, - 647, - 209, - 71, - 7, - 31, - 10, - 211, - 11, - 51 - ], - "timeToApprove": [ - 1139, - 1216, - 3159, - 409, - 647, - 209, - 71, - 7, - 923, - 10, - 381, - 11, - 151 - ], - "timeToMerge": [ - 1448, - 1829, - 5721, - 980, - 1641, - 453, - 1574, - 268, - 2116, - 10, - 936, - 239, - 213 - ], - "timeToReviewRequest": [ - 464, - 20, - 12, - 5, - 34, - 225, - 6, - 6, - 23, - 6, - 6, - 6, - 9, - 38 - ], - "timeInDraft": [ - 464, - 20, - 12, - 5, - 34, - 225, - 6, - 6, - 23, - 6, - 6, - 6, - 9, - 38 - ], - "unreviewed": 1, - "unapproved": 1, - "sizes": { - "s": { - "timeToReview": [ - 1139, - 409, - 71, - 10 - ], - "timeToApprove": [ - 1139, - 409, - 71, - 10 - ], - "timeToMerge": [ - 1448, - 980, - 1574, - 10 - ], - "percentile": { - "timeToReview": 409, - "timeToApprove": 409, - "timeToMerge": 1448 - }, - "median": { - "timeToReview": 240, - "timeToApprove": 240, - "timeToMerge": 1214 - }, - "average": { - "timeToReview": 408, - "timeToApprove": 408, - "timeToMerge": 1003 - } - }, - "m": { - "timeToReview": [ - 1216, - 31, - 11, - 51 - ], - "timeToApprove": [ - 1216, - 923, - 11, - 151 - ], - "timeToMerge": [ - 1829, - 2116, - 239, - 213 - ], - "percentile": { - "timeToReview": 51, - "timeToApprove": 923, - "timeToMerge": 1829 - }, - "median": { - "timeToReview": 41, - "timeToApprove": 537, - "timeToMerge": 1034 - }, - "average": { - "timeToReview": 328, - "timeToApprove": 576, - "timeToMerge": 1100 - } - }, - "xl": { - "timeToReview": [ - 374 - ], - "timeToApprove": [ - 3159 - ], - "timeToMerge": [ - 5721 - ], - "percentile": { - "timeToReview": null, - "timeToApprove": null, - "timeToMerge": null - }, - "median": { - "timeToReview": 374, - "timeToApprove": 3159, - "timeToMerge": 5721 - }, - "average": { - "timeToReview": 374, - "timeToApprove": 3159, - "timeToMerge": 5721 - } - }, - "l": { - "timeToReview": [ - 647, - 209 - ], - "timeToApprove": [ - 647, - 209 - ], - "timeToMerge": [ - 1641, - 453 - ], - "percentile": { - "timeToReview": 428, - "timeToApprove": 428, - "timeToMerge": 1047 - }, - "median": { - "timeToReview": 428, - "timeToApprove": 428, - "timeToMerge": 1047 - }, - "average": { - "timeToReview": 428, - "timeToApprove": 428, - "timeToMerge": 1047 - } - }, - "xs": { - "timeToReview": [ - 7, - 211 - ], - "timeToApprove": [ - 7, - 381 - ], - "timeToMerge": [ - 268, - 936 - ], - "percentile": { - "timeToReview": 109, - "timeToApprove": 194, - "timeToMerge": 602 - }, - "median": { - "timeToReview": 109, - "timeToApprove": 194, - "timeToMerge": 602 - }, - "average": { - "timeToReview": 109, - "timeToApprove": 194, - "timeToMerge": 602 - } - } - }, - "pullRequestsInfo": [ - { - "number": 1, - "link": "https://github.com/owner/repo-example/pull/1", - "title": "Example pull request", - "comments": 0, - "sizePoints": 117, - "additions": 112, - "deletions": 25, - "timeToReview": 1139, - "timeToApprove": 0, - "timeToMerge": 309 - }, - { - "number": 1, - "link": "https://github.com/owner/repo-example/pull/1", - "title": "Example pull request", - "comments": 2, - "sizePoints": 251, - "additions": 237, - "deletions": 70, - "timeToReview": 1216, - "timeToApprove": 0, - "timeToMerge": 613 - }, - { - "number": 1, - "link": "https://github.com/owner/repo-example/pull/1", - "title": "Example pull request", - "comments": 4, - "sizePoints": 714.4, - "additions": 703, - "deletions": 57, - "timeToReview": 374, - "timeToApprove": 2785, - "timeToMerge": 2562 - }, - { - "number": 1, - "link": "https://github.com/owner/repo-example/pull/1", - "title": "Example pull request", - "comments": 0, - "sizePoints": 72.8, - "additions": 56, - "deletions": 84, - "timeToReview": 409, - "timeToApprove": 0, - "timeToMerge": 571 - }, - { - "number": 1, - "link": "https://github.com/owner/repo-example/pull/1", - "title": "Example pull request", - "comments": 0, - "sizePoints": 602.8, - "additions": 126, - "deletions": 2384, - "timeToReview": 647, - "timeToApprove": 0, - "timeToMerge": 994 - }, - { - "number": 1, - "link": "https://github.com/owner/repo-example/pull/1", - "title": "Example pull request", - "comments": 0, - "sizePoints": 411, - "additions": 343, - "deletions": 340, - "timeToReview": 209, - "timeToApprove": 0, - "timeToMerge": 244 - }, - { - "number": 1, - "link": "https://github.com/owner/repo-example/pull/1", - "title": "Example pull request", - "comments": 0, - "sizePoints": 67.8, - "additions": 67, - "deletions": 4, - "timeToReview": 71, - "timeToApprove": 0, - "timeToMerge": 1503 - }, - { - "number": 1, - "link": "https://github.com/owner/repo-example/pull/1", - "title": "Example pull request", - "comments": 0, - "sizePoints": 1.2, - "additions": 1, - "deletions": 1, - "timeToReview": 7, - "timeToApprove": 0, - "timeToMerge": 261 - }, - { - "number": 1, - "link": "https://github.com/owner/repo-example/pull/1", - "title": "Example pull request", - "comments": 6, - "sizePoints": 229, - "additions": 173, - "deletions": 280, - "timeToReview": 31, - "timeToApprove": 892, - "timeToMerge": 1193 - }, - { - "number": 1, - "link": "https://github.com/owner/repo-example/pull/1", - "title": "Example pull request", - "comments": 0, - "sizePoints": 6.6, - "additions": 4, - "deletions": 13, - "timeToReview": 0, - "timeToApprove": 0, - "timeToMerge": 0 - }, - { - "number": 1, - "link": "https://github.com/owner/repo-example/pull/1", - "title": "Example pull request", - "comments": 0, - "sizePoints": 98.4, - "additions": 87, - "deletions": 57, - "timeToReview": 10, - "timeToApprove": 0, - "timeToMerge": 0 - }, - { - "number": 1, - "link": "https://github.com/owner/repo-example/pull/1", - "title": "Example pull request", - "comments": 4, - "sizePoints": 13.8, - "additions": 13, - "deletions": 4, - "timeToReview": 211, - "timeToApprove": 170, - "timeToMerge": 555 - }, - { - "number": 1, - "link": "https://github.com/owner/repo-example/pull/1", - "title": "Example pull request", - "comments": 0, - "sizePoints": 217.4, - "additions": 20, - "deletions": 987, - "timeToReview": 11, - "timeToApprove": 0, - "timeToMerge": 228 - }, - { - "number": 1, - "link": "https://github.com/owner/repo-example/pull/1", - "title": "Example pull request", - "comments": 2, - "sizePoints": 349.8, - "additions": 288, - "deletions": 309, - "timeToReview": 51, - "timeToApprove": 100, - "timeToMerge": 62 - } - ], - "reviewsConducted": { - "dev4": { - "approved": 4, - "total": 4, - "changes_requested": 1 - }, - "total": { - "approved": 13, - "total": 13, - "changes_requested": 4 - }, - "dev2": { - "approved": 4, - "total": 4, - "changes_requested": 1 - }, - "dev5": { - "approved": 1, - "total": 1 - }, - "dev1": { - "approved": 1, - "total": 1 - }, - "dev3": { - "changes_requested": 2, - "total": 3, - "approved": 3 - } - }, - "reviewsConductedSize": [ - "s", - "m", - "xl", - "s", - "l", - "l", - "s", - "xs", - "m", - "xs", - "s", - "xs", - "m", - "m" - ], - "timeWaitingForRepeatedReview": [ - 49 - ], - "timeFromInitialRequestToResponse": [ - 675, - 1196, - 2934, - 362, - 404, - 613, - 65, - 1, - 8, - 4, - 300, - 205, - 2, - 13 - ], - "timeFromOpenToResponse": [ - 1139, - 1216, - 2946, - 374, - 409, - 647, - 209, - 71, - 7, - 31, - 10, - 306, - 211, - 11, - 51 - ], - "timeFromRepeatedRequestToResponse": [ - 49 - ], - "reviewComments": 9, - "discussions": { - "received": { - "total": 8, - "agreed": 0, - "disagreed": 0 - }, - "conducted": { - "total": 8, - "agreed": 0, - "disagreed": 0 - } - }, - "commentsConducted": 9, - "reviewTimeIntervals": { - "0-2": 6, - "2-4": 2, - "4-8": 2, - "8-12": 1, - "12-16": 0, - "16-24": 2, - "24-Infinity": 0 - }, - "approvalTimeIntervals": {}, - "mergeTimeIntervals": {}, - "median": { - "timeToReview": 209, - "timeToApprove": 381, - "timeToMerge": 980, - "timeToReviewRequest": 10, - "timeInDraft": 10, - "timeFromInitialRequestToResponse": 252, - "timeFromOpenToResponse": 211, - "timeFromRepeatedRequestToResponse": 49, - "timeWaitingForRepeatedReview": 49 - }, - "percentile": { - "timeToReview": 400, - "timeToApprove": 854, - "timeToMerge": 1624, - "timeToReviewRequest": 28, - "timeInDraft": 28, - "timeFromInitialRequestToResponse": 508, - "timeFromOpenToResponse": 468, - "timeFromRepeatedRequestToResponse": null, - "timeWaitingForRepeatedReview": null - }, - "average": { - "timeToReview": 338, - "timeToApprove": 641, - "timeToMerge": 1341, - "timeToReviewRequest": 62, - "timeInDraft": 62, - "timeFromInitialRequestToResponse": 485, - "timeFromOpenToResponse": 510, - "timeFromRepeatedRequestToResponse": 49, - "timeWaitingForRepeatedReview": 49 - } - }, - "10/2024": { - "reviewRequestsConducted": 55, - "opened": 14, - "closed": 14, - "merged": 13, - "comments": 9, - "totalReviewComments": 18, - "reverted": 1, - "additions": 2230, - "deletions": 4615, - "prSizes": [ - "s", - "m", - "xl", - "s", - "l", - "l", - "s", - "xs", - "m", - "xs", - "s", - "xs", - "m", - "m" - ], - "timeToReview": [ - 1139, - 1216, - 374, - 409, - 647, - 209, - 71, - 7, - 31, - 10, - 211, - 11, - 51 - ], - "timeToApprove": [ - 1139, - 1216, - 3159, - 409, - 647, - 209, - 71, - 7, - 923, - 10, - 381, - 11, - 151 - ], - "timeToMerge": [ - 1448, - 1829, - 5721, - 980, - 1641, - 453, - 1574, - 268, - 2116, - 10, - 936, - 239, - 213 - ], - "timeToReviewRequest": [ - 464, - 20, - 12, - 5, - 34, - 225, - 6, - 6, - 23, - 6, - 6, - 6, - 9, - 38 - ], - "timeInDraft": [ - 464, - 20, - 12, - 5, - 34, - 225, - 6, - 6, - 23, - 6, - 6, - 6, - 9, - 38 - ], - "unreviewed": 1, - "unapproved": 1, - "sizes": { - "s": { - "timeToReview": [ - 1139, - 409, - 71, - 10 - ], - "timeToApprove": [ - 1139, - 409, - 71, - 10 - ], - "timeToMerge": [ - 1448, - 980, - 1574, - 10 - ], - "percentile": { - "timeToReview": 409, - "timeToApprove": 409, - "timeToMerge": 1448 - }, - "median": { - "timeToReview": 240, - "timeToApprove": 240, - "timeToMerge": 1214 - }, - "average": { - "timeToReview": 408, - "timeToApprove": 408, - "timeToMerge": 1003 - } - }, - "m": { - "timeToReview": [ - 1216, - 31, - 11, - 51 - ], - "timeToApprove": [ - 1216, - 923, - 11, - 151 - ], - "timeToMerge": [ - 1829, - 2116, - 239, - 213 - ], - "percentile": { - "timeToReview": 51, - "timeToApprove": 923, - "timeToMerge": 1829 - }, - "median": { - "timeToReview": 41, - "timeToApprove": 537, - "timeToMerge": 1034 - }, - "average": { - "timeToReview": 328, - "timeToApprove": 576, - "timeToMerge": 1100 - } - }, - "xl": { - "timeToReview": [ - 374 - ], - "timeToApprove": [ - 3159 - ], - "timeToMerge": [ - 5721 - ], - "percentile": { - "timeToReview": null, - "timeToApprove": null, - "timeToMerge": null - }, - "median": { - "timeToReview": 374, - "timeToApprove": 3159, - "timeToMerge": 5721 - }, - "average": { - "timeToReview": 374, - "timeToApprove": 3159, - "timeToMerge": 5721 - } - }, - "l": { - "timeToReview": [ - 647, - 209 - ], - "timeToApprove": [ - 647, - 209 - ], - "timeToMerge": [ - 1641, - 453 - ], - "percentile": { - "timeToReview": 428, - "timeToApprove": 428, - "timeToMerge": 1047 - }, - "median": { - "timeToReview": 428, - "timeToApprove": 428, - "timeToMerge": 1047 - }, - "average": { - "timeToReview": 428, - "timeToApprove": 428, - "timeToMerge": 1047 - } - }, - "xs": { - "timeToReview": [ - 7, - 211 - ], - "timeToApprove": [ - 7, - 381 - ], - "timeToMerge": [ - 268, - 936 - ], - "percentile": { - "timeToReview": 109, - "timeToApprove": 194, - "timeToMerge": 602 - }, - "median": { - "timeToReview": 109, - "timeToApprove": 194, - "timeToMerge": 602 - }, - "average": { - "timeToReview": 109, - "timeToApprove": 194, - "timeToMerge": 602 - } - } - }, - "pullRequestsInfo": [ - { - "number": 1, - "link": "https://github.com/owner/repo-example/pull/1", - "title": "Example pull request", - "comments": 0, - "sizePoints": 117, - "additions": 112, - "deletions": 25, - "timeToReview": 1139, - "timeToApprove": 0, - "timeToMerge": 309 - }, - { - "number": 1, - "link": "https://github.com/owner/repo-example/pull/1", - "title": "Example pull request", - "comments": 2, - "sizePoints": 251, - "additions": 237, - "deletions": 70, - "timeToReview": 1216, - "timeToApprove": 0, - "timeToMerge": 613 - }, - { - "number": 1, - "link": "https://github.com/owner/repo-example/pull/1", - "title": "Example pull request", - "comments": 4, - "sizePoints": 714.4, - "additions": 703, - "deletions": 57, - "timeToReview": 374, - "timeToApprove": 2785, - "timeToMerge": 2562 - }, - { - "number": 1, - "link": "https://github.com/owner/repo-example/pull/1", - "title": "Example pull request", - "comments": 0, - "sizePoints": 72.8, - "additions": 56, - "deletions": 84, - "timeToReview": 409, - "timeToApprove": 0, - "timeToMerge": 571 - }, - { - "number": 1, - "link": "https://github.com/owner/repo-example/pull/1", - "title": "Example pull request", - "comments": 0, - "sizePoints": 602.8, - "additions": 126, - "deletions": 2384, - "timeToReview": 647, - "timeToApprove": 0, - "timeToMerge": 994 - }, - { - "number": 1, - "link": "https://github.com/owner/repo-example/pull/1", - "title": "Example pull request", - "comments": 0, - "sizePoints": 411, - "additions": 343, - "deletions": 340, - "timeToReview": 209, - "timeToApprove": 0, - "timeToMerge": 244 - }, - { - "number": 1, - "link": "https://github.com/owner/repo-example/pull/1", - "title": "Example pull request", - "comments": 0, - "sizePoints": 67.8, - "additions": 67, - "deletions": 4, - "timeToReview": 71, - "timeToApprove": 0, - "timeToMerge": 1503 - }, - { - "number": 1, - "link": "https://github.com/owner/repo-example/pull/1", - "title": "Example pull request", - "comments": 0, - "sizePoints": 1.2, - "additions": 1, - "deletions": 1, - "timeToReview": 7, - "timeToApprove": 0, - "timeToMerge": 261 - }, - { - "number": 1, - "link": "https://github.com/owner/repo-example/pull/1", - "title": "Example pull request", - "comments": 6, - "sizePoints": 229, - "additions": 173, - "deletions": 280, - "timeToReview": 31, - "timeToApprove": 892, - "timeToMerge": 1193 - }, - { - "number": 1, - "link": "https://github.com/owner/repo-example/pull/1", - "title": "Example pull request", - "comments": 0, - "sizePoints": 6.6, - "additions": 4, - "deletions": 13, - "timeToReview": 0, - "timeToApprove": 0, - "timeToMerge": 0 - }, - { - "number": 1, - "link": "https://github.com/owner/repo-example/pull/1", - "title": "Example pull request", - "comments": 0, - "sizePoints": 98.4, - "additions": 87, - "deletions": 57, - "timeToReview": 10, - "timeToApprove": 0, - "timeToMerge": 0 - }, - { - "number": 1, - "link": "https://github.com/owner/repo-example/pull/1", - "title": "Example pull request", - "comments": 4, - "sizePoints": 13.8, - "additions": 13, - "deletions": 4, - "timeToReview": 211, - "timeToApprove": 170, - "timeToMerge": 555 - }, - { - "number": 1, - "link": "https://github.com/owner/repo-example/pull/1", - "title": "Example pull request", - "comments": 0, - "sizePoints": 217.4, - "additions": 20, - "deletions": 987, - "timeToReview": 11, - "timeToApprove": 0, - "timeToMerge": 228 - }, - { - "number": 1, - "link": "https://github.com/owner/repo-example/pull/1", - "title": "Example pull request", - "comments": 2, - "sizePoints": 349.8, - "additions": 288, - "deletions": 309, - "timeToReview": 51, - "timeToApprove": 100, - "timeToMerge": 62 - } - ], - "reviewsConducted": { - "dev4": { - "approved": 4, - "total": 4, - "changes_requested": 1 - }, - "total": { - "approved": 13, - "total": 13, - "changes_requested": 4 - }, - "dev2": { - "approved": 4, - "total": 4, - "changes_requested": 1 - }, - "dev5": { - "approved": 1, - "total": 1 - }, - "dev1": { - "approved": 1, - "total": 1 - }, - "dev3": { - "changes_requested": 2, - "total": 3, - "approved": 3 - } - }, - "reviewsConductedSize": [ - "s", - "m", - "xl", - "s", - "l", - "l", - "s", - "xs", - "m", - "xs", - "s", - "xs", - "m", - "m" - ], - "timeWaitingForRepeatedReview": [ - 49 - ], - "timeFromInitialRequestToResponse": [ - 675, - 1196, - 2934, - 362, - 404, - 613, - 65, - 1, - 8, - 4, - 300, - 205, - 2, - 13 - ], - "timeFromOpenToResponse": [ - 1139, - 1216, - 2946, - 374, - 409, - 647, - 209, - 71, - 7, - 31, - 10, - 306, - 211, - 11, - 51 - ], - "timeFromRepeatedRequestToResponse": [ - 49 - ], - "reviewComments": 9, - "discussions": { - "received": { - "total": 8, - "agreed": 0, - "disagreed": 0 - }, - "conducted": { - "total": 8, - "agreed": 0, - "disagreed": 0 - } - }, - "commentsConducted": 9, - "reviewTimeIntervals": { - "0-2": 6, - "2-4": 2, - "4-8": 2, - "8-12": 1, - "12-16": 0, - "16-24": 2, - "24-Infinity": 0 - }, - "approvalTimeIntervals": {}, - "mergeTimeIntervals": {}, - "median": { - "timeToReview": 209, - "timeToApprove": 381, - "timeToMerge": 980, - "timeToReviewRequest": 10, - "timeInDraft": 10, - "timeFromInitialRequestToResponse": 252, - "timeFromOpenToResponse": 211, - "timeFromRepeatedRequestToResponse": 49, - "timeWaitingForRepeatedReview": 49 - }, - "percentile": { - "timeToReview": 400, - "timeToApprove": 854, - "timeToMerge": 1624, - "timeToReviewRequest": 28, - "timeInDraft": 28, - "timeFromInitialRequestToResponse": 508, - "timeFromOpenToResponse": 468, - "timeFromRepeatedRequestToResponse": null, - "timeWaitingForRepeatedReview": null - }, - "average": { - "timeToReview": 338, - "timeToApprove": 641, - "timeToMerge": 1341, - "timeToReviewRequest": 62, - "timeInDraft": 62, - "timeFromInitialRequestToResponse": 485, - "timeFromOpenToResponse": 510, - "timeFromRepeatedRequestToResponse": 49, - "timeWaitingForRepeatedReview": 49 - } - } - }, - "dev2": { - "total": { - "actionsTime": [ - null, - null, - null, - null, - null, - null, - null, - null, - { - "approved": 1 - }, - null, - { - "merged": 1, - "approved": 1 - }, - { - "approved": 1, - "merged": 1 - }, - null, - null, - { - "opened": 3, - "approved": 1 - }, - { - "merged": 1, - "opened": 1 - }, - { - "opened": 1 - }, - null, - null, - { - "merged": 1 - } - ], - "reviewRequestsConducted": 8, - "reviewsConducted": { - "dev4": { - "approved": 3, - "total": 3 - }, - "total": { - "approved": 4, - "total": 4 - }, - "dev3": { - "approved": 1, - "total": 1 - } - }, - "reviewsConductedSize": [ - "s", - "l", - "s", - "xs" - ], - "timeFromInitialRequestToResponse": [ - 675, - 4, - 205 - ], - "timeFromOpenToResponse": [ - 1139, - 209, - 10, - 211 - ], - "timeFromRepeatedRequestToResponse": [], - "opened": 5, - "closed": 5, - "merged": 4, - "comments": 0, - "totalReviewComments": 6, - "reverted": 1, - "additions": 1001, - "deletions": 225, - "prSizes": [ - "m", - "xl", - "s", - "xs", - "xs" - ], - "timeToReview": [ - 1216, - 374, - 409, - 7 - ], - "timeToApprove": [ - 1216, - 3159, - 409, - 7 - ], - "timeToMerge": [ - 1829, - 5721, - 980, - 268 - ], - "timeToReviewRequest": [ - 20, - 12, - 5, - 6, - 6 - ], - "timeInDraft": [ - 20, - 12, - 5, - 6, - 6 - ], - "unreviewed": 1, - "unapproved": 1, - "sizes": { - "m": { - "timeToReview": [ - 1216 - ], - "timeToApprove": [ - 1216 - ], - "timeToMerge": [ - 1829 - ], - "percentile": { - "timeToReview": null, - "timeToApprove": null, - "timeToMerge": null - }, - "median": { - "timeToReview": 1216, - "timeToApprove": 1216, - "timeToMerge": 1829 - }, - "average": { - "timeToReview": 1216, - "timeToApprove": 1216, - "timeToMerge": 1829 - } - }, - "xl": { - "timeToReview": [ - 374 - ], - "timeToApprove": [ - 3159 - ], - "timeToMerge": [ - 5721 - ], - "percentile": { - "timeToReview": null, - "timeToApprove": null, - "timeToMerge": null - }, - "median": { - "timeToReview": 374, - "timeToApprove": 3159, - "timeToMerge": 5721 - }, - "average": { - "timeToReview": 374, - "timeToApprove": 3159, - "timeToMerge": 5721 - } - }, - "s": { - "timeToReview": [ - 409 - ], - "timeToApprove": [ - 409 - ], - "timeToMerge": [ - 980 - ], - "percentile": { - "timeToReview": null, - "timeToApprove": null, - "timeToMerge": null - }, - "median": { - "timeToReview": 409, - "timeToApprove": 409, - "timeToMerge": 980 - }, - "average": { - "timeToReview": 409, - "timeToApprove": 409, - "timeToMerge": 980 - } - }, - "xs": { - "timeToReview": [ - 7 - ], - "timeToApprove": [ - 7 - ], - "timeToMerge": [ - 268 - ], - "percentile": { - "timeToReview": null, - "timeToApprove": null, - "timeToMerge": null - }, - "median": { - "timeToReview": 7, - "timeToApprove": 7, - "timeToMerge": 268 - }, - "average": { - "timeToReview": 7, - "timeToApprove": 7, - "timeToMerge": 268 - } - } - }, - "pullRequestsInfo": [ - { - "number": 1, - "link": "https://github.com/owner/repo-example/pull/1", - "title": "Example pull request", - "comments": 2, - "sizePoints": 251, - "additions": 237, - "deletions": 70, - "timeToReview": 1216, - "timeToApprove": 0, - "timeToMerge": 613 - }, - { - "number": 1, - "link": "https://github.com/owner/repo-example/pull/1", - "title": "Example pull request", - "comments": 4, - "sizePoints": 714.4, - "additions": 703, - "deletions": 57, - "timeToReview": 374, - "timeToApprove": 2785, - "timeToMerge": 2562 - }, - { - "number": 1, - "link": "https://github.com/owner/repo-example/pull/1", - "title": "Example pull request", - "comments": 0, - "sizePoints": 72.8, - "additions": 56, - "deletions": 84, - "timeToReview": 409, - "timeToApprove": 0, - "timeToMerge": 571 - }, - { - "number": 1, - "link": "https://github.com/owner/repo-example/pull/1", - "title": "Example pull request", - "comments": 0, - "sizePoints": 1.2, - "additions": 1, - "deletions": 1, - "timeToReview": 7, - "timeToApprove": 0, - "timeToMerge": 261 - }, - { - "number": 1, - "link": "https://github.com/owner/repo-example/pull/1", - "title": "Example pull request", - "comments": 0, - "sizePoints": 6.6, - "additions": 4, - "deletions": 13, - "timeToReview": 0, - "timeToApprove": 0, - "timeToMerge": 0 - } - ], - "timeWaitingForRepeatedReview": [], - "reviewComments": 3, - "discussions": { - "received": { - "total": 3, - "agreed": 0, - "disagreed": 0 - } - }, - "reviewTimeIntervals": { - "0-2": 1, - "2-4": 0, - "4-8": 2, - "8-12": 0, - "12-16": 0, - "16-24": 1, - "24-Infinity": 0 - }, - "approvalTimeIntervals": {}, - "mergeTimeIntervals": {}, - "median": { - "timeToReview": 391, - "timeToApprove": 812, - "timeToMerge": 1404, - "timeToReviewRequest": 6, - "timeInDraft": 6, - "timeFromInitialRequestToResponse": 205, - "timeFromOpenToResponse": 210, - "timeFromRepeatedRequestToResponse": 0, - "timeWaitingForRepeatedReview": 0 - }, - "percentile": { - "timeToReview": 409, - "timeToApprove": 1216, - "timeToMerge": 1829, - "timeToReviewRequest": 10, - "timeInDraft": 10, - "timeFromInitialRequestToResponse": 322, - "timeFromOpenToResponse": 211, - "timeFromRepeatedRequestToResponse": 0, - "timeWaitingForRepeatedReview": 0 - }, - "average": { - "timeToReview": 502, - "timeToApprove": 1198, - "timeToMerge": 2200, - "timeToReviewRequest": 10, - "timeInDraft": 10, - "timeFromInitialRequestToResponse": 295, - "timeFromOpenToResponse": 393, - "timeFromRepeatedRequestToResponse": 0, - "timeWaitingForRepeatedReview": 0 - } - }, - "10/2024": { - "reviewRequestsConducted": 8, - "reviewsConducted": { - "dev4": { - "approved": 3, - "total": 3 - }, - "total": { - "approved": 4, - "total": 4 - }, - "dev3": { - "approved": 1, - "total": 1 - } - }, - "reviewsConductedSize": [ - "s", - "l", - "s", - "xs" - ], - "timeFromInitialRequestToResponse": [ - 675, - 4, - 205 - ], - "timeFromOpenToResponse": [ - 1139, - 209, - 10, - 211 - ], - "timeFromRepeatedRequestToResponse": [], - "opened": 5, - "closed": 5, - "merged": 4, - "comments": 0, - "totalReviewComments": 6, - "reverted": 1, - "additions": 1001, - "deletions": 225, - "prSizes": [ - "m", - "xl", - "s", - "xs", - "xs" - ], - "timeToReview": [ - 1216, - 374, - 409, - 7 - ], - "timeToApprove": [ - 1216, - 3159, - 409, - 7 - ], - "timeToMerge": [ - 1829, - 5721, - 980, - 268 - ], - "timeToReviewRequest": [ - 20, - 12, - 5, - 6, - 6 - ], - "timeInDraft": [ - 20, - 12, - 5, - 6, - 6 - ], - "unreviewed": 1, - "unapproved": 1, - "sizes": { - "m": { - "timeToReview": [ - 1216 - ], - "timeToApprove": [ - 1216 - ], - "timeToMerge": [ - 1829 - ], - "percentile": { - "timeToReview": null, - "timeToApprove": null, - "timeToMerge": null - }, - "median": { - "timeToReview": 1216, - "timeToApprove": 1216, - "timeToMerge": 1829 - }, - "average": { - "timeToReview": 1216, - "timeToApprove": 1216, - "timeToMerge": 1829 - } - }, - "xl": { - "timeToReview": [ - 374 - ], - "timeToApprove": [ - 3159 - ], - "timeToMerge": [ - 5721 - ], - "percentile": { - "timeToReview": null, - "timeToApprove": null, - "timeToMerge": null - }, - "median": { - "timeToReview": 374, - "timeToApprove": 3159, - "timeToMerge": 5721 - }, - "average": { - "timeToReview": 374, - "timeToApprove": 3159, - "timeToMerge": 5721 - } - }, - "s": { - "timeToReview": [ - 409 - ], - "timeToApprove": [ - 409 - ], - "timeToMerge": [ - 980 - ], - "percentile": { - "timeToReview": null, - "timeToApprove": null, - "timeToMerge": null - }, - "median": { - "timeToReview": 409, - "timeToApprove": 409, - "timeToMerge": 980 - }, - "average": { - "timeToReview": 409, - "timeToApprove": 409, - "timeToMerge": 980 - } - }, - "xs": { - "timeToReview": [ - 7 - ], - "timeToApprove": [ - 7 - ], - "timeToMerge": [ - 268 - ], - "percentile": { - "timeToReview": null, - "timeToApprove": null, - "timeToMerge": null - }, - "median": { - "timeToReview": 7, - "timeToApprove": 7, - "timeToMerge": 268 - }, - "average": { - "timeToReview": 7, - "timeToApprove": 7, - "timeToMerge": 268 - } - } - }, - "pullRequestsInfo": [ - { - "number": 1, - "link": "https://github.com/owner/repo-example/pull/1", - "title": "Example pull request", - "comments": 2, - "sizePoints": 251, - "additions": 237, - "deletions": 70, - "timeToReview": 1216, - "timeToApprove": 0, - "timeToMerge": 613 - }, - { - "number": 1, - "link": "https://github.com/owner/repo-example/pull/1", - "title": "Example pull request", - "comments": 4, - "sizePoints": 714.4, - "additions": 703, - "deletions": 57, - "timeToReview": 374, - "timeToApprove": 2785, - "timeToMerge": 2562 - }, - { - "number": 1, - "link": "https://github.com/owner/repo-example/pull/1", - "title": "Example pull request", - "comments": 0, - "sizePoints": 72.8, - "additions": 56, - "deletions": 84, - "timeToReview": 409, - "timeToApprove": 0, - "timeToMerge": 571 - }, - { - "number": 1, - "link": "https://github.com/owner/repo-example/pull/1", - "title": "Example pull request", - "comments": 0, - "sizePoints": 1.2, - "additions": 1, - "deletions": 1, - "timeToReview": 7, - "timeToApprove": 0, - "timeToMerge": 261 - }, - { - "number": 1, - "link": "https://github.com/owner/repo-example/pull/1", - "title": "Example pull request", - "comments": 0, - "sizePoints": 6.6, - "additions": 4, - "deletions": 13, - "timeToReview": 0, - "timeToApprove": 0, - "timeToMerge": 0 - } - ], - "timeWaitingForRepeatedReview": [], - "reviewComments": 3, - "discussions": { - "received": { - "total": 3, - "agreed": 0, - "disagreed": 0 - } - }, - "reviewTimeIntervals": { - "0-2": 1, - "2-4": 0, - "4-8": 2, - "8-12": 0, - "12-16": 0, - "16-24": 1, - "24-Infinity": 0 - }, - "approvalTimeIntervals": {}, - "mergeTimeIntervals": {}, - "median": { - "timeToReview": 391, - "timeToApprove": 812, - "timeToMerge": 1404, - "timeToReviewRequest": 6, - "timeInDraft": 6, - "timeFromInitialRequestToResponse": 205, - "timeFromOpenToResponse": 210, - "timeFromRepeatedRequestToResponse": 0, - "timeWaitingForRepeatedReview": 0 - }, - "percentile": { - "timeToReview": 409, - "timeToApprove": 1216, - "timeToMerge": 1829, - "timeToReviewRequest": 10, - "timeInDraft": 10, - "timeFromInitialRequestToResponse": 322, - "timeFromOpenToResponse": 211, - "timeFromRepeatedRequestToResponse": 0, - "timeWaitingForRepeatedReview": 0 - }, - "average": { - "timeToReview": 502, - "timeToApprove": 1198, - "timeToMerge": 2200, - "timeToReviewRequest": 10, - "timeInDraft": 10, - "timeFromInitialRequestToResponse": 295, - "timeFromOpenToResponse": 393, - "timeFromRepeatedRequestToResponse": 0, - "timeWaitingForRepeatedReview": 0 - } - } - }, - "dev4": { - "total": { - "actionsTime": [ - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - { - "opened": 1 - }, - null, - { - "opened": 1, - "approved": 1 - }, - null, - { - "opened": 1, - "merged": 2 - }, - { - "approved": 1, - "merged": 1 - }, - { - "merged": 1 - }, - { - "opened": 1 - } - ], - "opened": 4, - "closed": 4, - "merged": 4, - "comments": 1, - "totalReviewComments": 2, - "reverted": 0, - "additions": 830, - "deletions": 731, - "prSizes": [ - "s", - "l", - "s", - "m" - ], - "timeToReview": [ - 1139, - 209, - 10, - 51 - ], - "timeToApprove": [ - 1139, - 209, - 10, - 151 - ], - "timeToMerge": [ - 1448, - 453, - 10, - 213 - ], - "timeToReviewRequest": [ - 464, - 225, - 6, - 38 - ], - "timeInDraft": [ - 464, - 225, - 6, - 38 - ], - "unreviewed": 0, - "unapproved": 0, - "sizes": { - "s": { - "timeToReview": [ - 1139, - 10 - ], - "timeToApprove": [ - 1139, - 10 - ], - "timeToMerge": [ - 1448, - 10 - ], - "percentile": { - "timeToReview": 574, - "timeToApprove": 574, - "timeToMerge": 729 - }, - "median": { - "timeToReview": 574, - "timeToApprove": 574, - "timeToMerge": 729 - }, - "average": { - "timeToReview": 575, - "timeToApprove": 575, - "timeToMerge": 729 - } - }, - "l": { - "timeToReview": [ - 209 - ], - "timeToApprove": [ - 209 - ], - "timeToMerge": [ - 453 - ], - "percentile": { - "timeToReview": null, - "timeToApprove": null, - "timeToMerge": null - }, - "median": { - "timeToReview": 209, - "timeToApprove": 209, - "timeToMerge": 453 - }, - "average": { - "timeToReview": 209, - "timeToApprove": 209, - "timeToMerge": 453 - } - }, - "m": { - "timeToReview": [ - 51 - ], - "timeToApprove": [ - 151 - ], - "timeToMerge": [ - 213 - ], - "percentile": { - "timeToReview": null, - "timeToApprove": null, - "timeToMerge": null - }, - "median": { - "timeToReview": 51, - "timeToApprove": 151, - "timeToMerge": 213 - }, - "average": { - "timeToReview": 51, - "timeToApprove": 151, - "timeToMerge": 213 - } - } - }, - "pullRequestsInfo": [ - { - "number": 1, - "link": "https://github.com/owner/repo-example/pull/1", - "title": "Example pull request", - "comments": 0, - "sizePoints": 117, - "additions": 112, - "deletions": 25, - "timeToReview": 1139, - "timeToApprove": 0, - "timeToMerge": 309 - }, - { - "number": 1, - "link": "https://github.com/owner/repo-example/pull/1", - "title": "Example pull request", - "comments": 0, - "sizePoints": 411, - "additions": 343, - "deletions": 340, - "timeToReview": 209, - "timeToApprove": 0, - "timeToMerge": 244 - }, - { - "number": 1, - "link": "https://github.com/owner/repo-example/pull/1", - "title": "Example pull request", - "comments": 0, - "sizePoints": 98.4, - "additions": 87, - "deletions": 57, - "timeToReview": 10, - "timeToApprove": 0, - "timeToMerge": 0 - }, - { - "number": 1, - "link": "https://github.com/owner/repo-example/pull/1", - "title": "Example pull request", - "comments": 2, - "sizePoints": 349.8, - "additions": 288, - "deletions": 309, - "timeToReview": 51, - "timeToApprove": 100, - "timeToMerge": 62 - } - ], - "timeWaitingForRepeatedReview": [ - 49 - ], - "reviewComments": 1, - "discussions": { - "received": { - "total": 1, - "agreed": 0, - "disagreed": 0 - }, - "conducted": { - "total": 1, - "agreed": 0, - "disagreed": 0 - } - }, - "reviewRequestsConducted": 10, - "reviewsConducted": { - "dev2": { - "approved": 2, - "total": 2 - }, - "total": { - "approved": 2, - "total": 2 - } - }, - "reviewsConductedSize": [ - "m", - "xl" - ], - "timeFromInitialRequestToResponse": [ - 1196, - 362 - ], - "timeFromOpenToResponse": [ - 1216, - 374 - ], - "timeFromRepeatedRequestToResponse": [], - "commentsConducted": 1, - "reviewTimeIntervals": { - "0-2": 2, - "2-4": 1, - "4-8": 0, - "8-12": 0, - "12-16": 0, - "16-24": 1, - "24-Infinity": 0 - }, - "approvalTimeIntervals": {}, - "mergeTimeIntervals": {}, - "median": { - "timeToReview": 130, - "timeToApprove": 180, - "timeToMerge": 333, - "timeToReviewRequest": 131, - "timeInDraft": 131, - "timeFromInitialRequestToResponse": 779, - "timeFromOpenToResponse": 795, - "timeFromRepeatedRequestToResponse": 0, - "timeWaitingForRepeatedReview": 49 - }, - "percentile": { - "timeToReview": 209, - "timeToApprove": 209, - "timeToMerge": 453, - "timeToReviewRequest": 225, - "timeInDraft": 225, - "timeFromInitialRequestToResponse": 779, - "timeFromOpenToResponse": 795, - "timeFromRepeatedRequestToResponse": 0, - "timeWaitingForRepeatedReview": null - }, - "average": { - "timeToReview": 353, - "timeToApprove": 378, - "timeToMerge": 531, - "timeToReviewRequest": 184, - "timeInDraft": 184, - "timeFromInitialRequestToResponse": 779, - "timeFromOpenToResponse": 795, - "timeFromRepeatedRequestToResponse": 0, - "timeWaitingForRepeatedReview": 49 - } - }, - "10/2024": { - "opened": 4, - "closed": 4, - "merged": 4, - "comments": 1, - "totalReviewComments": 2, - "reverted": 0, - "additions": 830, - "deletions": 731, - "prSizes": [ - "s", - "l", - "s", - "m" - ], - "timeToReview": [ - 1139, - 209, - 10, - 51 - ], - "timeToApprove": [ - 1139, - 209, - 10, - 151 - ], - "timeToMerge": [ - 1448, - 453, - 10, - 213 - ], - "timeToReviewRequest": [ - 464, - 225, - 6, - 38 - ], - "timeInDraft": [ - 464, - 225, - 6, - 38 - ], - "unreviewed": 0, - "unapproved": 0, - "sizes": { - "s": { - "timeToReview": [ - 1139, - 10 - ], - "timeToApprove": [ - 1139, - 10 - ], - "timeToMerge": [ - 1448, - 10 - ], - "percentile": { - "timeToReview": 574, - "timeToApprove": 574, - "timeToMerge": 729 - }, - "median": { - "timeToReview": 574, - "timeToApprove": 574, - "timeToMerge": 729 - }, - "average": { - "timeToReview": 575, - "timeToApprove": 575, - "timeToMerge": 729 - } - }, - "l": { - "timeToReview": [ - 209 - ], - "timeToApprove": [ - 209 - ], - "timeToMerge": [ - 453 - ], - "percentile": { - "timeToReview": null, - "timeToApprove": null, - "timeToMerge": null - }, - "median": { - "timeToReview": 209, - "timeToApprove": 209, - "timeToMerge": 453 - }, - "average": { - "timeToReview": 209, - "timeToApprove": 209, - "timeToMerge": 453 - } - }, - "m": { - "timeToReview": [ - 51 - ], - "timeToApprove": [ - 151 - ], - "timeToMerge": [ - 213 - ], - "percentile": { - "timeToReview": null, - "timeToApprove": null, - "timeToMerge": null - }, - "median": { - "timeToReview": 51, - "timeToApprove": 151, - "timeToMerge": 213 - }, - "average": { - "timeToReview": 51, - "timeToApprove": 151, - "timeToMerge": 213 - } - } - }, - "pullRequestsInfo": [ - { - "number": 1, - "link": "https://github.com/owner/repo-example/pull/1", - "title": "Example pull request", - "comments": 0, - "sizePoints": 117, - "additions": 112, - "deletions": 25, - "timeToReview": 1139, - "timeToApprove": 0, - "timeToMerge": 309 - }, - { - "number": 1, - "link": "https://github.com/owner/repo-example/pull/1", - "title": "Example pull request", - "comments": 0, - "sizePoints": 411, - "additions": 343, - "deletions": 340, - "timeToReview": 209, - "timeToApprove": 0, - "timeToMerge": 244 - }, - { - "number": 1, - "link": "https://github.com/owner/repo-example/pull/1", - "title": "Example pull request", - "comments": 0, - "sizePoints": 98.4, - "additions": 87, - "deletions": 57, - "timeToReview": 10, - "timeToApprove": 0, - "timeToMerge": 0 - }, - { - "number": 1, - "link": "https://github.com/owner/repo-example/pull/1", - "title": "Example pull request", - "comments": 2, - "sizePoints": 349.8, - "additions": 288, - "deletions": 309, - "timeToReview": 51, - "timeToApprove": 100, - "timeToMerge": 62 - } - ], - "timeWaitingForRepeatedReview": [ - 49 - ], - "reviewComments": 1, - "discussions": { - "received": { - "total": 1, - "agreed": 0, - "disagreed": 0 - }, - "conducted": { - "total": 1, - "agreed": 0, - "disagreed": 0 - } - }, - "reviewRequestsConducted": 10, - "reviewsConducted": { - "dev2": { - "approved": 2, - "total": 2 - }, - "total": { - "approved": 2, - "total": 2 - } - }, - "reviewsConductedSize": [ - "m", - "xl" - ], - "timeFromInitialRequestToResponse": [ - 1196, - 362 - ], - "timeFromOpenToResponse": [ - 1216, - 374 - ], - "timeFromRepeatedRequestToResponse": [], - "commentsConducted": 1, - "reviewTimeIntervals": { - "0-2": 2, - "2-4": 1, - "4-8": 0, - "8-12": 0, - "12-16": 0, - "16-24": 1, - "24-Infinity": 0 - }, - "approvalTimeIntervals": {}, - "mergeTimeIntervals": {}, - "median": { - "timeToReview": 130, - "timeToApprove": 180, - "timeToMerge": 333, - "timeToReviewRequest": 131, - "timeInDraft": 131, - "timeFromInitialRequestToResponse": 779, - "timeFromOpenToResponse": 795, - "timeFromRepeatedRequestToResponse": 0, - "timeWaitingForRepeatedReview": 49 - }, - "percentile": { - "timeToReview": 209, - "timeToApprove": 209, - "timeToMerge": 453, - "timeToReviewRequest": 225, - "timeInDraft": 225, - "timeFromInitialRequestToResponse": 779, - "timeFromOpenToResponse": 795, - "timeFromRepeatedRequestToResponse": 0, - "timeWaitingForRepeatedReview": null - }, - "average": { - "timeToReview": 353, - "timeToApprove": 378, - "timeToMerge": 531, - "timeToReviewRequest": 184, - "timeInDraft": 184, - "timeFromInitialRequestToResponse": 779, - "timeFromOpenToResponse": 795, - "timeFromRepeatedRequestToResponse": 0, - "timeWaitingForRepeatedReview": 49 - } - } - }, - "dev1": { - "10/2024": { - "reviewRequestsConducted": 13, - "timeFromInitialRequestToResponse": [ - 2934, - 404, - 613, - 8, - 300, - 2, - 13 - ], - "timeFromOpenToResponse": [ - 2946, - 409, - 647, - 31, - 306, - 11, - 51 - ], - "timeFromRepeatedRequestToResponse": [ - 49 - ], - "reviewsConducted": { - "dev2": { - "changes_requested": 1, - "total": 2, - "approved": 2 - }, - "total": { - "changes_requested": 4, - "total": 7, - "approved": 7 - }, - "dev5": { - "approved": 1, - "total": 1 - }, - "dev3": { - "changes_requested": 2, - "total": 3, - "approved": 3 - }, - "dev4": { - "changes_requested": 1, - "total": 1, - "approved": 1 - } - }, - "reviewsConductedSize": [ - "xl", - "s", - "l", - "m", - "xs", - "m", - "m" - ], - "commentsConducted": 8, - "discussions": { - "conducted": { - "total": 7, - "agreed": 0, - "disagreed": 0 - }, - "received": { - "total": 0, - "agreed": 0, - "disagreed": 0 - } - }, - "opened": 1, - "closed": 1, - "merged": 1, - "comments": 1, - "totalReviewComments": 0, - "reverted": 0, - "additions": 67, - "deletions": 4, - "prSizes": [ - "s" - ], - "timeToReview": [ - 71 - ], - "timeToApprove": [ - 71 - ], - "timeToMerge": [ - 1574 - ], - "timeToReviewRequest": [ - 6 - ], - "timeInDraft": [ - 6 - ], - "unreviewed": 0, - "unapproved": 0, - "sizes": { - "s": { - "timeToReview": [ - 71 - ], - "timeToApprove": [ - 71 - ], - "timeToMerge": [ - 1574 - ], - "percentile": { - "timeToReview": null, - "timeToApprove": null, - "timeToMerge": null - }, - "median": { - "timeToReview": 71, - "timeToApprove": 71, - "timeToMerge": 1574 - }, - "average": { - "timeToReview": 71, - "timeToApprove": 71, - "timeToMerge": 1574 - } - } - }, - "pullRequestsInfo": [ - { - "number": 1, - "link": "https://github.com/owner/repo-example/pull/1", - "title": "Example pull request", - "comments": 0, - "sizePoints": 67.8, - "additions": 67, - "deletions": 4, - "timeToReview": 71, - "timeToApprove": 0, - "timeToMerge": 1503 - } - ], - "timeWaitingForRepeatedReview": [], - "reviewComments": 0, - "reviewTimeIntervals": { - "0-2": 1, - "2-4": 0, - "4-8": 0, - "8-12": 0, - "12-16": 0, - "16-24": 0, - "24-Infinity": 0 - }, - "approvalTimeIntervals": {}, - "mergeTimeIntervals": {}, - "median": { - "timeToReview": 71, - "timeToApprove": 71, - "timeToMerge": 1574, - "timeToReviewRequest": 6, - "timeInDraft": 6, - "timeFromInitialRequestToResponse": 300, - "timeFromOpenToResponse": 306, - "timeFromRepeatedRequestToResponse": 49, - "timeWaitingForRepeatedReview": 0 - }, - "percentile": { - "timeToReview": null, - "timeToApprove": null, - "timeToMerge": null, - "timeToReviewRequest": null, - "timeInDraft": null, - "timeFromInitialRequestToResponse": 456, - "timeFromOpenToResponse": 468, - "timeFromRepeatedRequestToResponse": null, - "timeWaitingForRepeatedReview": 0 - }, - "average": { - "timeToReview": 71, - "timeToApprove": 71, - "timeToMerge": 1574, - "timeToReviewRequest": 6, - "timeInDraft": 6, - "timeFromInitialRequestToResponse": 611, - "timeFromOpenToResponse": 629, - "timeFromRepeatedRequestToResponse": 49, - "timeWaitingForRepeatedReview": 0 - } - }, - "total": { - "reviewRequestsConducted": 13, - "timeFromInitialRequestToResponse": [ - 2934, - 404, - 613, - 8, - 300, - 2, - 13 - ], - "timeFromOpenToResponse": [ - 2946, - 409, - 647, - 31, - 306, - 11, - 51 - ], - "timeFromRepeatedRequestToResponse": [ - 49 - ], - "actionsTime": [ - null, - null, - null, - null, - null, - null, - null, - null, - { - "approved": 1 - }, - null, - { - "merged": 1, - "changes_requested": 2 - }, - { - "approved": 2, - "changes_requested": 3 - }, - null, - { - "approved": 2 - }, - { - "opened": 1 - }, - { - "changes_requested": 1, - "approved": 1 - }, - { - "changes_requested": 1 - }, - { - "approved": 1 - } - ], - "reviewsConducted": { - "dev2": { - "changes_requested": 1, - "total": 2, - "approved": 2 - }, - "total": { - "changes_requested": 4, - "total": 7, - "approved": 7 - }, - "dev5": { - "approved": 1, - "total": 1 - }, - "dev3": { - "changes_requested": 2, - "total": 3, - "approved": 3 - }, - "dev4": { - "changes_requested": 1, - "total": 1, - "approved": 1 - } - }, - "reviewsConductedSize": [ - "xl", - "s", - "l", - "m", - "xs", - "m", - "m" - ], - "commentsConducted": 8, - "discussions": { - "conducted": { - "total": 7, - "agreed": 0, - "disagreed": 0 - }, - "received": { - "total": 0, - "agreed": 0, - "disagreed": 0 - } - }, - "opened": 1, - "closed": 1, - "merged": 1, - "comments": 1, - "totalReviewComments": 0, - "reverted": 0, - "additions": 67, - "deletions": 4, - "prSizes": [ - "s" - ], - "timeToReview": [ - 71 - ], - "timeToApprove": [ - 71 - ], - "timeToMerge": [ - 1574 - ], - "timeToReviewRequest": [ - 6 - ], - "timeInDraft": [ - 6 - ], - "unreviewed": 0, - "unapproved": 0, - "sizes": { - "s": { - "timeToReview": [ - 71 - ], - "timeToApprove": [ - 71 - ], - "timeToMerge": [ - 1574 - ], - "percentile": { - "timeToReview": null, - "timeToApprove": null, - "timeToMerge": null - }, - "median": { - "timeToReview": 71, - "timeToApprove": 71, - "timeToMerge": 1574 - }, - "average": { - "timeToReview": 71, - "timeToApprove": 71, - "timeToMerge": 1574 - } - } - }, - "pullRequestsInfo": [ - { - "number": 1, - "link": "https://github.com/owner/repo-example/pull/1", - "title": "Example pull request", - "comments": 0, - "sizePoints": 67.8, - "additions": 67, - "deletions": 4, - "timeToReview": 71, - "timeToApprove": 0, - "timeToMerge": 1503 - } - ], - "timeWaitingForRepeatedReview": [], - "reviewComments": 0, - "reviewTimeIntervals": { - "0-2": 1, - "2-4": 0, - "4-8": 0, - "8-12": 0, - "12-16": 0, - "16-24": 0, - "24-Infinity": 0 - }, - "approvalTimeIntervals": {}, - "mergeTimeIntervals": {}, - "median": { - "timeToReview": 71, - "timeToApprove": 71, - "timeToMerge": 1574, - "timeToReviewRequest": 6, - "timeInDraft": 6, - "timeFromInitialRequestToResponse": 300, - "timeFromOpenToResponse": 306, - "timeFromRepeatedRequestToResponse": 49, - "timeWaitingForRepeatedReview": 0 - }, - "percentile": { - "timeToReview": null, - "timeToApprove": null, - "timeToMerge": null, - "timeToReviewRequest": null, - "timeInDraft": null, - "timeFromInitialRequestToResponse": 456, - "timeFromOpenToResponse": 468, - "timeFromRepeatedRequestToResponse": null, - "timeWaitingForRepeatedReview": 0 - }, - "average": { - "timeToReview": 71, - "timeToApprove": 71, - "timeToMerge": 1574, - "timeToReviewRequest": 6, - "timeInDraft": 6, - "timeFromInitialRequestToResponse": 611, - "timeFromOpenToResponse": 629, - "timeFromRepeatedRequestToResponse": 49, - "timeWaitingForRepeatedReview": 0 - } - } - }, - "dev3": { - "10/2024": { - "reviewRequestsConducted": 11, - "timeFromInitialRequestToResponse": [ - 65, - 1 - ], - "timeFromOpenToResponse": [ - 71, - 7 - ], - "timeFromRepeatedRequestToResponse": [], - "reviewsConducted": { - "dev1": { - "approved": 1, - "total": 1 - }, - "total": { - "approved": 2, - "total": 2 - }, - "dev2": { - "approved": 1, - "total": 1 - } - }, - "reviewsConductedSize": [ - "s", - "xs" - ], - "opened": 3, - "closed": 3, - "merged": 3, - "comments": 5, - "totalReviewComments": 10, - "reverted": 0, - "additions": 206, - "deletions": 1271, - "prSizes": [ - "m", - "xs", - "m" - ], - "timeToReview": [ - 31, - 211, - 11 - ], - "timeToApprove": [ - 923, - 381, - 11 - ], - "timeToMerge": [ - 2116, - 936, - 239 - ], - "timeToReviewRequest": [ - 23, - 6, - 9 - ], - "timeInDraft": [ - 23, - 6, - 9 - ], - "unreviewed": 0, - "unapproved": 0, - "sizes": { - "m": { - "timeToReview": [ - 31, - 11 - ], - "timeToApprove": [ - 923, - 11 - ], - "timeToMerge": [ - 2116, - 239 - ], - "percentile": { - "timeToReview": 21, - "timeToApprove": 467, - "timeToMerge": 1177 - }, - "median": { - "timeToReview": 21, - "timeToApprove": 467, - "timeToMerge": 1177 - }, - "average": { - "timeToReview": 21, - "timeToApprove": 467, - "timeToMerge": 1178 - } - }, - "xs": { - "timeToReview": [ - 211 - ], - "timeToApprove": [ - 381 - ], - "timeToMerge": [ - 936 - ], - "percentile": { - "timeToReview": null, - "timeToApprove": null, - "timeToMerge": null - }, - "median": { - "timeToReview": 211, - "timeToApprove": 381, - "timeToMerge": 936 - }, - "average": { - "timeToReview": 211, - "timeToApprove": 381, - "timeToMerge": 936 - } - } - }, - "pullRequestsInfo": [ - { - "number": 1, - "link": "https://github.com/owner/repo-example/pull/1", - "title": "Example pull request", - "comments": 6, - "sizePoints": 229, - "additions": 173, - "deletions": 280, - "timeToReview": 31, - "timeToApprove": 892, - "timeToMerge": 1193 - }, - { - "number": 1, - "link": "https://github.com/owner/repo-example/pull/1", - "title": "Example pull request", - "comments": 4, - "sizePoints": 13.8, - "additions": 13, - "deletions": 4, - "timeToReview": 211, - "timeToApprove": 170, - "timeToMerge": 555 - }, - { - "number": 1, - "link": "https://github.com/owner/repo-example/pull/1", - "title": "Example pull request", - "comments": 0, - "sizePoints": 217.4, - "additions": 20, - "deletions": 987, - "timeToReview": 11, - "timeToApprove": 0, - "timeToMerge": 228 - } - ], - "timeWaitingForRepeatedReview": [], - "reviewComments": 5, - "discussions": { - "received": { - "total": 4, - "agreed": 0, - "disagreed": 0 - } - }, - "reviewTimeIntervals": { - "0-2": 2, - "2-4": 1, - "4-8": 0, - "8-12": 0, - "12-16": 0, - "16-24": 0, - "24-Infinity": 0 - }, - "approvalTimeIntervals": {}, - "mergeTimeIntervals": {}, - "median": { - "timeToReview": 31, - "timeToApprove": 381, - "timeToMerge": 936, - "timeToReviewRequest": 9, - "timeInDraft": 9, - "timeFromInitialRequestToResponse": 33, - "timeFromOpenToResponse": 39, - "timeFromRepeatedRequestToResponse": 0, - "timeWaitingForRepeatedReview": 0 - }, - "percentile": { - "timeToReview": 76, - "timeToApprove": 516, - "timeToMerge": 1231, - "timeToReviewRequest": 12, - "timeInDraft": 12, - "timeFromInitialRequestToResponse": 33, - "timeFromOpenToResponse": 39, - "timeFromRepeatedRequestToResponse": 0, - "timeWaitingForRepeatedReview": 0 - }, - "average": { - "timeToReview": 85, - "timeToApprove": 439, - "timeToMerge": 1097, - "timeToReviewRequest": 13, - "timeInDraft": 13, - "timeFromInitialRequestToResponse": 33, - "timeFromOpenToResponse": 39, - "timeFromRepeatedRequestToResponse": 0, - "timeWaitingForRepeatedReview": 0 - } - }, - "total": { - "reviewRequestsConducted": 11, - "timeFromInitialRequestToResponse": [ - 65, - 1 - ], - "timeFromOpenToResponse": [ - 71, - 7 - ], - "timeFromRepeatedRequestToResponse": [], - "actionsTime": [ - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - { - "opened": 1, - "merged": 1 - }, - { - "merged": 1 - }, - null, - null, - { - "approved": 1 - }, - { - "approved": 1, - "merged": 1, - "opened": 1 - }, - { - "opened": 1 - } - ], - "reviewsConducted": { - "dev1": { - "approved": 1, - "total": 1 - }, - "total": { - "approved": 2, - "total": 2 - }, - "dev2": { - "approved": 1, - "total": 1 - } - }, - "reviewsConductedSize": [ - "s", - "xs" - ], - "opened": 3, - "closed": 3, - "merged": 3, - "comments": 5, - "totalReviewComments": 10, - "reverted": 0, - "additions": 206, - "deletions": 1271, - "prSizes": [ - "m", - "xs", - "m" - ], - "timeToReview": [ - 31, - 211, - 11 - ], - "timeToApprove": [ - 923, - 381, - 11 - ], - "timeToMerge": [ - 2116, - 936, - 239 - ], - "timeToReviewRequest": [ - 23, - 6, - 9 - ], - "timeInDraft": [ - 23, - 6, - 9 - ], - "unreviewed": 0, - "unapproved": 0, - "sizes": { - "m": { - "timeToReview": [ - 31, - 11 - ], - "timeToApprove": [ - 923, - 11 - ], - "timeToMerge": [ - 2116, - 239 - ], - "percentile": { - "timeToReview": 21, - "timeToApprove": 467, - "timeToMerge": 1177 - }, - "median": { - "timeToReview": 21, - "timeToApprove": 467, - "timeToMerge": 1177 - }, - "average": { - "timeToReview": 21, - "timeToApprove": 467, - "timeToMerge": 1178 - } - }, - "xs": { - "timeToReview": [ - 211 - ], - "timeToApprove": [ - 381 - ], - "timeToMerge": [ - 936 - ], - "percentile": { - "timeToReview": null, - "timeToApprove": null, - "timeToMerge": null - }, - "median": { - "timeToReview": 211, - "timeToApprove": 381, - "timeToMerge": 936 - }, - "average": { - "timeToReview": 211, - "timeToApprove": 381, - "timeToMerge": 936 - } - } - }, - "pullRequestsInfo": [ - { - "number": 1, - "link": "https://github.com/owner/repo-example/pull/1", - "title": "Example pull request", - "comments": 6, - "sizePoints": 229, - "additions": 173, - "deletions": 280, - "timeToReview": 31, - "timeToApprove": 892, - "timeToMerge": 1193 - }, - { - "number": 1, - "link": "https://github.com/owner/repo-example/pull/1", - "title": "Example pull request", - "comments": 4, - "sizePoints": 13.8, - "additions": 13, - "deletions": 4, - "timeToReview": 211, - "timeToApprove": 170, - "timeToMerge": 555 - }, - { - "number": 1, - "link": "https://github.com/owner/repo-example/pull/1", - "title": "Example pull request", - "comments": 0, - "sizePoints": 217.4, - "additions": 20, - "deletions": 987, - "timeToReview": 11, - "timeToApprove": 0, - "timeToMerge": 228 - } - ], - "timeWaitingForRepeatedReview": [], - "reviewComments": 5, - "discussions": { - "received": { - "total": 4, - "agreed": 0, - "disagreed": 0 - } - }, - "reviewTimeIntervals": { - "0-2": 2, - "2-4": 1, - "4-8": 0, - "8-12": 0, - "12-16": 0, - "16-24": 0, - "24-Infinity": 0 - }, - "approvalTimeIntervals": {}, - "mergeTimeIntervals": {}, - "median": { - "timeToReview": 31, - "timeToApprove": 381, - "timeToMerge": 936, - "timeToReviewRequest": 9, - "timeInDraft": 9, - "timeFromInitialRequestToResponse": 33, - "timeFromOpenToResponse": 39, - "timeFromRepeatedRequestToResponse": 0, - "timeWaitingForRepeatedReview": 0 - }, - "percentile": { - "timeToReview": 76, - "timeToApprove": 516, - "timeToMerge": 1231, - "timeToReviewRequest": 12, - "timeInDraft": 12, - "timeFromInitialRequestToResponse": 33, - "timeFromOpenToResponse": 39, - "timeFromRepeatedRequestToResponse": 0, - "timeWaitingForRepeatedReview": 0 - }, - "average": { - "timeToReview": 85, - "timeToApprove": 439, - "timeToMerge": 1097, - "timeToReviewRequest": 13, - "timeInDraft": 13, - "timeFromInitialRequestToResponse": 33, - "timeFromOpenToResponse": 39, - "timeFromRepeatedRequestToResponse": 0, - "timeWaitingForRepeatedReview": 0 - } - } - }, - "dev5": { - "10/2024": { - "reviewRequestsConducted": 13, - "timeFromInitialRequestToResponse": [], - "timeFromOpenToResponse": [], - "timeFromRepeatedRequestToResponse": [], - "opened": 1, - "closed": 1, - "merged": 1, - "comments": 2, - "totalReviewComments": 0, - "reverted": 0, - "additions": 126, - "deletions": 2384, - "prSizes": [ - "l" - ], - "timeToReview": [ - 647 - ], - "timeToApprove": [ - 647 - ], - "timeToMerge": [ - 1641 - ], - "timeToReviewRequest": [ - 34 - ], - "timeInDraft": [ - 34 - ], - "unreviewed": 0, - "unapproved": 0, - "sizes": { - "l": { - "timeToReview": [ - 647 - ], - "timeToApprove": [ - 647 - ], - "timeToMerge": [ - 1641 - ], - "percentile": { - "timeToReview": null, - "timeToApprove": null, - "timeToMerge": null - }, - "median": { - "timeToReview": 647, - "timeToApprove": 647, - "timeToMerge": 1641 - }, - "average": { - "timeToReview": 647, - "timeToApprove": 647, - "timeToMerge": 1641 - } - } - }, - "pullRequestsInfo": [ - { - "number": 1, - "link": "https://github.com/owner/repo-example/pull/1", - "title": "Example pull request", - "comments": 0, - "sizePoints": 602.8, - "additions": 126, - "deletions": 2384, - "timeToReview": 647, - "timeToApprove": 0, - "timeToMerge": 994 - } - ], - "timeWaitingForRepeatedReview": [], - "reviewComments": 0, - "discussions": { - "received": { - "total": 0, - "agreed": 0, - "disagreed": 0 - } - }, - "reviewTimeIntervals": { - "0-2": 0, - "2-4": 0, - "4-8": 0, - "8-12": 1, - "12-16": 0, - "16-24": 0, - "24-Infinity": 0 - }, - "approvalTimeIntervals": {}, - "mergeTimeIntervals": {}, - "median": { - "timeToReview": 647, - "timeToApprove": 647, - "timeToMerge": 1641, - "timeToReviewRequest": 34, - "timeInDraft": 34, - "timeFromInitialRequestToResponse": 0, - "timeFromOpenToResponse": 0, - "timeFromRepeatedRequestToResponse": 0, - "timeWaitingForRepeatedReview": 0 - }, - "percentile": { - "timeToReview": null, - "timeToApprove": null, - "timeToMerge": null, - "timeToReviewRequest": null, - "timeInDraft": null, - "timeFromInitialRequestToResponse": 0, - "timeFromOpenToResponse": 0, - "timeFromRepeatedRequestToResponse": 0, - "timeWaitingForRepeatedReview": 0 - }, - "average": { - "timeToReview": 647, - "timeToApprove": 647, - "timeToMerge": 1641, - "timeToReviewRequest": 34, - "timeInDraft": 34, - "timeFromInitialRequestToResponse": 0, - "timeFromOpenToResponse": 0, - "timeFromRepeatedRequestToResponse": 0, - "timeWaitingForRepeatedReview": 0 - } - }, - "total": { - "reviewRequestsConducted": 13, - "timeFromInitialRequestToResponse": [], - "timeFromOpenToResponse": [], - "timeFromRepeatedRequestToResponse": [], - "actionsTime": [ - null, - null, - null, - null, - null, - null, - null, - null, - null, - null, - { - "merged": 1 - }, - null, - { - "opened": 1 - } - ], - "opened": 1, - "closed": 1, - "merged": 1, - "comments": 2, - "totalReviewComments": 0, - "reverted": 0, - "additions": 126, - "deletions": 2384, - "prSizes": [ - "l" - ], - "timeToReview": [ - 647 - ], - "timeToApprove": [ - 647 - ], - "timeToMerge": [ - 1641 - ], - "timeToReviewRequest": [ - 34 - ], - "timeInDraft": [ - 34 - ], - "unreviewed": 0, - "unapproved": 0, - "sizes": { - "l": { - "timeToReview": [ - 647 - ], - "timeToApprove": [ - 647 - ], - "timeToMerge": [ - 1641 - ], - "percentile": { - "timeToReview": null, - "timeToApprove": null, - "timeToMerge": null - }, - "median": { - "timeToReview": 647, - "timeToApprove": 647, - "timeToMerge": 1641 - }, - "average": { - "timeToReview": 647, - "timeToApprove": 647, - "timeToMerge": 1641 - } - } - }, - "pullRequestsInfo": [ - { - "number": 1, - "link": "https://github.com/owner/repo-example/pull/1", - "title": "Example pull request", - "comments": 0, - "sizePoints": 602.8, - "additions": 126, - "deletions": 2384, - "timeToReview": 647, - "timeToApprove": 0, - "timeToMerge": 994 - } - ], - "timeWaitingForRepeatedReview": [], - "reviewComments": 0, - "discussions": { - "received": { - "total": 0, - "agreed": 0, - "disagreed": 0 - } - }, - "reviewTimeIntervals": { - "0-2": 0, - "2-4": 0, - "4-8": 0, - "8-12": 1, - "12-16": 0, - "16-24": 0, - "24-Infinity": 0 - }, - "approvalTimeIntervals": {}, - "mergeTimeIntervals": {}, - "median": { - "timeToReview": 647, - "timeToApprove": 647, - "timeToMerge": 1641, - "timeToReviewRequest": 34, - "timeInDraft": 34, - "timeFromInitialRequestToResponse": 0, - "timeFromOpenToResponse": 0, - "timeFromRepeatedRequestToResponse": 0, - "timeWaitingForRepeatedReview": 0 - }, - "percentile": { - "timeToReview": null, - "timeToApprove": null, - "timeToMerge": null, - "timeToReviewRequest": null, - "timeInDraft": null, - "timeFromInitialRequestToResponse": 0, - "timeFromOpenToResponse": 0, - "timeFromRepeatedRequestToResponse": 0, - "timeWaitingForRepeatedReview": 0 - }, - "average": { - "timeToReview": 647, - "timeToApprove": 647, - "timeToMerge": 1641, - "timeToReviewRequest": 34, - "timeInDraft": 34, - "timeFromInitialRequestToResponse": 0, - "timeFromOpenToResponse": 0, - "timeFromRepeatedRequestToResponse": 0, - "timeWaitingForRepeatedReview": 0 - } - } - } -} \ No newline at end of file diff --git a/examples/nPRsReport.md b/examples/nPRsReport.md index 05deb51..2fe5490 100644 --- a/examples/nPRsReport.md +++ b/examples/nPRsReport.md @@ -1,721 +1,148 @@ - ## Pull Request report - This report based on 200 last updated PRs. To learn more about the project and its configuration, please visit [Pull request analytics action](https://github.com/AlexSim93/pull-request-analytics-action). - + +To learn more about the project and its configuration, please visit [Pull request analytics action](https://github.com/AlexSim93/pull-request-analytics-action). + Below are the settings applied for this report: + ``` -GITHUB_OWNERS_REPOS: AlexSim93/example-repo -GITHUB_OWNER_FOR_ISSUE: AlexSim93 -GITHUB_REPO_FOR_ISSUE: lang-card +GITHUB_OWNERS_REPOS: example-owner/example-repo SHOW_STATS_TYPES: timeline, workload, pr-quality, code-review-engagement, response-time -REVIEW_TIME_INTERVALS: 2,4,8,12,16,24 +REVIEW_TIME_INTERVALS: 2,5,9,14,18,27 +APPROVAL_TIME_INTERVALS: 2,5,9,14,18,27 TOP_LIST_AMOUNT: 0 -AGGREGATE_VALUE_METHODS: percentile -SHOW_CORRELATION_GRAPHS: true -SHOW_ACTIVITY_TIME_GRAPHS: true +AGGREGATE_VALUE_METHODS: percentile, average, median +HIDE_USERS: dev6 PERCENTILE: 75 -SHOW_USERS: dev1, dev2, dev3, dev4, dev5, total -TIMEZONE: Europe/Berlin -CORE_HOURS_START: 09:00 -CORE_HOURS_END: 19:00 -AMOUNT: 150 -PERIOD_SPLIT_UNIT: months -USE_CHARTS: false +CORE_HOURS_START: 08:00 +CORE_HOURS_END: 20:00 +AMOUNT: 200 +PERIOD_SPLIT_UNIT: none EXECUTION_OUTCOME: markdown ``` - - - - - - -### Pull requests timeline(75th percentile) 12/2024 -**Time to review** - time from PR creation to first review. -**Time to approve** - time from PR creation to first approval without requested changes. -**Time to merge** - time from PR creation to merge. -| user | Time in draft | Time to review request | Time to review | Time to Review After Re-request | Time to approve | Time to merge | Total merged PRs | -| :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **dev1** | 6 minutes | 6 minutes | 40 minutes | | 3 hours 27 minutes | 8 hours 21 minutes | 15 | -| **dev2** | 6 minutes | 7 minutes | 4 hours 43 minutes | | 8 hours 7 minutes | 14 hours 50 minutes | 23 | -| **dev3** | 6 minutes | 6 minutes | 2 hours 26 minutes | | 8 hours 48 minutes | 21 hours 7 minutes | 10 | -| **dev4** | 27 minutes | 27 minutes | 3 hours 29 minutes | 3 hours 25 minutes | 8 hours 3 minutes | 56 hours 9 minutes | 17 | -| **dev5** | 15 minutes | 9 minutes | 1 hour 8 minutes | 5 hours 29 minutes | 12 hours 2 minutes | 36 hours 31 minutes | 17 | -| **total** | 9 minutes | 7 minutes | 2 hours 21 minutes | 4 hours 21 minutes | 8 hours 43 minutes | 22 hours 53 minutes | 83 | - - - -### Review time 12/2024 - -| users | 0-2h | 2-4h | 4-8h | 8-12h | 12-16h | 16-24h | 24+h | -| :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **dev1** | 12(80%) | 1(6.7%) | 0 | 1(6.7%) | 0 | 0 | 1(6.7%) | -| **dev2** | 16(69.6%) | 0 | 4(17.4%) | 3(13%) | 0 | 0 | 0 | -| **dev3** | 6(60%) | 2(20%) | 2(20%) | 0 | 0 | 0 | 0 | -| **dev4** | 12(70.6%) | 0 | 4(23.5%) | 0 | 0 | 1(5.9%) | 0 | -| **dev5** | 13(76.5%) | 2(11.8%) | 1(5.9%) | 1(5.9%) | 0 | 0 | 0 | -| **total** | 60(72.3%) | 5(6%) | 11(13.3%) | 5(6%) | 0 | 1(1.2%) | 1(1.2%) | - - - - - - -### Contribution stats 12/2024 -**Reviews conducted** - number of reviews conducted. 1 PR may have only single review. -**PR Size** - determined using the formula: `additions + deletions * 0.2`. Based on this calculation: 0-50: xs, 51-200: s, 201-400: m, 401-700: l, 701+: xl -**Total reverted PRs** - The number of reverted PRs based on the branch name pattern `/^revert-d+/`. This pattern is used for reverts made via GitHub. -| user | Total opened PRs | Total merged PRs | Total reverted PRs | PRs w/o review | PRs w/o approval | Additions / Deletions | PR size: xs/s/m/l/xl | -| :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **dev1** | 15 | 15 | 0 | 1 | 1 | +9316/-8217 | 11/2/0/1/1 | -| **dev2** | 24 | 23 | 2 | 3 | 3 | +1358/-1442 | 19/2/1/2/0 | -| **dev3** | 10 | 10 | 0 | 0 | 0 | +917/-217 | 5/3/2/0/0 | -| **dev4** | 17 | 17 | 0 | 0 | 0 | +1591/-743 | 10/3/3/1/0 | -| **dev5** | 17 | 17 | 1 | 4 | 3 | +3870/-1330 | 5/5/4/2/1 | -| **total** | 84 | 83 | 3 | 8 | 7 | +17057/-11954 | 51/15/10/6/2 | - - - -### Pull request quality 12/2024 -**Agreed** - discussions with at least 1 reaction :+1:. -**Disagreed** - discussions with at least 1 reaction :-1:. -| user | Total merged PRs | Changes requested received | Agreed / Disagreed / Total discussions received | Comments received | -| :------: | :------: | :------: | :------: | :------: | -| **dev1** | 15 | 2 | 2 / 2 / 12 | 18 | -| **dev2** | 23 | 2 | 3 / 6 / 20 | 24 | -| **dev3** | 10 | 4 | 6 / 0 / 30 | 48 | -| **dev4** | 17 | 5 | 9 / 4 / 68 | 82 | -| **dev5** | 17 | 4 | 9 / 3 / 51 | 63 | -| **total** | 83 | 17 | 29 / 15 / 181 | 235 | - - -### Discussion's types 12/2024 - -| users | imports between modules | browser support | Error handling | locale value getter | array performance | misprint | redux selectors | -| :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **dev1** | 1(33.3%) | 1(33.3%) | 1(33.3%) | 0 | 0 | 0 | 0 | -| **dev4** | 7(41.2%) | 4(23.5%) | 2(11.8%) | 2(11.8%) | 2(11.8%) | 0 | 0 | -| **dev5** | 1(11.1%) | 2(22.2%) | 3(33.3%) | 0 | 0 | 2(22.2%) | 1(11.1%) | -| **total** | 9(31%) | 7(24.1%) | 6(20.7%) | 2(6.9%) | 2(6.9%) | 2(6.9%) | 1(3.4%) | - - - -### Code review engagement 12/2024 -**PR Size** - determined using the formula: `additions + deletions * 0.2`. Based on this calculation: 0-50: xs, 51-200: s, 201-400: m, 401-700: l, 701+: xl -**Changes requested / Comments / Approvals** - number of reviews conducted by user. For a single pull request, only one review of each status will be counted for a user. -**Agreed** - discussions with at least 1 reaction :+1:. -**Disagreed** - discussions with at least 1 reaction :-1:. -| user | Reviews conducted | Agreed / Disagreed / Total discussions conducted | Comments conducted | PR size: xs/s/m/l/xl | Changes requested / Commented / Approved | -| :------: | :------: | :------: | :------: | :------: | :------: | -| **dev1** | 25 | 0 / 0 / 46 | 64 | 8/6/7/3/1 | 8 / 10 / 24 | -| **dev2** | 28 | 0 / 0 / 11 | 12 | 16/6/5/1/0 | 8 / 0 / 28 | -| **dev3** | 8 | 0 / 0 / 1 | 1 | 6/1/0/0/1 | 0 / 1 / 8 | -| **dev4** | 20 | 0 / 0 / 2 | 2 | 16/2/1/1/0 | 1 / 0 / 20 | -| **dev5** | 8 | 0 / 0 / 4 | 5 | 6/1/1/0/0 | 2 / 0 / 8 | -| **total** | 83 | 29 / 15 / 181 | 235 | 51/15/10/6/2 | 17 / 39 / 83 | - - -### Review Response Time(75th percentile) 12/2024 -**Time from re-request to response** - time from a review re-request to the response. Multiple re-requests and responses can occur in a single pull request -| user | Review requests conducted | Reviews conducted | Time from opening to response | Time from initial request to response | Time from re-request to response | -| :------: | :------: | :------: | :------: | :------: | :------: | -| **dev1** | 67 | 25 | 6 hours 39 minutes | 7 hours 39 minutes | 5 hours 18 minutes | -| **dev2** | 58 | 28 | 6 hours 3 minutes | 5 hours 55 minutes | 2 hours 56 minutes | -| **dev3** | 73 | 8 | 4 hours | 4 hours | | -| **dev4** | 63 | 20 | 7 hours 13 minutes | 6 hours 57 minutes | | -| **dev5** | 66 | 8 | 3 hours 51 minutes | 3 hours 46 minutes | | -| **total** | 334 | 83 | 6 hours 3 minutes | 6 hours 8 minutes | 4 hours 33 minutes | - - - - +### Pull requests timeline(75th percentile) total -### Pull requests timeline(75th percentile) 11/2024 -**Time to review** - time from PR creation to first review. -**Time to approve** - time from PR creation to first approval without requested changes. +**Time to review** - time from PR creation to first review. +**Time to approve** - time from PR creation to first approval without requested changes. **Time to merge** - time from PR creation to merge. -| user | Time in draft | Time to review request | Time to review | Time to Review After Re-request | Time to approve | Time to merge | Total merged PRs | -| :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **dev1** | 4 minutes | 4 minutes | 1 hour 40 minutes | | 1 hour 42 minutes | 10 hours 1 minute | 4 | -| **dev2** | 45 minutes | 45 minutes | 1 hour 16 minutes | 4 hours 50 minutes | 6 hours 1 minute | 15 hours 53 minutes | 17 | -| **dev3** | 26 minutes | 24 minutes | 1 hour 51 minutes | | 9 hours 33 minutes | 23 hours 16 minutes | 13 | -| **dev4** | 10 minutes | 12 minutes | 1 hour 9 minutes | 57 minutes | 1 hour 9 minutes | 9 hours 17 minutes | 13 | -| **dev5** | 7 minutes | 7 minutes | 4 hours 5 minutes | 3 hours 37 minutes | 13 hours 8 minutes | 27 hours 53 minutes | 15 | -| **total** | 15 minutes | 15 minutes | 1 hour 59 minutes | 3 hours 37 minutes | 7 hours 50 minutes | 23 hours 48 minutes | 62 | - +| user | Time in draft | Time to review request | Time to review | Time to Review After Re-request | Time to merge | Total merged PRs | +| :------: | :------: | :------: | :------: | :------: | :------: | :------: | +| **dev1** | 5 minutes | 5 minutes | 7 hours 52 minutes | 13 minutes | 55 hours 56 minutes | 50 | +| **dev2** | 4 minutes | 4 minutes | 4 hours 40 minutes | | 50 hours 12 minutes | 14 | +| **dev3** | 5 minutes | 5 minutes | 6 hours 45 minutes | 3 minutes | 26 hours 59 minutes | 18 | +| **dev4** | 18 minutes | 18 minutes | 7 hours 28 minutes | 1 hour 5 minutes | 45 hours 7 minutes | 26 | +| **dev5** | 5 minutes | 5 minutes | 10 hours 36 minutes | 2 hours 3 minutes | 73 hours 49 minutes | 27 | +| **total** | 5 minutes | 5 minutes | 8 hours 26 minutes | 57 minutes | 58 hours 11 minutes | 145 | + +### Pull requests timeline(average) total + +**Time to review** - time from PR creation to first review. +**Time to approve** - time from PR creation to first approval without requested changes. +**Time to merge** - time from PR creation to merge. +| user | Time in draft | Time to review request | Time to review | Time to Review After Re-request | Time to merge | Total merged PRs | +| :------: | :------: | :------: | :------: | :------: | :------: | :------: | +| **dev1** | 40 minutes | 36 minutes | 8 hours 8 minutes | 14 minutes | 28 hours 14 minutes | 50 | +| **dev2** | 4 minutes | 4 minutes | 6 hours 51 minutes | | 35 hours 42 minutes | 14 | +| **dev3** | 33 minutes | 36 minutes | 4 hours 49 minutes | 5 minutes | 25 hours 28 minutes | 18 | +| **dev4** | 2 hours 2 minutes | 2 hours 2 minutes | 8 hours 44 minutes | 17 hours 13 minutes | 39 hours 38 minutes | 26 | +| **dev5** | 38 minutes | 41 minutes | 9 hours 12 minutes | 8 hours 14 minutes | 82 hours 48 minutes | 27 | +| **total** | 43 minutes | 45 minutes | 7 hours 41 minutes | 7 hours 52 minutes | 41 hours 38 minutes | 145 | + +### Pull requests timeline(median) total + +**Time to review** - time from PR creation to first review. +**Time to approve** - time from PR creation to first approval without requested changes. +**Time to merge** - time from PR creation to merge. +| user | Time in draft | Time to review request | Time to review | Time to Review After Re-request | Time to merge | Total merged PRs | +| :------: | :------: | :------: | :------: | :------: | :------: | :------: | +| **dev1** | 4 minutes | 4 minutes | 3 hours 33 minutes | 8 minutes | 11 hours 31 minutes | 50 | +| **dev2** | | 3 minutes | 30 minutes | | 28 hours 27 minutes | 14 | +| **dev3** | | | 2 hours 54 minutes | 2 minutes | 10 hours 25 minutes | 18 | +| **dev4** | 5 minutes | 5 minutes | 1 hour 5 minutes | 38 minutes | 13 hours 48 minutes | 26 | +| **dev5** | 4 minutes | 4 minutes | 4 hours 42 minutes | 1 hour 10 minutes | 35 hours 32 minutes | 27 | +| **total** | 4 minutes | 4 minutes | 2 hours 51 minutes | 12 minutes | 17 hours 26 minutes | 145 | - -### Review time 11/2024 +### Review time total -| users | 0-2h | 2-4h | 4-8h | 8-12h | 12-16h | 16-24h | 24+h | -| :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **dev1** | 3(75%) | 1(25%) | 0 | 0 | 0 | 0 | 0 | -| **dev2** | 13(76.5%) | 0 | 1(5.9%) | 1(5.9%) | 1(5.9%) | 0 | 1(5.9%) | -| **dev3** | 10(76.9%) | 1(7.7%) | 1(7.7%) | 1(7.7%) | 0 | 0 | 0 | -| **dev4** | 10(76.9%) | 1(7.7%) | 1(7.7%) | 1(7.7%) | 0 | 0 | 0 | -| **dev5** | 10(66.7%) | 1(6.7%) | 3(20%) | 1(6.7%) | 0 | 0 | 0 | -| **total** | 46(74.2%) | 4(6.5%) | 6(9.7%) | 4(6.5%) | 1(1.6%) | 0 | 1(1.6%) | - - - - - +| users | 0-2h | 2-5h | 5-9h | 9-14h | 14-18h | 18-27h | 27+h | +| :-------: | :-------: | :-------: | :-------: | :-------: | :-----: | :-----: | :-------: | +| **dev1** | 16(33.3%) | 13(27.1%) | 9(18.8%) | 5(10.4%) | 0 | 0 | 5(10.4%) | +| **dev2** | 9(64.3%) | 1(7.1%) | 1(7.1%) | 1(7.1%) | 0 | 0 | 2(14.3%) | +| **dev3** | 7(38.9%) | 3(16.7%) | 5(27.8%) | 2(11.1%) | 1(5.6%) | 0 | 0 | +| **dev4** | 15(57.7%) | 1(3.8%) | 4(15.4%) | 1(3.8%) | 0 | 0 | 5(19.2%) | +| **dev5** | 12(35.3%) | 6(17.6%) | 3(8.8%) | 7(20.6%) | 0 | 2(5.9%) | 4(11.8%) | +| **total** | 67(44.4%) | 25(16.6%) | 23(15.2%) | 16(10.6%) | 1(0.7%) | 2(1.3%) | 17(11.3%) | + +### Contribution stats total -### Contribution stats 11/2024 **Reviews conducted** - number of reviews conducted. 1 PR may have only single review. **PR Size** - determined using the formula: `additions + deletions * 0.2`. Based on this calculation: 0-50: xs, 51-200: s, 201-400: m, 401-700: l, 701+: xl **Total reverted PRs** - The number of reverted PRs based on the branch name pattern `/^revert-d+/`. This pattern is used for reverts made via GitHub. | user | Total opened PRs | Total merged PRs | Total reverted PRs | PRs w/o review | PRs w/o approval | Additions / Deletions | PR size: xs/s/m/l/xl | | :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **dev1** | 4 | 4 | 0 | 1 | 0 | +415/-89 | 1/3/0/0/0 | -| **dev2** | 17 | 17 | 0 | 0 | 0 | +3253/-2378 | 7/4/3/2/1 | -| **dev3** | 13 | 13 | 0 | 0 | 0 | +1713/-1742 | 4/6/1/2/0 | -| **dev4** | 14 | 13 | 0 | 1 | 1 | +1116/-1032 | 10/2/1/0/1 | -| **dev5** | 15 | 15 | 0 | 0 | 0 | +1048/-341 | 9/3/3/0/0 | -| **total** | 63 | 62 | 0 | 2 | 1 | +7545/-5582 | 31/18/8/4/2 | - +| **dev1** | 71 | 50 | 1 | 23 | 71 | +21316/-30038 | 41/16/5/2/7 | +| **dev2** | 27 | 14 | 0 | 13 | 27 | +1753/-2303 | 18/7/1/1/0 | +| **dev3** | 20 | 18 | 0 | 2 | 20 | +2579/-2091 | 9/5/5/0/1 | +| **dev4** | 27 | 26 | 0 | 1 | 27 | +8184/-3333 | 5/9/7/3/3 | +| **dev5** | 38 | 27 | 3 | 4 | 38 | +9089/-6754 | 22/7/5/1/3 | +| **total** | 200 | 145 | 4 | 49 | 200 | +44439/-45023 | 106/47/25/8/14 | +### Pull request quality total -### Pull request quality 11/2024 **Agreed** - discussions with at least 1 reaction :+1:. **Disagreed** - discussions with at least 1 reaction :-1:. | user | Total merged PRs | Changes requested received | Agreed / Disagreed / Total discussions received | Comments received | | :------: | :------: | :------: | :------: | :------: | -| **dev1** | 4 | 1 | 0 / 0 / 4 | 8 | -| **dev2** | 17 | 7 | 0 / 0 / 23 | 36 | -| **dev3** | 13 | 5 | 0 / 0 / 19 | 24 | -| **dev4** | 13 | 1 | 0 / 0 / 7 | 9 | -| **dev5** | 15 | 6 | 0 / 0 / 14 | 23 | -| **total** | 62 | 20 | 0 / 0 / 67 | 100 | - - +| **dev1** | 50 | 6 | 0 / 0 / 17 | 52 | +| **dev2** | 14 | 1 | 0 / 0 / 26 | 39 | +| **dev3** | 18 | 1 | 0 / 0 / 10 | 15 | +| **dev4** | 26 | 4 | 0 / 0 / 28 | 28 | +| **dev5** | 27 | 7 | 0 / 0 / 16 | 20 | +| **total** | 145 | 21 | 0 / 0 / 100 | 159 | +### Code review engagement total -### Code review engagement 11/2024 **PR Size** - determined using the formula: `additions + deletions * 0.2`. Based on this calculation: 0-50: xs, 51-200: s, 201-400: m, 401-700: l, 701+: xl **Changes requested / Comments / Approvals** - number of reviews conducted by user. For a single pull request, only one review of each status will be counted for a user. **Agreed** - discussions with at least 1 reaction :+1:. **Disagreed** - discussions with at least 1 reaction :-1:. | user | Reviews conducted | Agreed / Disagreed / Total discussions conducted | Comments conducted | PR size: xs/s/m/l/xl | Changes requested / Commented / Approved | | :------: | :------: | :------: | :------: | :------: | :------: | -| **dev1** | 19 | 0 / 0 / 39 | 64 | 6/7/3/3/0 | 12 / 3 / 18 | -| **dev2** | 19 | 0 / 0 / 12 | 17 | 11/5/2/0/1 | 5 / 1 / 19 | -| **dev3** | 12 | 0 / 0 / 2 | 3 | 9/2/1/0/0 | 0 / 1 / 12 | -| **dev4** | 18 | 0 / 0 / 11 | 13 | 8/6/2/1/1 | 4 / 0 / 18 | -| **dev5** | 2 | 0 / 0 / 0 | 0 | 2/0/0/0/0 | 0 / 0 / 2 | -| **total** | 62 | 0 / 0 / 67 | 100 | 31/18/8/4/2 | 20 / 9 / 62 | - +| **dev1** | 50 | 0 / 0 / 63 | 75 | 28/9/7/1/5 | 10 / 12 / 48 | +| **dev3** | 55 | 0 / 0 / 23 | 29 | 23/16/10/3/3 | 9 / 10 / 51 | +| **dev4** | 19 | 0 / 0 / 4 | 4 | 8/6/4/0/1 | 1 / 1 / 19 | +| **dev5** | 28 | 0 / 0 / 7 | 8 | 18/5/3/1/1 | 0 / 5 / 27 | +| **total** | 151 | 0 / 0 / 100 | 159 | 78/36/22/5/10 | 21 / 35 / 146 | + +### Review Response Time(75th percentile) total -### Review Response Time(75th percentile) 11/2024 **Time from re-request to response** - time from a review re-request to the response. Multiple re-requests and responses can occur in a single pull request | user | Review requests conducted | Reviews conducted | Time from opening to response | Time from initial request to response | Time from re-request to response | | :------: | :------: | :------: | :------: | :------: | :------: | -| **dev1** | 58 | 19 | 2 hours 26 minutes | 1 hour 29 minutes | 3 hours 46 minutes | -| **dev2** | 45 | 19 | 3 hours 29 minutes | 3 hours 25 minutes | 3 hours 7 minutes | -| **dev3** | 49 | 12 | 1 hour 40 minutes | 1 hour 36 minutes | | -| **dev4** | 49 | 18 | 1 hour 6 minutes | 44 minutes | | -| **dev5** | 47 | 2 | 1 hour 25 minutes | 1 hour 20 minutes | | -| **total** | 253 | 62 | 3 hours 13 minutes | 1 hour 49 minutes | 6 hours 55 minutes | - - - - - - -### Pull requests timeline(75th percentile) 10/2024 -**Time to review** - time from PR creation to first review. -**Time to approve** - time from PR creation to first approval without requested changes. -**Time to merge** - time from PR creation to merge. -| user | Time in draft | Time to review request | Time to review | Time to Review After Re-request | Time to approve | Time to merge | Total merged PRs | -| :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **dev1** | 7 minutes | 7 minutes | 4 hours 15 minutes | | 4 hours 15 minutes | 16 hours 11 minutes | 9 | -| **dev2** | 11 minutes | 11 minutes | 5 hours 31 minutes | | 6 hours 54 minutes | 11 hours 52 minutes | 14 | -| **dev3** | 26 minutes | 26 minutes | 5 hours 31 minutes | | 14 hours 44 minutes | 22 hours 40 minutes | 9 | -| **dev4** | 6 minutes | 6 minutes | 2 hours 8 minutes | | 2 hours 8 minutes | 17 hours 36 minutes | 4 | -| **dev5** | 6 minutes | 6 minutes | 5 hours 55 minutes | 10 hours 12 minutes | 11 hours 8 minutes | 44 hours 47 minutes | 11 | -| **total** | 8 minutes | 8 minutes | 5 hours 21 minutes | 9 hours 22 minutes | 8 hours 29 minutes | 22 hours 18 minutes | 48 | - - - -### Review time 10/2024 - -| users | 0-2h | 2-4h | 4-8h | 8-12h | 12-16h | 16-24h | 24+h | -| :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **dev1** | 3(33.3%) | 3(33.3%) | 3(33.3%) | 0 | 0 | 0 | 0 | -| **dev2** | 9(64.3%) | 1(7.1%) | 2(14.3%) | 1(7.1%) | 0 | 0 | 1(7.1%) | -| **dev3** | 1(11.1%) | 2(22.2%) | 4(44.4%) | 1(11.1%) | 0 | 1(11.1%) | 0 | -| **dev4** | 2(50%) | 1(25%) | 1(25%) | 0 | 0 | 0 | 0 | -| **dev5** | 5(38.5%) | 3(23.1%) | 3(23.1%) | 2(15.4%) | 0 | 0 | 0 | -| **total** | 21(42%) | 10(20%) | 13(26%) | 4(8%) | 0 | 1(2%) | 1(2%) | - - - - - - -### Contribution stats 10/2024 -**Reviews conducted** - number of reviews conducted. 1 PR may have only single review. -**PR Size** - determined using the formula: `additions + deletions * 0.2`. Based on this calculation: 0-50: xs, 51-200: s, 201-400: m, 401-700: l, 701+: xl -**Total reverted PRs** - The number of reverted PRs based on the branch name pattern `/^revert-d+/`. This pattern is used for reverts made via GitHub. -| user | Total opened PRs | Total merged PRs | Total reverted PRs | PRs w/o review | PRs w/o approval | Additions / Deletions | PR size: xs/s/m/l/xl | -| :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **dev1** | 9 | 9 | 0 | 0 | 0 | +424/-499 | 7/0/2/0/0 | -| **dev2** | 14 | 14 | 0 | 1 | 1 | +952/-531 | 8/3/3/0/0 | -| **dev3** | 9 | 9 | 0 | 0 | 0 | +489/-1576 | 4/3/2/0/0 | -| **dev4** | 4 | 4 | 0 | 0 | 0 | +181/-226 | 3/1/0/0/0 | -| **dev5** | 14 | 11 | 0 | 1 | 2 | +1502/-314 | 8/3/1/2/0 | -| **total** | 51 | 48 | 0 | 2 | 3 | +3581/-3155 | 31/10/8/2/0 | - - - -### Pull request quality 10/2024 -**Agreed** - discussions with at least 1 reaction :+1:. -**Disagreed** - discussions with at least 1 reaction :-1:. -| user | Total merged PRs | Changes requested received | Agreed / Disagreed / Total discussions received | Comments received | -| :------: | :------: | :------: | :------: | :------: | -| **dev1** | 9 | 2 | 0 / 0 / 2 | 2 | -| **dev2** | 14 | 4 | 0 / 0 / 9 | 15 | -| **dev3** | 9 | 5 | 0 / 0 / 20 | 23 | -| **dev4** | 4 | 1 | 0 / 0 / 0 | 1 | -| **dev5** | 11 | 4 | 0 / 0 / 10 | 13 | -| **total** | 48 | 16 | 0 / 0 / 41 | 54 | - - - +| **dev1** | 111 | 50 | 5 hours 19 minutes | 5 hours 16 minutes | 2 hours 22 minutes | +| **dev3** | 155 | 55 | 12 hours 15 minutes | 11 hours 37 minutes | 31 minutes | +| **dev4** | 138 | 19 | 7 hours 10 minutes | 6 hours 36 minutes | | +| **dev5** | 137 | 28 | 13 hours 43 minutes | 13 hours 56 minutes | | +| **total** | 584 | 151 | 8 hours 32 minutes | 8 hours 32 minutes | 57 minutes | -### Code review engagement 10/2024 -**PR Size** - determined using the formula: `additions + deletions * 0.2`. Based on this calculation: 0-50: xs, 51-200: s, 201-400: m, 401-700: l, 701+: xl -**Changes requested / Comments / Approvals** - number of reviews conducted by user. For a single pull request, only one review of each status will be counted for a user. -**Agreed** - discussions with at least 1 reaction :+1:. -**Disagreed** - discussions with at least 1 reaction :-1:. -| user | Reviews conducted | Agreed / Disagreed / Total discussions conducted | Comments conducted | PR size: xs/s/m/l/xl | Changes requested / Commented / Approved | -| :------: | :------: | :------: | :------: | :------: | :------: | -| **dev1** | 20 | 0 / 0 / 24 | 33 | 12/5/3/0/0 | 9 / 5 / 18 | -| **dev2** | 13 | 0 / 0 / 7 | 10 | 7/4/2/0/0 | 5 / 2 / 13 | -| **dev3** | 8 | 0 / 0 / 1 | 1 | 6/1/1/0/0 | 0 / 1 / 7 | -| **dev4** | 11 | 0 / 0 / 6 | 7 | 6/2/2/1/0 | 3 / 0 / 11 | -| **dev5** | 4 | 0 / 0 / 3 | 3 | 3/0/1/0/0 | 0 / 1 / 3 | -| **total** | 50 | 0 / 0 / 41 | 54 | 31/10/8/2/0 | 16 / 9 / 49 | - +### Review Response Time(average) total -### Review Response Time(75th percentile) 10/2024 **Time from re-request to response** - time from a review re-request to the response. Multiple re-requests and responses can occur in a single pull request | user | Review requests conducted | Reviews conducted | Time from opening to response | Time from initial request to response | Time from re-request to response | | :------: | :------: | :------: | :------: | :------: | :------: | -| **dev1** | 41 | 20 | 5 hours 21 minutes | 4 hours 27 minutes | 7 hours 26 minutes | -| **dev2** | 35 | 13 | 3 hours 41 minutes | 2 hours 8 minutes | 2 hours 16 minutes | -| **dev3** | 41 | 8 | 5 hours 51 minutes | 6 hours | | -| **dev4** | 46 | 11 | 48 minutes | 29 minutes | | -| **dev5** | 36 | 4 | 5 hours 35 minutes | 6 hours 21 minutes | | -| **total** | 199 | 50 | 5 hours 21 minutes | 5 hours 8 minutes | 9 hours 22 minutes | - - - - - - - - -### Pull requests timeline(75th percentile) total -**Time to review** - time from PR creation to first review. -**Time to approve** - time from PR creation to first approval without requested changes. -**Time to merge** - time from PR creation to merge. -| user | Time in draft | Time to review request | Time to review | Time to Review After Re-request | Time to approve | Time to merge | Total merged PRs | -| :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **dev1** | 6 minutes | 6 minutes | 2 hours 37 minutes | | 3 hours 44 minutes | 10 hours 1 minute | 28 | -| **dev2** | 12 minutes | 13 minutes | 5 hours 26 minutes | 7 hours 10 minutes | 7 hours 38 minutes | 15 hours 20 minutes | 54 | -| **dev3** | 26 minutes | 26 minutes | 4 hours 17 minutes | | 10 hours 22 minutes | 23 hours 15 minutes | 32 | -| **dev4** | 11 minutes | 12 minutes | 2 hours 5 minutes | 2 hours 53 minutes | 4 hours 56 minutes | 22 hours 27 minutes | 34 | -| **dev5** | 8 minutes | 7 minutes | 3 hours 26 minutes | 7 hours 13 minutes | 13 hours 4 minutes | 37 hours 53 minutes | 43 | -| **total** | 10 minutes | 10 minutes | 3 hours 48 minutes | 6 hours 21 minutes | 8 hours 33 minutes | 23 hours 11 minutes | 193 | - - - -### Review time total - -| users | 0-2h | 2-4h | 4-8h | 8-12h | 12-16h | 16-24h | 24+h | -| :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **dev1** | 18(64.3%) | 5(17.9%) | 3(10.7%) | 1(3.6%) | 0 | 0 | 1(3.6%) | -| **dev2** | 38(70.4%) | 1(1.9%) | 7(13%) | 5(9.3%) | 1(1.9%) | 0 | 2(3.7%) | -| **dev3** | 17(53.1%) | 5(15.6%) | 7(21.9%) | 2(6.3%) | 0 | 1(3.1%) | 0 | -| **dev4** | 24(70.6%) | 2(5.9%) | 6(17.6%) | 1(2.9%) | 0 | 1(2.9%) | 0 | -| **dev5** | 28(62.2%) | 6(13.3%) | 7(15.6%) | 4(8.9%) | 0 | 0 | 0 | -| **total** | 127(65.1%) | 19(9.7%) | 30(15.4%) | 13(6.7%) | 1(0.5%) | 2(1%) | 3(1.5%) | - - - - - - -### Contribution stats total -**Reviews conducted** - number of reviews conducted. 1 PR may have only single review. -**PR Size** - determined using the formula: `additions + deletions * 0.2`. Based on this calculation: 0-50: xs, 51-200: s, 201-400: m, 401-700: l, 701+: xl -**Total reverted PRs** - The number of reverted PRs based on the branch name pattern `/^revert-d+/`. This pattern is used for reverts made via GitHub. -| user | Total opened PRs | Total merged PRs | Total reverted PRs | PRs w/o review | PRs w/o approval | Additions / Deletions | PR size: xs/s/m/l/xl | -| :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **dev1** | 28 | 28 | 0 | 2 | 1 | +10155/-8805 | 19/5/2/1/1 | -| **dev2** | 55 | 54 | 2 | 4 | 4 | +5563/-4351 | 34/9/7/4/1 | -| **dev3** | 32 | 32 | 0 | 0 | 0 | +3119/-3535 | 13/12/5/2/0 | -| **dev4** | 35 | 34 | 0 | 1 | 1 | +2888/-2001 | 23/6/4/1/1 | -| **dev5** | 46 | 43 | 1 | 5 | 5 | +6420/-1985 | 22/11/8/4/1 | -| **total** | 200 | 193 | 3 | 14 | 13 | +28185/-20708 | 115/43/26/12/4 | - - - -### Pull request quality total -**Agreed** - discussions with at least 1 reaction :+1:. -**Disagreed** - discussions with at least 1 reaction :-1:. -| user | Total merged PRs | Changes requested received | Agreed / Disagreed / Total discussions received | Comments received | -| :------: | :------: | :------: | :------: | :------: | -| **dev1** | 28 | 5 | 2 / 2 / 18 | 28 | -| **dev2** | 54 | 13 | 3 / 6 / 52 | 75 | -| **dev3** | 32 | 14 | 6 / 0 / 69 | 95 | -| **dev4** | 34 | 7 | 9 / 4 / 75 | 92 | -| **dev5** | 43 | 14 | 9 / 3 / 75 | 99 | -| **total** | 193 | 53 | 29 / 15 / 289 | 389 | - +| **dev1** | 111 | 50 | 8 hours 14 minutes | 8 hours 43 minutes | 14 hours 14 minutes | +| **dev3** | 155 | 55 | 11 hours 20 minutes | 10 hours 30 minutes | 22 minutes | +| **dev4** | 138 | 19 | 5 hours 28 minutes | 4 hours 30 minutes | 4 minutes | +| **dev5** | 137 | 28 | 14 hours 18 minutes | 14 hours 6 minutes | | +| **total** | 584 | 151 | 9 hours 33 minutes | 9 hours 35 minutes | 7 hours 52 minutes | -### Discussion's types total +### Review Response Time(median) total -| users | imports between modules | browser support | Error handling | locale value getter | array performance | misprint | redux selectors | -| :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **dev1** | 1(33.3%) | 1(33.3%) | 1(33.3%) | 0 | 0 | 0 | 0 | -| **dev4** | 7(41.2%) | 4(23.5%) | 2(11.8%) | 2(11.8%) | 2(11.8%) | 0 | 0 | -| **dev5** | 1(11.1%) | 2(22.2%) | 3(33.3%) | 0 | 0 | 2(22.2%) | 1(11.1%) | -| **total** | 9(31%) | 7(24.1%) | 6(20.7%) | 2(6.9%) | 2(6.9%) | 2(6.9%) | 1(3.4%) | - - - -### Code review engagement total -**PR Size** - determined using the formula: `additions + deletions * 0.2`. Based on this calculation: 0-50: xs, 51-200: s, 201-400: m, 401-700: l, 701+: xl -**Changes requested / Comments / Approvals** - number of reviews conducted by user. For a single pull request, only one review of each status will be counted for a user. -**Agreed** - discussions with at least 1 reaction :+1:. -**Disagreed** - discussions with at least 1 reaction :-1:. -| user | Reviews conducted | Agreed / Disagreed / Total discussions conducted | Comments conducted | PR size: xs/s/m/l/xl | Changes requested / Commented / Approved | -| :------: | :------: | :------: | :------: | :------: | :------: | -| **dev1** | 64 | 0 / 0 / 109 | 161 | 26/18/13/6/1 | 29 / 18 / 60 | -| **dev2** | 60 | 0 / 0 / 30 | 39 | 34/15/9/1/1 | 18 / 3 / 60 | -| **dev3** | 28 | 0 / 0 / 4 | 5 | 21/4/2/0/1 | 0 / 3 / 27 | -| **dev4** | 49 | 0 / 0 / 19 | 22 | 30/10/5/3/1 | 8 / 0 / 49 | -| **dev5** | 14 | 0 / 0 / 7 | 8 | 11/1/2/0/0 | 2 / 1 / 13 | -| **total** | 195 | 29 / 15 / 289 | 389 | 115/43/26/12/4 | 53 / 57 / 194 | - - -### Review Response Time(75th percentile) total **Time from re-request to response** - time from a review re-request to the response. Multiple re-requests and responses can occur in a single pull request | user | Review requests conducted | Reviews conducted | Time from opening to response | Time from initial request to response | Time from re-request to response | | :------: | :------: | :------: | :------: | :------: | :------: | -| **dev1** | 168 | 64 | 5 hours 39 minutes | 4 hours 27 minutes | 6 hours 51 minutes | -| **dev2** | 139 | 60 | 4 hours 10 minutes | 4 hours 3 minutes | 3 hours 11 minutes | -| **dev3** | 164 | 28 | 4 hours 56 minutes | 4 hours 22 minutes | | -| **dev4** | 159 | 49 | 2 hours 2 minutes | 1 hour 19 minutes | 10 hours 46 minutes | -| **dev5** | 150 | 14 | 4 hours 45 minutes | 4 hours 59 minutes | | -| **total** | 792 | 195 | 5 hours 20 minutes | 4 hours 4 minutes | 6 hours 55 minutes | - - - -`#FFA500`Time From Initial Request To Response, `#EE82EE`Time From Opening To Response, `#0000CD`Time From Rerequest To Response, `#696969`Time In Draft, `#B22222`Time To Review Request, `#FFD700`Time To Review, `#40E0D0`Time To Review After Rerequest, `#7FFF00`Time To Approve, `#8A2BE2`Time To Merge -```mermaid ---- -config: - xyChart: - width: 900 - height: 600 - themeVariables: - xyChart: - titleColor: "black" - plotColorPalette: "orange, violet, mediumblue, dimgrey, firebrick, gold, turquoise, chartreuse, blueviolet" ---- -xychart-beta - title "Pull request's retrospective timeline(75th percentile) dev1" - x-axis ["10/24", "11/24", "12/24"] - y-axis "hours" 0 --> 17 - line [4.45, 1.48, 7.65] -line [5.35, 2.43, 6.65] -line [7.43, 3.77, 5.3] -line [0.12, 0.07, 0.1] -line [0.12, 0.07, 0.1] -line [4.25, 1.67, 0.67] -line [0, 0, 0] -line [4.25, 1.7, 3.45] -line [16.18, 10.02, 8.35] -``` - -`#8A2BE2`Discussions Conducted, `#00008B`Discussions Received, `#DC143C`Changes Requested Conducted, `#B22222`Changes Requested Received, `#FFD700`Reviews Conducted, `#7FFF00`Merged PRs -```mermaid ---- -config: - xyChart: - width: 900 - height: 600 - themeVariables: - xyChart: - titleColor: "black" - plotColorPalette: "blueviolet, darkblue, crimson, firebrick, gold, chartreuse" ---- -xychart-beta - title "Pull request's retrospective contribution dev1" - x-axis ["11/23", "7/24", "10/24", "11/24", "12/24"] - y-axis "amount" 0 --> 46 - line [0, 0, 24, 39, 46] -line [0, 0, 2, 4, 12] -line [0, 0, 9, 12, 8] -line [0, 0, 2, 1, 2] -line [0, 0, 20, 19, 25] -line [0, 0, 9, 4, 15] -``` - -`#FFA500`Time From Initial Request To Response, `#EE82EE`Time From Opening To Response, `#0000CD`Time From Rerequest To Response, `#696969`Time In Draft, `#B22222`Time To Review Request, `#FFD700`Time To Review, `#40E0D0`Time To Review After Rerequest, `#7FFF00`Time To Approve, `#8A2BE2`Time To Merge -```mermaid ---- -config: - xyChart: - width: 900 - height: 600 - themeVariables: - xyChart: - titleColor: "black" - plotColorPalette: "orange, violet, mediumblue, dimgrey, firebrick, gold, turquoise, chartreuse, blueviolet" ---- -xychart-beta - title "Pull request's retrospective timeline(75th percentile) dev2" - x-axis ["10/24", "11/24", "12/24"] - y-axis "hours" 0 --> 16 - line [2.13, 3.42, 5.92] -line [3.68, 3.48, 6.05] -line [2.27, 3.12, 2.93] -line [0.18, 0.75, 0.1] -line [0.18, 0.75, 0.12] -line [5.52, 1.27, 4.72] -line [0, 4.83, 0] -line [6.9, 6.02, 8.12] -line [11.87, 15.88, 14.83] -``` - -`#8A2BE2`Discussions Conducted, `#00008B`Discussions Received, `#DC143C`Changes Requested Conducted, `#B22222`Changes Requested Received, `#FFD700`Reviews Conducted, `#7FFF00`Merged PRs -```mermaid ---- -config: - xyChart: - width: 900 - height: 600 - themeVariables: - xyChart: - titleColor: "black" - plotColorPalette: "blueviolet, darkblue, crimson, firebrick, gold, chartreuse" ---- -xychart-beta - title "Pull request's retrospective contribution dev2" - x-axis ["11/23", "7/24", "10/24", "11/24", "12/24"] - y-axis "amount" 0 --> 28 - line [0, 0, 7, 12, 11] -line [0, 0, 9, 23, 20] -line [0, 0, 5, 5, 8] -line [0, 0, 4, 7, 2] -line [0, 0, 13, 19, 28] -line [0, 0, 14, 17, 23] -``` - -`#FFA500`Time From Initial Request To Response, `#EE82EE`Time From Opening To Response, `#0000CD`Time From Rerequest To Response, `#696969`Time In Draft, `#B22222`Time To Review Request, `#FFD700`Time To Review, `#40E0D0`Time To Review After Rerequest, `#7FFF00`Time To Approve, `#8A2BE2`Time To Merge -```mermaid ---- -config: - xyChart: - width: 900 - height: 600 - themeVariables: - xyChart: - titleColor: "black" - plotColorPalette: "orange, violet, mediumblue, dimgrey, firebrick, gold, turquoise, chartreuse, blueviolet" ---- -xychart-beta - title "Pull request's retrospective timeline(75th percentile) dev3" - x-axis ["10/24", "11/24", "12/24"] - y-axis "hours" 0 --> 24 - line [6, 1.6, 4] -line [5.85, 1.67, 4] -line [0, 0, 0] -line [0.43, 0.43, 0.1] -line [0.43, 0.4, 0.1] -line [5.52, 1.85, 2.43] -line [0, 0, 0] -line [14.73, 9.55, 8.8] -line [22.67, 23.27, 21.12] -``` - -`#8A2BE2`Discussions Conducted, `#00008B`Discussions Received, `#DC143C`Changes Requested Conducted, `#B22222`Changes Requested Received, `#FFD700`Reviews Conducted, `#7FFF00`Merged PRs -```mermaid ---- -config: - xyChart: - width: 900 - height: 600 - themeVariables: - xyChart: - titleColor: "black" - plotColorPalette: "blueviolet, darkblue, crimson, firebrick, gold, chartreuse" ---- -xychart-beta - title "Pull request's retrospective contribution dev3" - x-axis ["11/23", "7/24", "10/24", "11/24", "12/24"] - y-axis "amount" 0 --> 30 - line [0, 0, 1, 2, 1] -line [0, 0, 20, 19, 30] -line [0, 0, 0, 0, 0] -line [0, 0, 5, 5, 4] -line [0, 0, 8, 12, 8] -line [0, 0, 9, 13, 10] -``` - -`#FFA500`Time From Initial Request To Response, `#EE82EE`Time From Opening To Response, `#0000CD`Time From Rerequest To Response, `#696969`Time In Draft, `#B22222`Time To Review Request, `#FFD700`Time To Review, `#40E0D0`Time To Review After Rerequest, `#7FFF00`Time To Approve, `#8A2BE2`Time To Merge -```mermaid ---- -config: - xyChart: - width: 900 - height: 600 - themeVariables: - xyChart: - titleColor: "black" - plotColorPalette: "orange, violet, mediumblue, dimgrey, firebrick, gold, turquoise, chartreuse, blueviolet" ---- -xychart-beta - title "Pull request's retrospective timeline(75th percentile) dev4" - x-axis ["10/24", "11/24", "12/24"] - y-axis "hours" 0 --> 57 - line [0.48, 0.73, 6.95] -line [0.8, 1.1, 7.22] -line [0, 0, 0] -line [0.1, 0.17, 0.45] -line [0.1, 0.2, 0.45] -line [2.13, 1.15, 3.48] -line [0, 0.95, 3.42] -line [2.13, 1.15, 8.05] -line [17.6, 9.28, 56.15] -``` - -`#8A2BE2`Discussions Conducted, `#00008B`Discussions Received, `#DC143C`Changes Requested Conducted, `#B22222`Changes Requested Received, `#FFD700`Reviews Conducted, `#7FFF00`Merged PRs -```mermaid ---- -config: - xyChart: - width: 900 - height: 600 - themeVariables: - xyChart: - titleColor: "black" - plotColorPalette: "blueviolet, darkblue, crimson, firebrick, gold, chartreuse" ---- -xychart-beta - title "Pull request's retrospective contribution dev4" - x-axis ["11/23", "7/24", "10/24", "11/24", "12/24"] - y-axis "amount" 0 --> 68 - line [0, 0, 6, 11, 2] -line [0, 0, 0, 7, 68] -line [0, 0, 3, 4, 1] -line [0, 0, 1, 1, 5] -line [0, 0, 11, 18, 20] -line [0, 0, 4, 13, 17] -``` - -`#FFA500`Time From Initial Request To Response, `#EE82EE`Time From Opening To Response, `#0000CD`Time From Rerequest To Response, `#696969`Time In Draft, `#B22222`Time To Review Request, `#FFD700`Time To Review, `#40E0D0`Time To Review After Rerequest, `#7FFF00`Time To Approve, `#8A2BE2`Time To Merge -```mermaid ---- -config: - xyChart: - width: 900 - height: 600 - themeVariables: - xyChart: - titleColor: "black" - plotColorPalette: "orange, violet, mediumblue, dimgrey, firebrick, gold, turquoise, chartreuse, blueviolet" ---- -xychart-beta - title "Pull request's retrospective timeline(75th percentile) dev5" - x-axis ["10/24", "11/24", "12/24"] - y-axis "hours" 0 --> 45 - line [6.35, 1.33, 3.77] -line [5.58, 1.42, 3.85] -line [0, 0, 0] -line [0.1, 0.12, 0.25] -line [0.1, 0.12, 0.15] -line [5.92, 4.08, 1.13] -line [10.2, 3.62, 5.48] -line [11.13, 13.13, 12.03] -line [44.78, 27.88, 36.52] -``` - -`#8A2BE2`Discussions Conducted, `#00008B`Discussions Received, `#DC143C`Changes Requested Conducted, `#B22222`Changes Requested Received, `#FFD700`Reviews Conducted, `#7FFF00`Merged PRs -```mermaid ---- -config: - xyChart: - width: 900 - height: 600 - themeVariables: - xyChart: - titleColor: "black" - plotColorPalette: "blueviolet, darkblue, crimson, firebrick, gold, chartreuse" ---- -xychart-beta - title "Pull request's retrospective contribution dev5" - x-axis ["11/23", "7/24", "10/24", "11/24", "12/24"] - y-axis "amount" 0 --> 51 - line [0, 0, 3, 0, 4] -line [0, 0, 10, 14, 51] -line [0, 0, 0, 0, 2] -line [0, 0, 4, 6, 4] -line [0, 0, 4, 2, 8] -line [0, 0, 11, 15, 17] -``` - -`#FFA500`Time From Initial Request To Response, `#EE82EE`Time From Opening To Response, `#0000CD`Time From Rerequest To Response, `#696969`Time In Draft, `#B22222`Time To Review Request, `#FFD700`Time To Review, `#40E0D0`Time To Review After Rerequest, `#7FFF00`Time To Approve, `#8A2BE2`Time To Merge -```mermaid ---- -config: - xyChart: - width: 900 - height: 600 - themeVariables: - xyChart: - titleColor: "black" - plotColorPalette: "orange, violet, mediumblue, dimgrey, firebrick, gold, turquoise, chartreuse, blueviolet" ---- -xychart-beta - title "Pull request's retrospective timeline(75th percentile) total" - x-axis ["10/24", "11/24", "12/24"] - y-axis "hours" 0 --> 24 - line [5.13, 1.82, 6.13] -line [5.35, 3.22, 6.05] -line [9.37, 6.92, 4.55] -line [0.13, 0.25, 0.15] -line [0.13, 0.25, 0.12] -line [5.35, 1.98, 2.35] -line [9.37, 3.62, 4.35] -line [8.48, 7.83, 8.72] -line [22.3, 23.8, 22.88] -``` - -`#8A2BE2`Discussions Conducted, `#00008B`Discussions Received, `#DC143C`Changes Requested Conducted, `#B22222`Changes Requested Received, `#FFD700`Reviews Conducted, `#7FFF00`Merged PRs -```mermaid ---- -config: - xyChart: - width: 900 - height: 600 - themeVariables: - xyChart: - titleColor: "black" - plotColorPalette: "blueviolet, darkblue, crimson, firebrick, gold, chartreuse" ---- -xychart-beta - title "Pull request's retrospective contribution total" - x-axis ["11/23", "7/24", "10/24", "11/24", "12/24"] - y-axis "amount" 0 --> 181 - line [0, 0, 41, 67, 181] -line [0, 0, 41, 67, 181] -line [0, 0, 16, 20, 17] -line [0, 0, 16, 20, 17] -line [0, 0, 50, 62, 83] -line [0, 0, 48, 62, 83] -``` \ No newline at end of file +| **dev1** | 111 | 50 | 28 minutes | 54 minutes | 20 minutes | +| **dev3** | 155 | 55 | 5 hours 51 minutes | 3 hours 34 minutes | 11 minutes | +| **dev4** | 138 | 19 | 2 hours 19 minutes | 2 hours 18 minutes | 4 minutes | +| **dev5** | 137 | 28 | 5 hours 11 minutes | 4 hours 1 minute | | +| **total** | 584 | 151 | 2 hours 23 minutes | 2 hours 25 minutes | 12 minutes | diff --git a/examples/periodReport.md b/examples/periodReport.md deleted file mode 100644 index 4d7d417..0000000 --- a/examples/periodReport.md +++ /dev/null @@ -1,610 +0,0 @@ -## Pull Request report - This report based on 155 last updated PRs. To learn more about the project and its configuration, please visit [Pull request analytics action](https://github.com/AlexSim93/pull-request-analytics-action). - -Below are the settings applied for this report: -``` -GITHUB_OWNERS_REPOS: AlexSim93/example-repo -GITHUB_OWNER_FOR_ISSUE: AlexSim93 -GITHUB_REPO_FOR_ISSUE: lang-card -SHOW_STATS_TYPES: timeline, workload, pr-quality, code-review-engagement, response-time -REVIEW_TIME_INTERVALS: 2,4,8,12,16,24 -TOP_LIST_AMOUNT: 0 -AGGREGATE_VALUE_METHODS: percentile -SHOW_CORRELATION_GRAPHS: true -SHOW_ACTIVITY_TIME_GRAPHS: true -PERCENTILE: 75 -SHOW_USERS: dev1, dev2, dev3, dev4, dev5, total -TIMEZONE: Europe/Berlin -CORE_HOURS_START: 09:00 -CORE_HOURS_END: 19:00 -REPORT_DATE_START: 01/10/2024 -REPORT_DATE_END: 30/11/2024 -AMOUNT: 500 -PERIOD_SPLIT_UNIT: months -USE_CHARTS: false -EXECUTION_OUTCOME: markdown -``` - - - - - - -### Pull requests timeline(75th percentile) 11/2024 -**Time to review** - time from PR creation to first review. -**Time to approve** - time from PR creation to first approval without requested changes. -**Time to merge** - time from PR creation to merge. -| user | Time in draft | Time to review request | Time to review | Time to Review After Re-request | Time to approve | Time to merge | Total merged PRs | -| :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **dev1** | 4 minutes | 4 minutes | 1 hour 40 minutes | | 1 hour 42 minutes | 10 hours 1 minute | 4 | -| **dev2** | 45 minutes | 45 minutes | 1 hour 16 minutes | 4 hours 50 minutes | 6 hours 1 minute | 15 hours 53 minutes | 17 | -| **dev3** | 26 minutes | 24 minutes | 1 hour 51 minutes | | 9 hours 33 minutes | 23 hours 16 minutes | 13 | -| **dev4** | 10 minutes | 12 minutes | 1 hour 9 minutes | 57 minutes | 1 hour 9 minutes | 9 hours 17 minutes | 13 | -| **dev5** | 7 minutes | 7 minutes | 4 hours 5 minutes | 3 hours 37 minutes | 13 hours 8 minutes | 27 hours 53 minutes | 15 | -| **total** | 15 minutes | 15 minutes | 1 hour 59 minutes | 3 hours 37 minutes | 7 hours 50 minutes | 23 hours 48 minutes | 62 | - - - -### Review time 11/2024 - -| users | 0-2h | 2-4h | 4-8h | 8-12h | 12-16h | 16-24h | 24+h | -| :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **dev1** | 3(75%) | 1(25%) | 0 | 0 | 0 | 0 | 0 | -| **dev2** | 13(76.5%) | 0 | 1(5.9%) | 1(5.9%) | 1(5.9%) | 0 | 1(5.9%) | -| **dev3** | 10(76.9%) | 1(7.7%) | 1(7.7%) | 1(7.7%) | 0 | 0 | 0 | -| **dev4** | 10(76.9%) | 1(7.7%) | 1(7.7%) | 1(7.7%) | 0 | 0 | 0 | -| **dev5** | 10(66.7%) | 1(6.7%) | 3(20%) | 1(6.7%) | 0 | 0 | 0 | -| **total** | 46(74.2%) | 4(6.5%) | 6(9.7%) | 4(6.5%) | 1(1.6%) | 0 | 1(1.6%) | - - - - - - -### Contribution stats 11/2024 -**Reviews conducted** - number of reviews conducted. 1 PR may have only single review. -**PR Size** - determined using the formula: `additions + deletions * 0.2`. Based on this calculation: 0-50: xs, 51-200: s, 201-400: m, 401-700: l, 701+: xl -**Total reverted PRs** - The number of reverted PRs based on the branch name pattern `/^revert-d+/`. This pattern is used for reverts made via GitHub. -| user | Total opened PRs | Total merged PRs | Total reverted PRs | PRs w/o review | PRs w/o approval | Additions / Deletions | PR size: xs/s/m/l/xl | -| :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **dev1** | 4 | 4 | 0 | 1 | 0 | +415/-89 | 1/3/0/0/0 | -| **dev2** | 17 | 17 | 0 | 0 | 0 | +3253/-2378 | 7/4/3/2/1 | -| **dev3** | 13 | 13 | 0 | 0 | 0 | +1713/-1742 | 4/6/1/2/0 | -| **dev4** | 14 | 13 | 0 | 1 | 1 | +1116/-1032 | 10/2/1/0/1 | -| **dev5** | 15 | 15 | 0 | 0 | 0 | +1048/-341 | 9/3/3/0/0 | -| **total** | 63 | 62 | 0 | 2 | 1 | +7545/-5582 | 31/18/8/4/2 | - - - -### Pull request quality 11/2024 -**Agreed** - discussions with at least 1 reaction :+1:. -**Disagreed** - discussions with at least 1 reaction :-1:. -| user | Total merged PRs | Changes requested received | Agreed / Disagreed / Total discussions received | Comments received | -| :------: | :------: | :------: | :------: | :------: | -| **dev1** | 4 | 1 | 0 / 0 / 4 | 8 | -| **dev2** | 17 | 7 | 0 / 0 / 23 | 36 | -| **dev3** | 13 | 5 | 0 / 0 / 19 | 24 | -| **dev4** | 13 | 1 | 0 / 0 / 7 | 9 | -| **dev5** | 15 | 6 | 0 / 0 / 14 | 23 | -| **total** | 62 | 20 | 0 / 0 / 67 | 100 | - - - - -### Code review engagement 11/2024 -**PR Size** - determined using the formula: `additions + deletions * 0.2`. Based on this calculation: 0-50: xs, 51-200: s, 201-400: m, 401-700: l, 701+: xl -**Changes requested / Comments / Approvals** - number of reviews conducted by user. For a single pull request, only one review of each status will be counted for a user. -**Agreed** - discussions with at least 1 reaction :+1:. -**Disagreed** - discussions with at least 1 reaction :-1:. -| user | Reviews conducted | Agreed / Disagreed / Total discussions conducted | Comments conducted | PR size: xs/s/m/l/xl | Changes requested / Commented / Approved | -| :------: | :------: | :------: | :------: | :------: | :------: | -| **dev1** | 19 | 0 / 0 / 39 | 64 | 6/7/3/3/0 | 12 / 3 / 18 | -| **dev2** | 19 | 0 / 0 / 12 | 17 | 11/5/2/0/1 | 5 / 1 / 19 | -| **dev3** | 12 | 0 / 0 / 2 | 3 | 9/2/1/0/0 | 0 / 1 / 12 | -| **dev4** | 18 | 0 / 0 / 11 | 13 | 8/6/2/1/1 | 4 / 0 / 18 | -| **dev5** | 2 | 0 / 0 / 0 | 0 | 2/0/0/0/0 | 0 / 0 / 2 | -| **total** | 62 | 0 / 0 / 67 | 100 | 31/18/8/4/2 | 20 / 9 / 62 | - - -### Review Response Time(75th percentile) 11/2024 -**Time from re-request to response** - time from a review re-request to the response. Multiple re-requests and responses can occur in a single pull request -| user | Review requests conducted | Reviews conducted | Time from opening to response | Time from initial request to response | Time from re-request to response | -| :------: | :------: | :------: | :------: | :------: | :------: | -| **dev1** | 58 | 19 | 2 hours 26 minutes | 1 hour 29 minutes | 3 hours 46 minutes | -| **dev2** | 45 | 19 | 3 hours 29 minutes | 3 hours 25 minutes | 3 hours 7 minutes | -| **dev3** | 49 | 12 | 1 hour 40 minutes | 1 hour 36 minutes | | -| **dev4** | 49 | 18 | 1 hour 6 minutes | 44 minutes | | -| **dev5** | 47 | 2 | 1 hour 25 minutes | 1 hour 20 minutes | | -| **total** | 253 | 62 | 3 hours 13 minutes | 1 hour 49 minutes | 6 hours 55 minutes | - - - - - - -### Pull requests timeline(75th percentile) 10/2024 -**Time to review** - time from PR creation to first review. -**Time to approve** - time from PR creation to first approval without requested changes. -**Time to merge** - time from PR creation to merge. -| user | Time in draft | Time to review request | Time to review | Time to Review After Re-request | Time to approve | Time to merge | Total merged PRs | -| :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **dev1** | 7 minutes | 7 minutes | 4 hours 15 minutes | | 4 hours 56 minutes | 23 hours 34 minutes | 13 | -| **dev2** | 10 minutes | 10 minutes | 6 hours 49 minutes | | 7 hours 28 minutes | 16 hours 20 minutes | 20 | -| **dev3** | 24 minutes | 24 minutes | 4 hours 57 minutes | | 13 hours 49 minutes | 22 hours 6 minutes | 14 | -| **dev4** | 11 minutes | 11 minutes | 3 hours 8 minutes | 2 hours 4 minutes | 3 hours 32 minutes | 18 hours 42 minutes | 18 | -| **dev5** | 7 minutes | 8 minutes | 6 hours 33 minutes | 9 hours 22 minutes | 10 hours 13 minutes | 30 hours 43 minutes | 22 | -| **total** | 10 minutes | 10 minutes | 5 hours 21 minutes | 6 hours 53 minutes | 8 hours 3 minutes | 21 hours 57 minutes | 88 | - - - -### Review time 10/2024 - -| users | 0-2h | 2-4h | 4-8h | 8-12h | 12-16h | 16-24h | 24+h | -| :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **dev1** | 6(46.2%) | 3(23.1%) | 4(30.8%) | 0 | 0 | 0 | 0 | -| **dev2** | 11(55%) | 1(5%) | 5(25%) | 1(5%) | 0 | 1(5%) | 1(5%) | -| **dev3** | 5(35.7%) | 3(21.4%) | 4(28.6%) | 1(7.1%) | 0 | 1(7.1%) | 0 | -| **dev4** | 11(61.1%) | 3(16.7%) | 2(11.1%) | 0 | 1(5.6%) | 1(5.6%) | 0 | -| **dev5** | 9(37.5%) | 4(16.7%) | 7(29.2%) | 4(16.7%) | 0 | 0 | 0 | -| **total** | 43(47.8%) | 14(15.6%) | 22(24.4%) | 6(6.7%) | 1(1.1%) | 3(3.3%) | 1(1.1%) | - - - - - - -### Contribution stats 10/2024 -**Reviews conducted** - number of reviews conducted. 1 PR may have only single review. -**PR Size** - determined using the formula: `additions + deletions * 0.2`. Based on this calculation: 0-50: xs, 51-200: s, 201-400: m, 401-700: l, 701+: xl -**Total reverted PRs** - The number of reverted PRs based on the branch name pattern `/^revert-d+/`. This pattern is used for reverts made via GitHub. -| user | Total opened PRs | Total merged PRs | Total reverted PRs | PRs w/o review | PRs w/o approval | Additions / Deletions | PR size: xs/s/m/l/xl | -| :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **dev1** | 13 | 13 | 0 | 0 | 0 | +586/-566 | 9/2/2/0/0 | -| **dev2** | 21 | 20 | 1 | 2 | 2 | +2027/-800 | 11/5/4/0/1 | -| **dev3** | 14 | 14 | 0 | 0 | 0 | +795/-2875 | 6/4/4/0/0 | -| **dev4** | 18 | 18 | 0 | 0 | 0 | +1542/-1495 | 9/6/2/1/0 | -| **dev5** | 25 | 22 | 1 | 1 | 2 | +4438/-5324 | 14/5/1/4/1 | -| **total** | 92 | 88 | 2 | 3 | 4 | +9421/-11069 | 50/22/13/5/2 | - - - -### Pull request quality 10/2024 -**Agreed** - discussions with at least 1 reaction :+1:. -**Disagreed** - discussions with at least 1 reaction :-1:. -| user | Total merged PRs | Changes requested received | Agreed / Disagreed / Total discussions received | Comments received | -| :------: | :------: | :------: | :------: | :------: | -| **dev1** | 13 | 4 | 0 / 0 / 4 | 9 | -| **dev2** | 20 | 5 | 0 / 0 / 12 | 18 | -| **dev3** | 14 | 7 | 0 / 0 / 25 | 29 | -| **dev4** | 18 | 3 | 0 / 0 / 6 | 8 | -| **dev5** | 22 | 5 | 0 / 0 / 16 | 21 | -| **total** | 88 | 24 | 0 / 0 / 63 | 85 | - - - - -### Code review engagement 10/2024 -**PR Size** - determined using the formula: `additions + deletions * 0.2`. Based on this calculation: 0-50: xs, 51-200: s, 201-400: m, 401-700: l, 701+: xl -**Changes requested / Comments / Approvals** - number of reviews conducted by user. For a single pull request, only one review of each status will be counted for a user. -**Agreed** - discussions with at least 1 reaction :+1:. -**Disagreed** - discussions with at least 1 reaction :-1:. -| user | Reviews conducted | Agreed / Disagreed / Total discussions conducted | Comments conducted | PR size: xs/s/m/l/xl | Changes requested / Commented / Approved | -| :------: | :------: | :------: | :------: | :------: | :------: | -| **dev1** | 30 | 0 / 0 / 42 | 55 | 13/8/7/1/1 | 15 / 7 / 28 | -| **dev2** | 27 | 0 / 0 / 10 | 18 | 14/9/2/2/0 | 7 / 3 / 27 | -| **dev3** | 18 | 0 / 0 / 1 | 1 | 14/2/1/0/1 | 0 / 1 / 17 | -| **dev4** | 15 | 0 / 0 / 7 | 8 | 6/4/3/1/1 | 3 / 0 / 15 | -| **dev5** | 11 | 0 / 0 / 3 | 3 | 8/2/1/0/0 | 0 / 1 / 10 | -| **total** | 90 | 0 / 0 / 63 | 85 | 50/22/13/5/2 | 24 / 12 / 89 | - - -### Review Response Time(75th percentile) 10/2024 -**Time from re-request to response** - time from a review re-request to the response. Multiple re-requests and responses can occur in a single pull request -| user | Review requests conducted | Reviews conducted | Time from opening to response | Time from initial request to response | Time from re-request to response | -| :------: | :------: | :------: | :------: | :------: | :------: | -| **dev1** | 78 | 30 | 6 hours 5 minutes | 6 hours 18 minutes | 5 hours 48 minutes | -| **dev2** | 67 | 27 | 5 hours 41 minutes | 6 hours 29 minutes | 3 hours 4 minutes | -| **dev3** | 76 | 18 | 4 hours 14 minutes | 4 hours 11 minutes | | -| **dev4** | 73 | 15 | 3 hours 1 minute | 1 hour 53 minutes | | -| **dev5** | 66 | 11 | 5 hours 50 minutes | 5 hours 59 minutes | | -| **total** | 360 | 90 | 5 hours 22 minutes | 5 hours 36 minutes | 6 hours 53 minutes | - - - - - - -### Pull requests timeline(75th percentile) total -**Time to review** - time from PR creation to first review. -**Time to approve** - time from PR creation to first approval without requested changes. -**Time to merge** - time from PR creation to merge. -| user | Time in draft | Time to review request | Time to review | Time to Review After Re-request | Time to approve | Time to merge | Total merged PRs | -| :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **dev1** | 6 minutes | 6 minutes | 3 hours 35 minutes | | 4 hours 15 minutes | 17 hours 50 minutes | 17 | -| **dev2** | 17 minutes | 17 minutes | 6 hours 45 minutes | 7 hours 10 minutes | 7 hours 18 minutes | 16 hours 36 minutes | 37 | -| **dev3** | 26 minutes | 26 minutes | 4 hours 21 minutes | | 10 hours 50 minutes | 23 hours 24 minutes | 27 | -| **dev4** | 13 minutes | 13 minutes | 2 hours 18 minutes | 1 hour 54 minutes | 2 hours 58 minutes | 18 hours 26 minutes | 31 | -| **dev5** | 8 minutes | 8 minutes | 6 hours 15 minutes | 7 hours 4 minutes | 10 hours 35 minutes | 30 hours 21 minutes | 37 | -| **total** | 12 minutes | 12 minutes | 4 hours 33 minutes | 6 hours 33 minutes | 8 hours 12 minutes | 22 hours 46 minutes | 150 | - - - -### Review time total - -| users | 0-2h | 2-4h | 4-8h | 8-12h | 12-16h | 16-24h | 24+h | -| :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **dev1** | 9(52.9%) | 4(23.5%) | 4(23.5%) | 0 | 0 | 0 | 0 | -| **dev2** | 24(64.9%) | 1(2.7%) | 6(16.2%) | 2(5.4%) | 1(2.7%) | 1(2.7%) | 2(5.4%) | -| **dev3** | 15(55.6%) | 4(14.8%) | 5(18.5%) | 2(7.4%) | 0 | 1(3.7%) | 0 | -| **dev4** | 21(67.7%) | 4(12.9%) | 3(9.7%) | 1(3.2%) | 1(3.2%) | 1(3.2%) | 0 | -| **dev5** | 19(48.7%) | 5(12.8%) | 10(25.6%) | 5(12.8%) | 0 | 0 | 0 | -| **total** | 89(58.6%) | 18(11.8%) | 28(18.4%) | 10(6.6%) | 2(1.3%) | 3(2%) | 2(1.3%) | - - - - - - -### Contribution stats total -**Reviews conducted** - number of reviews conducted. 1 PR may have only single review. -**PR Size** - determined using the formula: `additions + deletions * 0.2`. Based on this calculation: 0-50: xs, 51-200: s, 201-400: m, 401-700: l, 701+: xl -**Total reverted PRs** - The number of reverted PRs based on the branch name pattern `/^revert-d+/`. This pattern is used for reverts made via GitHub. -| user | Total opened PRs | Total merged PRs | Total reverted PRs | PRs w/o review | PRs w/o approval | Additions / Deletions | PR size: xs/s/m/l/xl | -| :------: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| **dev1** | 17 | 17 | 0 | 1 | 0 | +1001/-655 | 10/5/2/0/0 | -| **dev2** | 38 | 37 | 1 | 2 | 2 | +5280/-3178 | 18/9/7/2/2 | -| **dev3** | 27 | 27 | 0 | 0 | 0 | +2508/-4617 | 10/10/5/2/0 | -| **dev4** | 32 | 31 | 0 | 1 | 1 | +2658/-2527 | 19/8/3/1/1 | -| **dev5** | 40 | 37 | 1 | 1 | 2 | +5486/-5665 | 23/8/4/4/1 | -| **total** | 155 | 150 | 2 | 5 | 5 | +16966/-16651 | 81/40/21/9/4 | - - - -### Pull request quality total -**Agreed** - discussions with at least 1 reaction :+1:. -**Disagreed** - discussions with at least 1 reaction :-1:. -| user | Total merged PRs | Changes requested received | Agreed / Disagreed / Total discussions received | Comments received | -| :------: | :------: | :------: | :------: | :------: | -| **dev1** | 17 | 5 | 0 / 0 / 8 | 17 | -| **dev2** | 37 | 12 | 0 / 0 / 35 | 54 | -| **dev3** | 27 | 12 | 0 / 0 / 44 | 53 | -| **dev4** | 31 | 4 | 0 / 0 / 13 | 17 | -| **dev5** | 37 | 11 | 0 / 0 / 30 | 44 | -| **total** | 150 | 44 | 0 / 0 / 130 | 185 | - - - - -### Code review engagement total -**PR Size** - determined using the formula: `additions + deletions * 0.2`. Based on this calculation: 0-50: xs, 51-200: s, 201-400: m, 401-700: l, 701+: xl -**Changes requested / Comments / Approvals** - number of reviews conducted by user. For a single pull request, only one review of each status will be counted for a user. -**Agreed** - discussions with at least 1 reaction :+1:. -**Disagreed** - discussions with at least 1 reaction :-1:. -| user | Reviews conducted | Agreed / Disagreed / Total discussions conducted | Comments conducted | PR size: xs/s/m/l/xl | Changes requested / Commented / Approved | -| :------: | :------: | :------: | :------: | :------: | :------: | -| **dev1** | 49 | 0 / 0 / 81 | 119 | 19/15/10/4/1 | 27 / 10 / 46 | -| **dev2** | 46 | 0 / 0 / 22 | 35 | 25/14/4/2/1 | 12 / 4 / 46 | -| **dev3** | 30 | 0 / 0 / 3 | 4 | 23/4/2/0/1 | 0 / 2 / 29 | -| **dev4** | 33 | 0 / 0 / 18 | 21 | 14/10/5/2/2 | 7 / 0 / 33 | -| **dev5** | 13 | 0 / 0 / 3 | 3 | 10/2/1/0/0 | 0 / 1 / 12 | -| **total** | 152 | 0 / 0 / 130 | 185 | 81/40/21/9/4 | 44 / 21 / 151 | - - -### Review Response Time(75th percentile) total -**Time from re-request to response** - time from a review re-request to the response. Multiple re-requests and responses can occur in a single pull request -| user | Review requests conducted | Reviews conducted | Time from opening to response | Time from initial request to response | Time from re-request to response | -| :------: | :------: | :------: | :------: | :------: | :------: | -| **dev1** | 136 | 49 | 5 hours 21 minutes | 4 hours | 6 hours 21 minutes | -| **dev2** | 112 | 46 | 4 hours 24 minutes | 3 hours 55 minutes | 3 hours 21 minutes | -| **dev3** | 125 | 30 | 3 hours 50 minutes | 3 hours 17 minutes | | -| **dev4** | 122 | 33 | 2 hours 11 minutes | 55 minutes | 10 hours 46 minutes | -| **dev5** | 113 | 13 | 5 hours 31 minutes | 5 hours 29 minutes | | -| **total** | 613 | 152 | 5 hours | 3 hours 52 minutes | 7 hours 4 minutes | - - - -`#FFA500`Time From Initial Request To Response, `#EE82EE`Time From Opening To Response, `#0000CD`Time From Rerequest To Response, `#696969`Time In Draft, `#B22222`Time To Review Request, `#FFD700`Time To Review, `#40E0D0`Time To Review After Rerequest, `#7FFF00`Time To Approve, `#8A2BE2`Time To Merge -```mermaid ---- -config: - xyChart: - width: 900 - height: 600 - themeVariables: - xyChart: - titleColor: "black" - plotColorPalette: "orange, violet, mediumblue, dimgrey, firebrick, gold, turquoise, chartreuse, blueviolet" ---- -xychart-beta - title "Pull request's retrospective timeline(75th percentile) dev1" - x-axis ["10/24", "11/24"] - y-axis "hours" 0 --> 24 - line [6.3, 1.48] -line [6.08, 2.43] -line [5.8, 3.77] -line [0.12, 0.07] -line [0.12, 0.07] -line [4.25, 1.67] -line [0, 0] -line [4.93, 1.7] -line [23.57, 10.02] -``` - -`#8A2BE2`Discussions Conducted, `#00008B`Discussions Received, `#DC143C`Changes Requested Conducted, `#B22222`Changes Requested Received, `#FFD700`Reviews Conducted, `#7FFF00`Merged PRs -```mermaid ---- -config: - xyChart: - width: 900 - height: 600 - themeVariables: - xyChart: - titleColor: "black" - plotColorPalette: "blueviolet, darkblue, crimson, firebrick, gold, chartreuse" ---- -xychart-beta - title "Pull request's retrospective contribution dev1" - x-axis ["10/24", "11/24"] - y-axis "amount" 0 --> 42 - line [42, 39] -line [4, 4] -line [15, 12] -line [4, 1] -line [30, 19] -line [13, 4] -``` - -`#FFA500`Time From Initial Request To Response, `#EE82EE`Time From Opening To Response, `#0000CD`Time From Rerequest To Response, `#696969`Time In Draft, `#B22222`Time To Review Request, `#FFD700`Time To Review, `#40E0D0`Time To Review After Rerequest, `#7FFF00`Time To Approve, `#8A2BE2`Time To Merge -```mermaid ---- -config: - xyChart: - width: 900 - height: 600 - themeVariables: - xyChart: - titleColor: "black" - plotColorPalette: "orange, violet, mediumblue, dimgrey, firebrick, gold, turquoise, chartreuse, blueviolet" ---- -xychart-beta - title "Pull request's retrospective timeline(75th percentile) dev2" - x-axis ["10/24", "11/24"] - y-axis "hours" 0 --> 17 - line [6.48, 3.42] -line [5.68, 3.48] -line [3.07, 3.12] -line [0.17, 0.75] -line [0.17, 0.75] -line [6.82, 1.27] -line [0, 4.83] -line [7.47, 6.02] -line [16.33, 15.88] -``` - -`#8A2BE2`Discussions Conducted, `#00008B`Discussions Received, `#DC143C`Changes Requested Conducted, `#B22222`Changes Requested Received, `#FFD700`Reviews Conducted, `#7FFF00`Merged PRs -```mermaid ---- -config: - xyChart: - width: 900 - height: 600 - themeVariables: - xyChart: - titleColor: "black" - plotColorPalette: "blueviolet, darkblue, crimson, firebrick, gold, chartreuse" ---- -xychart-beta - title "Pull request's retrospective contribution dev2" - x-axis ["10/24", "11/24"] - y-axis "amount" 0 --> 27 - line [10, 12] -line [12, 23] -line [7, 5] -line [5, 7] -line [27, 19] -line [20, 17] -``` - -`#FFA500`Time From Initial Request To Response, `#EE82EE`Time From Opening To Response, `#0000CD`Time From Rerequest To Response, `#696969`Time In Draft, `#B22222`Time To Review Request, `#FFD700`Time To Review, `#40E0D0`Time To Review After Rerequest, `#7FFF00`Time To Approve, `#8A2BE2`Time To Merge -```mermaid ---- -config: - xyChart: - width: 900 - height: 600 - themeVariables: - xyChart: - titleColor: "black" - plotColorPalette: "orange, violet, mediumblue, dimgrey, firebrick, gold, turquoise, chartreuse, blueviolet" ---- -xychart-beta - title "Pull request's retrospective timeline(75th percentile) dev3" - x-axis ["10/24", "11/24"] - y-axis "hours" 0 --> 24 - line [4.18, 1.6] -line [4.23, 1.67] -line [0, 0] -line [0.4, 0.43] -line [0.4, 0.4] -line [4.95, 1.85] -line [0, 0] -line [13.82, 9.55] -line [22.1, 23.27] -``` - -`#8A2BE2`Discussions Conducted, `#00008B`Discussions Received, `#DC143C`Changes Requested Conducted, `#B22222`Changes Requested Received, `#FFD700`Reviews Conducted, `#7FFF00`Merged PRs -```mermaid ---- -config: - xyChart: - width: 900 - height: 600 - themeVariables: - xyChart: - titleColor: "black" - plotColorPalette: "blueviolet, darkblue, crimson, firebrick, gold, chartreuse" ---- -xychart-beta - title "Pull request's retrospective contribution dev3" - x-axis ["10/24", "11/24"] - y-axis "amount" 0 --> 25 - line [1, 2] -line [25, 19] -line [0, 0] -line [7, 5] -line [18, 12] -line [14, 13] -``` - -`#FFA500`Time From Initial Request To Response, `#EE82EE`Time From Opening To Response, `#0000CD`Time From Rerequest To Response, `#696969`Time In Draft, `#B22222`Time To Review Request, `#FFD700`Time To Review, `#40E0D0`Time To Review After Rerequest, `#7FFF00`Time To Approve, `#8A2BE2`Time To Merge -```mermaid ---- -config: - xyChart: - width: 900 - height: 600 - themeVariables: - xyChart: - titleColor: "black" - plotColorPalette: "orange, violet, mediumblue, dimgrey, firebrick, gold, turquoise, chartreuse, blueviolet" ---- -xychart-beta - title "Pull request's retrospective timeline(75th percentile) dev4" - x-axis ["10/24", "11/24"] - y-axis "hours" 0 --> 19 - line [1.88, 0.73] -line [3.02, 1.1] -line [0, 0] -line [0.18, 0.17] -line [0.18, 0.2] -line [3.13, 1.15] -line [2.07, 0.95] -line [3.53, 1.15] -line [18.7, 9.28] -``` - -`#8A2BE2`Discussions Conducted, `#00008B`Discussions Received, `#DC143C`Changes Requested Conducted, `#B22222`Changes Requested Received, `#FFD700`Reviews Conducted, `#7FFF00`Merged PRs -```mermaid ---- -config: - xyChart: - width: 900 - height: 600 - themeVariables: - xyChart: - titleColor: "black" - plotColorPalette: "blueviolet, darkblue, crimson, firebrick, gold, chartreuse" ---- -xychart-beta - title "Pull request's retrospective contribution dev4" - x-axis ["10/24", "11/24"] - y-axis "amount" 0 --> 18 - line [7, 11] -line [6, 7] -line [3, 4] -line [3, 1] -line [15, 18] -line [18, 13] -``` - -`#FFA500`Time From Initial Request To Response, `#EE82EE`Time From Opening To Response, `#0000CD`Time From Rerequest To Response, `#696969`Time In Draft, `#B22222`Time To Review Request, `#FFD700`Time To Review, `#40E0D0`Time To Review After Rerequest, `#7FFF00`Time To Approve, `#8A2BE2`Time To Merge -```mermaid ---- -config: - xyChart: - width: 900 - height: 600 - themeVariables: - xyChart: - titleColor: "black" - plotColorPalette: "orange, violet, mediumblue, dimgrey, firebrick, gold, turquoise, chartreuse, blueviolet" ---- -xychart-beta - title "Pull request's retrospective timeline(75th percentile) dev5" - x-axis ["10/24", "11/24"] - y-axis "hours" 0 --> 31 - line [5.98, 1.33] -line [5.83, 1.42] -line [0, 0] -line [0.12, 0.12] -line [0.13, 0.12] -line [6.55, 4.08] -line [9.37, 3.62] -line [10.22, 13.13] -line [30.72, 27.88] -``` - -`#8A2BE2`Discussions Conducted, `#00008B`Discussions Received, `#DC143C`Changes Requested Conducted, `#B22222`Changes Requested Received, `#FFD700`Reviews Conducted, `#7FFF00`Merged PRs -```mermaid ---- -config: - xyChart: - width: 900 - height: 600 - themeVariables: - xyChart: - titleColor: "black" - plotColorPalette: "blueviolet, darkblue, crimson, firebrick, gold, chartreuse" ---- -xychart-beta - title "Pull request's retrospective contribution dev5" - x-axis ["10/24", "11/24"] - y-axis "amount" 0 --> 22 - line [3, 0] -line [16, 14] -line [0, 0] -line [5, 6] -line [11, 2] -line [22, 15] -``` - -`#FFA500`Time From Initial Request To Response, `#EE82EE`Time From Opening To Response, `#0000CD`Time From Rerequest To Response, `#696969`Time In Draft, `#B22222`Time To Review Request, `#FFD700`Time To Review, `#40E0D0`Time To Review After Rerequest, `#7FFF00`Time To Approve, `#8A2BE2`Time To Merge -```mermaid ---- -config: - xyChart: - width: 900 - height: 600 - themeVariables: - xyChart: - titleColor: "black" - plotColorPalette: "orange, violet, mediumblue, dimgrey, firebrick, gold, turquoise, chartreuse, blueviolet" ---- -xychart-beta - title "Pull request's retrospective timeline(75th percentile) total" - x-axis ["10/24", "11/24"] - y-axis "hours" 0 --> 24 - line [5.6, 1.82] -line [5.37, 3.22] -line [6.88, 6.92] -line [0.17, 0.25] -line [0.17, 0.25] -line [5.35, 1.98] -line [6.88, 3.62] -line [8.05, 7.83] -line [21.95, 23.8] -``` - -`#8A2BE2`Discussions Conducted, `#00008B`Discussions Received, `#DC143C`Changes Requested Conducted, `#B22222`Changes Requested Received, `#FFD700`Reviews Conducted, `#7FFF00`Merged PRs -```mermaid ---- -config: - xyChart: - width: 900 - height: 600 - themeVariables: - xyChart: - titleColor: "black" - plotColorPalette: "blueviolet, darkblue, crimson, firebrick, gold, chartreuse" ---- -xychart-beta - title "Pull request's retrospective contribution total" - x-axis ["10/24", "11/24"] - y-axis "amount" 0 --> 90 - line [63, 67] -line [63, 67] -line [24, 20] -line [24, 20] -line [90, 62] -line [88, 62] -``` \ No newline at end of file diff --git a/package.json b/package.json index 8e81710..5ee6ba7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "pull-request-analytics-action", - "version": "4.9.0", + "version": "4.10.0", "description": "Generates detailed PR analytics reports within GitHub, focusing on review efficiency and team performance.", "main": "build/index.js", "scripts": { diff --git a/src/analytics/sendActionError.ts b/src/analytics/sendActionError.ts index 31caac4..3ab500d 100644 --- a/src/analytics/sendActionError.ts +++ b/src/analytics/sendActionError.ts @@ -46,6 +46,7 @@ export const sendActionError = (error: Error) => { SHOW_ACTIVITY_TIME_GRAPHS: getValueAsIs("SHOW_ACTIVITY_TIME_GRAPHS"), FILTER_HEAD_BRANCHES: !!getValueAsIs("FILTER_HEAD_BRANCHES"), FILTER_BASE_BRANCHES: !!getValueAsIs("FILTER_BASE_BRANCHES"), + DISCUSSION_TYPE_PATTERN: !!getValueAsIs("DISCUSSION_TYPE_PATTERN"), }); } else { mixpanel.track("Anonymous action error", { distinct_id: "anonymous" }); diff --git a/src/analytics/sendActionRun.ts b/src/analytics/sendActionRun.ts index 79dd58b..c56ba52 100644 --- a/src/analytics/sendActionRun.ts +++ b/src/analytics/sendActionRun.ts @@ -49,6 +49,7 @@ export const sendActionRun = () => { SHOW_ACTIVITY_TIME_GRAPHS: getValueAsIs("SHOW_ACTIVITY_TIME_GRAPHS"), FILTER_HEAD_BRANCHES: !!getValueAsIs("FILTER_HEAD_BRANCHES"), FILTER_BASE_BRANCHES: !!getValueAsIs("FILTER_BASE_BRANCHES"), + DISCUSSION_TYPE_PATTERN: !!getValueAsIs("DISCUSSION_TYPE_PATTERN"), }); } else { mixpanel.track("Anomymous action run", { distinct_id: "anonymous" }); diff --git a/src/converters/utils/getDiscussionType.spec.ts b/src/converters/utils/getDiscussionType.spec.ts index 9896d48..2dfff94 100644 --- a/src/converters/utils/getDiscussionType.spec.ts +++ b/src/converters/utils/getDiscussionType.spec.ts @@ -2,20 +2,29 @@ import { getDiscussionType } from "./getDiscussionType"; describe("check getDiscussionType", () => { it("check text without value ", () => { - expect(getDiscussionType("text text")).toEqual([]); + expect(getDiscussionType("text text", "")).toEqual([]); }); it("check value in text", () => { - expect(getDiscussionType("text [[value1]] text")).toEqual(["value1"]); + expect(getDiscussionType("text [[value1]] text", "\\[\\[(.*?)\\]\\]")).toEqual([ + "[[value1]]", + ]); }); it("check multiple values in text", () => { - expect(getDiscussionType("text [[value1]] [[value2]] text")).toEqual([ - "value1", - "value2", - ]); + expect( + getDiscussionType("text [[value1]] [[value2]] text", "\\[\\[(.*?)\\]\\]") + ).toEqual(["[[value1]]", "[[value2]]"]); }); it("check value with different symbols", () => { expect( - getDiscussionType("text [[value-1]] [[value:2]] [[value.3]]text") - ).toEqual(["value-1", "value:2", "value.3"]); + getDiscussionType("text [[value-1]] [[value:2]] [[value.3]]text", "\\[\\[(.*?)\\]\\]") + ).toEqual(["[[value-1]]", "[[value:2]]", "[[value.3]]"]); }); + it( + "check value with different pattern", + () => { + expect( + getDiscussionType("text @cursor text @claude", "(^|[^A-Za-z0-9-])@([A-Za-z0-9](?:[A-Za-z0-9-]{0,37}[A-Za-z0-9])?)") + ).toEqual([" @cursor", " @claude"]); + } + ); }); diff --git a/src/converters/utils/getDiscussionType.ts b/src/converters/utils/getDiscussionType.ts index 3f77c1e..4c680f4 100644 --- a/src/converters/utils/getDiscussionType.ts +++ b/src/converters/utils/getDiscussionType.ts @@ -1,9 +1,5 @@ -export const getDiscussionType = (text: string) => { - const regex = /\[\[(.*?)\]\]/g; - return ( - text - .match(regex) - ?.map((el) => el.replace(/[\[\]]/g, "")) - .filter((el) => el) || [] - ); +export const getDiscussionType = (text: string, pattern: string) => { + if (!pattern) return []; + const regex = new RegExp(pattern, "g"); + return text.match(regex)?.filter((el) => el) || []; }; diff --git a/src/converters/utils/prepareDiscussions.ts b/src/converters/utils/prepareDiscussions.ts index 3a598f5..119fde6 100644 --- a/src/converters/utils/prepareDiscussions.ts +++ b/src/converters/utils/prepareDiscussions.ts @@ -6,6 +6,7 @@ import { invalidUserLogin } from "../constants"; import { Collection } from "../types"; import { getDiscussionType } from "./getDiscussionType"; import { checkUserInclusive } from "./calculations"; +import { getValueAsIs } from "../../common/utils"; export const prepareDiscussions = ( comments: Awaited>["comments"], @@ -33,7 +34,10 @@ export const prepareDiscussions = ( ["total", dateKey].forEach((key) => { discussions?.forEach((discussion) => { const userLogin = discussion.user?.login || invalidUserLogin; - getDiscussionType(discussion.body).forEach((type) => { + getDiscussionType( + discussion.body, + getValueAsIs("DISCUSSION_TYPE_PATTERN") + ).forEach((type) => { [userLogin, ...(teams[userLogin] || []), "total"].forEach((userKey) => { if (checkUserInclusive(userLogin, teams)) { set(collection, [userKey, key, "discussionsTypes", type], { diff --git a/src/view/utils/createConfigParamsCode.ts b/src/view/utils/createConfigParamsCode.ts index 19de44b..4735fbe 100644 --- a/src/view/utils/createConfigParamsCode.ts +++ b/src/view/utils/createConfigParamsCode.ts @@ -42,6 +42,7 @@ ${[ "EXCLUDE_USERS", "EXECUTION_OUTCOME", "ISSUE_NUMBER", + "DISCUSSION_TYPE_PATTERN", ] .filter((name) => getValueAsIs(name)) .map((name) => `${name}: ${getValueAsIs(name)}`) diff --git a/src/view/utils/createDiscussionsPieChart.ts b/src/view/utils/createDiscussionsPieChart.ts index 2da6926..b954840 100644 --- a/src/view/utils/createDiscussionsPieChart.ts +++ b/src/view/utils/createDiscussionsPieChart.ts @@ -75,6 +75,6 @@ export const createDiscussionsPieChart = ( return createTable({ title: `Discussion's types ${date}`, description: "", - table: { headers: ["users", ...headers], rows: userRows }, + table: { headers: ["users", ...headers.map((header) => `\`${header}\``)], rows: userRows }, }); };