From 89fb3aa56dd4836ed5be431ac78ec04fd751fdf7 Mon Sep 17 00:00:00 2001 From: gitcommitshow Date: Fri, 15 Dec 2023 17:37:33 +0530 Subject: [PATCH 1/4] feat: github pr search --- ENV_SAMPLE | 4 +- contributors.js => github.js | 53 ++++++++++++++++++- index.js | 2 +- package.json | 2 +- test/fixtures/pullRequests.fixture.js | 4 ++ test/{contributors.test.js => github.test.js} | 40 ++++++++++++-- test/index.test.js | 2 +- 7 files changed, 97 insertions(+), 10 deletions(-) rename contributors.js => github.js (80%) create mode 100644 test/fixtures/pullRequests.fixture.js rename test/{contributors.test.js => github.test.js} (51%) diff --git a/ENV_SAMPLE b/ENV_SAMPLE index cd68b76..df41ecb 100644 --- a/ENV_SAMPLE +++ b/ENV_SAMPLE @@ -1,2 +1,4 @@ REPO_OWNER="Git-Commit-Show" -GITHUB_PERSONAL_TOKEN="ghp_adsfdsf32sdfasdfcdcsdfsdf23sfasdf1" \ No newline at end of file +GITHUB_PERSONAL_TOKEN="ghp_adsfdsf32sdfasdfcdcsdfsdf23sfasdf1" +APERTURE_SERVICE_ADDRESS="my.app.fluxninja.com:443" +APERTURE_API_KEY="4dsfs323db7dsfsde310ca6dsdf12sfr4" \ No newline at end of file diff --git a/contributors.js b/github.js similarity index 80% rename from contributors.js rename to github.js index f93bada..5caa8be 100644 --- a/contributors.js +++ b/github.js @@ -1,5 +1,5 @@ /** - * @file Functions to analyze and archive meaningful github contributors data + * @file Functions to analyze and archive meaningful github data such as contributors * @example To archive contributors leaderboard data in csv file, run `node contributors.js` */ @@ -210,4 +210,55 @@ export async function archiveContributorsLeaderboard(owner=REPO_OWNER, options) writeContributorLeaderboardToFile(contributors); return ghHandles; +} + +/** + * Search pull requests + * @param {string} query + * @param {Object} options Additional options e.g. { pageNo: 1 } + */ +export async function searchPullRequests(query, options) { + let pageNo = (options && options.pageNo) ? options.pageNo : 1; + if(options && options.GITHUB_PERSONAL_TOKEN){ + GITHUB_REQUEST_OPTIONS.headers["Authorization"] = "token "+options.GITHUB_PERSONAL_TOKEN; + } + let queryString = encodeURIComponent(''+query+'type:pr') + let url = `https://api.github.com/search/issues?q=${queryString}&per_page=100&page=${pageNo}&sort=${options.sort || 'created'}`; + const { res, data } = await makeRequestWithRateLimit('GET', url, Object.assign({},GITHUB_REQUEST_OPTIONS)); + console.log("PR search request finished"); + console.log('HTTP status: ', res.statusCode); + // console.log(data) + let searchResultObject = JSON.parse(data); + return searchResultObject; +} + +/** + * Get all search results, not just one page + * @param {string} query + * @param {Object} options + * @param {Object} options.maxResults limit maximum results + */ +export async function recursiveSearchPullRequests(query, options){ + let prList = []; + let pageNo = 1; + let maxResults = options.maxResults || 10000; + let searchResultObject = await searchPullRequests(query, Object.assign({ pageNo: pageNo }, options)); + // Iterate over results if there are more results expected by the user + if(!searchResultObject || !searchResultObject.items || !searchResultObject.items.length<1 || maxResults < 100){ + return prList; + } + prList.push(searchResultObject.items); + let incomplete_results = searchResultObject.incomplete_results; + while(prList.length < searchResultObject.total_count && !incomplete_results){ + pageNo++; + try { + let nextPageSearchResultObject = await searchPullRequests(query, { pageNo: pageNo } ); + prList.push(...nextPageSearchResultObject.items); + incomplete_results = nextPageSearchResultObject.incomplete_results; + } catch (err) { + console.log("Some issue in recursive search for pull requests") + } + } + console.log("Found "+prList.length +" PRs"+" for "+query); + return prList; } \ No newline at end of file diff --git a/index.js b/index.js index 610cf09..27a166f 100644 --- a/index.js +++ b/index.js @@ -1,4 +1,4 @@ -import * as contributorsLib from './contributors.js'; +import * as contributorsLib from './github.js'; /** * Bundling all APIs together diff --git a/package.json b/package.json index 99731ff..3ea0c31 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "open-community-kit", "version": "1.2.1", "description": "Tools and stats for open-source communities", - "main": "contributors.js", + "main": "index.js", "type": "module", "bin": { "ock": "cli.js", diff --git a/test/fixtures/pullRequests.fixture.js b/test/fixtures/pullRequests.fixture.js new file mode 100644 index 0000000..345ce80 --- /dev/null +++ b/test/fixtures/pullRequests.fixture.js @@ -0,0 +1,4 @@ +export const PR_SEARCH_QUERY = "gitcommitshow"; +export const VALID_SEARCH_RESULT_SAMPLE = { + +} \ No newline at end of file diff --git a/test/contributors.test.js b/test/github.test.js similarity index 51% rename from test/contributors.test.js rename to test/github.test.js index 75933af..c6f278f 100644 --- a/test/contributors.test.js +++ b/test/github.test.js @@ -1,16 +1,17 @@ import { expect, assert } from "chai"; -import * as contributorsLib from "../contributors.js"; +import * as githubApi from "../github.js"; import * as contributorsFixture from './fixtures/contributors.fixture.js'; +import * as pullRequestsFixture from './fixtures/pullRequests.fixture.js'; -describe('contibutors.js', function() { +describe('github.js', function() { /** GitHub contrbutors test --START-- */ describe.skip('#getAllRepos('+contributorsFixture.VALID_REPO_OWNER+');', async function() { it('should return the repos owned by '+contributorsFixture.VALID_REPO_OWNER, async function() { this.timeout(100000); - let repos = await contributorsLib.getAllRepos(contributorsFixture.VALID_REPO_OWNER); + let repos = await githubApi.getAllRepos(contributorsFixture.VALID_REPO_OWNER); assert.isNotNull(repos); expect(repos).to.be.an('array', 'Not an array') expect(repos.length).to.be.greaterThanOrEqual(contributorsFixture.REPO_COUNT_MIN); @@ -21,7 +22,7 @@ describe('contibutors.js', function() { describe.skip('#getRepoContributors('+contributorsFixture.VALID_REPO+');', async function() { it('should return the repo contribuors', async function() { this.timeout(100000); - let contributors = await contributorsLib.getRepoContributors(contributorsFixture.VALID_REPO) + let contributors = await githubApi.getRepoContributors(contributorsFixture.VALID_REPO) assert.isNotNull(contributors); expect(contributors).to.be.an('array', 'Not an array') expect(contributors.length).to.be.greaterThanOrEqual(contributorsFixture.REPO_CONTRIBUTOR_COUNT_MIN); @@ -32,7 +33,7 @@ describe('contibutors.js', function() { describe.skip('#getAllContributors('+contributorsFixture.VALID_REPO_OWNER+');', async function() { it('should return all contributors across different repositories of REPO_OWNER', async function() { this.timeout(100000); - let contributors = await contributorsLib.getAllContributors(contributorsFixture.VALID_REPO_OWNER); + let contributors = await githubApi.getAllContributors(pullRequestsFixture.QUERY); assert.isNotNull(contributors); expect(contributors).to.be.an('array', 'Not an array') expect(contributors.length).to.be.greaterThanOrEqual(contributorsFixture.ALL_REPO_CONTRIBUTOR_COUNT_MIN); @@ -40,4 +41,33 @@ describe('contibutors.js', function() { }) }) + // OCK PR search test + describe.skip('#OCK.github.searchPullRequests(query, options);', async function() { + it('should start the task of archiving contributors for REPO_OWNER', async function() { + this.timeout(100000); + let prSearchResults = await githubApi.searchPullRequests(pullRequestsFixture.PR_SEARCH_QUERY); + assert.isNotNull(prSearchResults, "No PR search results returned"); + expect(prSearchResults).to.be.an('object'); + expect(prSearchResults).to.have.all.keys('items', 'total_count', 'incomplete_results'); + expect(prSearchResults.items).to.be.an('array'); + expect(prSearchResults.items).to.have.lengthOf.at.least(1); + expect(prSearchResults.items[0]).to.include.all.keys('title', 'html_url', 'state', 'user', 'draft', 'repository_url', 'comments', 'comments_url', 'assignees', 'created_at', 'closed_at'); + }) + }) + + // OCK PR search test + describe('#OCK.github.searchPullRequests(query, options);', async function() { + it('should start the task of archiving contributors for REPO_OWNER', async function() { + this.timeout(100000); + let prResults = await githubApi.recursiveSearchPullRequests("test", { maxResults: 198}); + assert.isNotNull(prResults, "No PR search results returned"); + expect(prResults).to.be.an('array'); + expect(prResults).to.have.lengthOf.at.least(198); + expect(prResults).to.have.lengthOf.at.most(200); + expect(prResults[0]).to.include.all.keys('title', 'html_url', 'state', 'user', 'draft', 'repository_url', 'comments', 'comments_url', 'assignees', 'created_at', 'closed_at'); + }) + }) + + + }) \ No newline at end of file diff --git a/test/index.test.js b/test/index.test.js index 3c3427e..c17d4d8 100644 --- a/test/index.test.js +++ b/test/index.test.js @@ -9,7 +9,7 @@ describe('index.js', function() { /** GitHub contrbutors test --START-- */ // OCK contributor test - describe('#OCK.contributors.github.archive(REPO_OWNER, options);', async function() { + describe.skip('#OCK.contributors.github.archive(REPO_OWNER, options);', async function() { it('should start the task of archiving contributors for REPO_OWNER', async function() { this.timeout(100000); let contributorsHandlesArray = await OCK.contributors.github.archive(contributorsFixture.VALID_REPO_OWNER); From 601a80063e4992d54cab621e4fb57fa4ebe60200 Mon Sep 17 00:00:00 2001 From: gitcommitshow Date: Sat, 16 Dec 2023 01:36:31 +0530 Subject: [PATCH 2/4] feat: remaining pr search related functions and refactoring --- archive.js | 61 + github.js | 113 +- network.js | 2 + test/archive.test.js | 20 + test/fixtures/pullRequests.fixture.js | 2194 ++++++++++++++++++++++++- test/github.test.js | 60 +- 6 files changed, 2411 insertions(+), 39 deletions(-) create mode 100644 archive.js create mode 100644 test/archive.test.js diff --git a/archive.js b/archive.js new file mode 100644 index 0000000..664902e --- /dev/null +++ b/archive.js @@ -0,0 +1,61 @@ +import * as path from 'path'; +import * as fs from 'fs'; + +/** + * Writes json data to a csv file + * @param {Array} data - The data to be written to the file. + * @param {string} [options.archiveFolder=process.cwd()] - The folder where the file will be saved. Defaults to the current working directory. + * @param {string} [options.archiveFileName='archive-YYYYMMDDHHmmss.csv'] - The name of the file to be written. Defaults to 'archive-YYYYMMDDHHmmss.csv'. + */ +export function save(data, options = {}) { + if (!data || !Array.isArray(data) || data.length<1) { + console.log("No content to write."); + return; + } + // Prepare content for csv + let allKeys = Array.from(new Set(data.flatMap(Object.keys))); + const headers = allKeys.join(','); + const rows = data.map(obj => formatCSVRow(obj, allKeys)).join("\n"); + const csvContent = headers + "\n" + rows; + writeToFile(csvContent, options); + return csvContent; +} + +export function writeToFile(content, options){ + const ARCHIVE_FOLDER = options.archiveFolder || process.cwd(); + const ARCHIVE_FULL_PATH = path.join(ARCHIVE_FOLDER, options.archiveFileName || `archive-${getFormattedDate()}.csv`); + fs.writeFile(ARCHIVE_FULL_PATH, content, { flag: 'a+' }, err => { + if (err) { + console.error(err); + return; + } + console.log("The file was saved!"); + }); +} + +function formatCSVRow(obj, keys) { + return keys.map(key => formatCSVCell(obj[key])).join(','); +} + +function formatCSVCell(value) { + if (value === undefined || value === null) { + return ''; + } else if (typeof value === 'object') { + // Stringify objects/arrays and escape double quotes + return `"${JSON.stringify(value).replace(/"/g, '""')}"`; + } else if (typeof value === 'string') { + // Check for commas or line breaks and escape double quotes + if (value.includes(',') || value.includes('\n')) { + return `"${value.replace(/"/g, '""')}"`; + } else { + return value; + } + } else { + return value.toString(); + } +} + +export function getFormattedDate() { + const now = new Date(); + return now.toISOString().replace(/[\-\:T\.Z]/g, ''); +} \ No newline at end of file diff --git a/github.js b/github.js index 5caa8be..879e9b2 100644 --- a/github.js +++ b/github.js @@ -3,10 +3,8 @@ * @example To archive contributors leaderboard data in csv file, run `node contributors.js` */ -import * as path from 'path'; -import * as fs from 'fs'; - import { makeRequest, makeRequestWithRateLimit } from './network.js'; +import * as archive from './archive.js'; // Configurations (Optional) // Repo owner that you want to analyze @@ -26,6 +24,26 @@ if(GITHUB_PERSONAL_TOKEN){ GITHUB_REQUEST_OPTIONS.headers["Authorization"] = "token "+GITHUB_PERSONAL_TOKEN; } + +/** + * Get details of a Github repo + * @param {string} fullRepoNameOrUrl e.g. myorghandle/myreponame + * @param {number} pageNo + * @returns Promise | String> + * @example getRepoDetail('myorghandle/myreponame').then((repoDetail) => console.log(repoDetail)).catch((err) => console.log(err)) + */ +export async function getRepoDetail(fullRepoNameOrUrl, pageNo = 1) { + if(!fullRepoNameOrUrl) throw new Error("Invalid input") + let fullRepoName = fullRepoNameOrUrl.match(/github\.com(?:\/repos)?\/([^\/]+\/[^\/]+)/)?.[1] || fullRepoNameOrUrl; + let url = `https://api.github.com/repos/${fullRepoName}`; + console.log(url); + const { res, data } = await makeRequestWithRateLimit('GET', url, Object.assign({},GITHUB_REQUEST_OPTIONS)); + console.log("Repo detail request finished for " + fullRepoName) + // console.log(data) + let dataJson = JSON.parse(data); + return dataJson; +} + /** * Get all github repos of an owner(user/org) * @param {string} owner The organization or user name on GitHub @@ -176,18 +194,12 @@ function writeContributorLeaderboardToFile(contributors, options={}) { if(!contributors || contributors.length<1){ return; } - const ARCHIVE_FOLDER = options.archiveFolder || process.cwd(); - const ARCHIVE_FULL_PATH = path.join(ARCHIVE_FOLDER, options.archiveFileName || 'archive-gh-contributors-leaderboard.csv'); + // Prepare data let ghContributorLeaderboard = contributors.map((contributor) => { return ["@" + contributor.login, contributor.contributions, contributor.html_url, contributor.avatar_url, contributor.topContributedRepo, contributor.allContributedRepos].join(); }).join("\n"); ghContributorLeaderboard = "Github Username,Total Contributions,Profile,Avatar,Most Contribution To,Contributed To\n" + ghContributorLeaderboard; - fs.writeFile(ARCHIVE_FULL_PATH, ghContributorLeaderboard, { flag: 'a+' }, function (err) { - if (err) { - return console.log(err); - } - console.log("The file was saved!"); - }); + archive.writeToFile(ghContributorLeaderboard, Object.assign({ archiveFileName: 'archive-gh-contributors-leaderboard.csv' }, options)); } /** @@ -215,14 +227,15 @@ export async function archiveContributorsLeaderboard(owner=REPO_OWNER, options) /** * Search pull requests * @param {string} query - * @param {Object} options Additional options e.g. { pageNo: 1 } + * @param {Object} [options] Additional options + * @param {Object} [options.pageNo=1] Result page number */ export async function searchPullRequests(query, options) { let pageNo = (options && options.pageNo) ? options.pageNo : 1; if(options && options.GITHUB_PERSONAL_TOKEN){ GITHUB_REQUEST_OPTIONS.headers["Authorization"] = "token "+options.GITHUB_PERSONAL_TOKEN; } - let queryString = encodeURIComponent(''+query+'type:pr') + let queryString = encodeURIComponent(query || ''+'+type:pr'); let url = `https://api.github.com/search/issues?q=${queryString}&per_page=100&page=${pageNo}&sort=${options.sort || 'created'}`; const { res, data } = await makeRequestWithRateLimit('GET', url, Object.assign({},GITHUB_REQUEST_OPTIONS)); console.log("PR search request finished"); @@ -233,32 +246,76 @@ export async function searchPullRequests(query, options) { } /** - * Get all search results, not just one page + * Get all PRs matching query * @param {string} query - * @param {Object} options - * @param {Object} options.maxResults limit maximum results + * @param {Object} [options] + * @param {Object} [options.maxResults=1000] limit maximum results */ -export async function recursiveSearchPullRequests(query, options){ +export async function recursivelySearchPullRequests(query, options){ + let searchRequestOptions = Object.assign({ pageNo: 1, maxResults: 1000 }, options) let prList = []; - let pageNo = 1; - let maxResults = options.maxResults || 10000; - let searchResultObject = await searchPullRequests(query, Object.assign({ pageNo: pageNo }, options)); + let searchResultObject = await searchPullRequests(query, searchRequestOptions); // Iterate over results if there are more results expected by the user - if(!searchResultObject || !searchResultObject.items || !searchResultObject.items.length<1 || maxResults < 100){ + if(!searchResultObject || !searchResultObject.items || searchResultObject.items.length<1){ return prList; } - prList.push(searchResultObject.items); - let incomplete_results = searchResultObject.incomplete_results; - while(prList.length < searchResultObject.total_count && !incomplete_results){ - pageNo++; + prList.push(...searchResultObject.items); + while(prList.length < searchRequestOptions.maxResults && prList.length < searchResultObject.total_count){ + searchRequestOptions.pageNo++; try { - let nextPageSearchResultObject = await searchPullRequests(query, { pageNo: pageNo } ); + let nextPageSearchResultObject = await searchPullRequests(query, searchRequestOptions); prList.push(...nextPageSearchResultObject.items); - incomplete_results = nextPageSearchResultObject.incomplete_results; } catch (err) { - console.log("Some issue in recursive search for pull requests") + console.log("Some issue in recursive search for pull requests"); + break; } } console.log("Found "+prList.length +" PRs"+" for "+query); return prList; +} + + +/** + * Aggregates all pull requests based on a specified field + * @param {Object[]} pullRequests - An array of pull request objects. + * @param {string} aggregatorField - The field name used to aggregate the pull requests. Defaults to "repository_url". + * @returns {Object[]} An array of objects, each containing a unique value of the aggregator field and an array of all pull requests that share that value. + */ +export function aggregateAllPullRequests(pullRequests, aggregatorField = "repository_url") { + return pullRequests.reduce((grouped, currentItem) => { + // Skipping the items without aggregatorField + if (!currentItem[aggregatorField]) { + return grouped; + } + // Find or create the group for the current item + let group = grouped.find(g => g[aggregatorField] === currentItem[aggregatorField]); + if (!group) { + group = { [aggregatorField]: currentItem[aggregatorField], pull_requests: [] }; + grouped.push(group); + } + // Add the current item to the group + group.pull_requests.push(currentItem); + return grouped; + }, []); +} + +/** + * Archives repos that PRs + * @param {string} owner The organization or user name on GitHub + * @param {Object} options Additional options + */ +export async function archiveReposWithMatchingPullRequests(query, options) { + let pullRequests = await recursivelySearchPullRequests(query, options); + if (!pullRequests || pullRequests.length < 1) { + console.log("Failed to get PRs for query: "+query); + return; + } + let repos = aggregateAllPullRequests(pullRequests, 'repository_url'); + if(!repos) throw new Error("No repo found"); + for(let repo of repos){ + let repoDetail = await getRepoDetail(repo['repository_url']); + Object.assign(repo, repoDetail); + } + archive.save(repos, { archiveFileName: `repos-pr-${query}-${options.maxResults || 1000}-${archive.getFormattedDate()}.csv` }); + return repos; } \ No newline at end of file diff --git a/network.js b/network.js index 8df2f47..da4fbba 100644 --- a/network.js +++ b/network.js @@ -115,6 +115,8 @@ export async function makeRequestWithRateLimit(method, url, options){ if (!flow || flow.shouldRun()) { // Add business logic to process incoming request console.log("Request accepted. Processing..."); + // Wait for 500ms + await new Promise(resolve => setTimeout(resolve, 2000)); const {res, data} = await makeRequest(...arguments) return { res, data} } else { diff --git a/test/archive.test.js b/test/archive.test.js new file mode 100644 index 0000000..e40ac39 --- /dev/null +++ b/test/archive.test.js @@ -0,0 +1,20 @@ +import { expect, assert } from "chai"; +import * as archive from "../archive.js"; + +import * as pullRequestsFixture from './fixtures/pullRequests.fixture.js'; + +describe('archive.js', function() { + + /** Archive test --START-- */ + + describe.skip('#archive(jsonArray);', async function() { + it('should save jsonArray to a csv file', async function() { + this.timeout(100000); + let content = await archive.save(pullRequestsFixture.VALID_PR_SEARCH_RESULT_ITEMS); + assert.isNotNull(content, "Repos not returned"); + expect(content).to.be.an('string'); + expect(content).to.have.lengthOf.greaterThan(2000); + }) + }) + +}) \ No newline at end of file diff --git a/test/fixtures/pullRequests.fixture.js b/test/fixtures/pullRequests.fixture.js index 345ce80..760e874 100644 --- a/test/fixtures/pullRequests.fixture.js +++ b/test/fixtures/pullRequests.fixture.js @@ -1,4 +1,2194 @@ export const PR_SEARCH_QUERY = "gitcommitshow"; -export const VALID_SEARCH_RESULT_SAMPLE = { +export const PR_SEARCH_MAX_RESULTS = 10; +export const VALID_PR_SEARCH_RESULT_ITEMS = [ + { + "url": "https://api.github.com/repos/ayyappan4Kites/testrepo/issues/2", + "repository_url": "https://api.github.com/repos/ayyappan4Kites/testrepo", + "labels_url": "https://api.github.com/repos/ayyappan4Kites/testrepo/issues/2/labels{/name}", + "comments_url": "https://api.github.com/repos/ayyappan4Kites/testrepo/issues/2/comments", + "events_url": "https://api.github.com/repos/ayyappan4Kites/testrepo/issues/2/events", + "html_url": "https://github.com/ayyappan4Kites/testrepo/pull/2", + "id": 2015789425, + "node_id": "PR_kwDOKzVqnc5goG_7", + "number": 2, + "title": "Test", + "user": { + "login": "ayyappan4Kites", + "id": 151600603, + "node_id": "U_kgDOCQk92w", + "avatar_url": "https://avatars.githubusercontent.com/u/151600603?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ayyappan4Kites", + "html_url": "https://github.com/ayyappan4Kites", + "followers_url": "https://api.github.com/users/ayyappan4Kites/followers", + "following_url": "https://api.github.com/users/ayyappan4Kites/following{/other_user}", + "gists_url": "https://api.github.com/users/ayyappan4Kites/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ayyappan4Kites/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ayyappan4Kites/subscriptions", + "organizations_url": "https://api.github.com/users/ayyappan4Kites/orgs", + "repos_url": "https://api.github.com/users/ayyappan4Kites/repos", + "events_url": "https://api.github.com/users/ayyappan4Kites/events{/privacy}", + "received_events_url": "https://api.github.com/users/ayyappan4Kites/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ -} \ No newline at end of file + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [ + + ], + "milestone": null, + "comments": 0, + "created_at": "2023-11-29T04:24:10Z", + "updated_at": "2023-11-29T04:24:10Z", + "closed_at": null, + "author_association": "OWNER", + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/ayyappan4Kites/testrepo/pulls/2", + "html_url": "https://github.com/ayyappan4Kites/testrepo/pull/2", + "diff_url": "https://github.com/ayyappan4Kites/testrepo/pull/2.diff", + "patch_url": "https://github.com/ayyappan4Kites/testrepo/pull/2.patch", + "merged_at": null + }, + "body": "__MOB - Ticket Number - Title from the User Story.__\r\n\r\n__Reference Ticket(s):__\r\n1. [MOB-5256](https://fourkites.atlassian.net/browse/MOB-5256)\r\n2. [MOB-TicketNumber](https://fourkites.atlassian.net/browse/MOB-TicketNumber)\r\n\r\n__Changes Made:__\r\n1. A change you made.\r\n\t- Brief explanation(if requied).\r\n2. A change you made.\r\n", + "reactions": { + "url": "https://api.github.com/repos/ayyappan4Kites/testrepo/issues/2/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/ayyappan4Kites/testrepo/issues/2/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1.0 + }, + { + "url": "https://api.github.com/repos/watercorp2/jenia_test_repo_1/issues/14", + "repository_url": "https://api.github.com/repos/watercorp2/jenia_test_repo_1", + "labels_url": "https://api.github.com/repos/watercorp2/jenia_test_repo_1/issues/14/labels{/name}", + "comments_url": "https://api.github.com/repos/watercorp2/jenia_test_repo_1/issues/14/comments", + "events_url": "https://api.github.com/repos/watercorp2/jenia_test_repo_1/issues/14/events", + "html_url": "https://github.com/watercorp2/jenia_test_repo_1/pull/14", + "id": 2014762184, + "node_id": "PR_kwDOKJP82M5gklma", + "number": 14, + "title": "test", + "user": { + "login": "jenia-sakirko", + "id": 142144387, + "node_id": "U_kgDOCHjzgw", + "avatar_url": "https://avatars.githubusercontent.com/u/142144387?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jenia-sakirko", + "html_url": "https://github.com/jenia-sakirko", + "followers_url": "https://api.github.com/users/jenia-sakirko/followers", + "following_url": "https://api.github.com/users/jenia-sakirko/following{/other_user}", + "gists_url": "https://api.github.com/users/jenia-sakirko/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jenia-sakirko/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jenia-sakirko/subscriptions", + "organizations_url": "https://api.github.com/users/jenia-sakirko/orgs", + "repos_url": "https://api.github.com/users/jenia-sakirko/repos", + "events_url": "https://api.github.com/users/jenia-sakirko/events{/privacy}", + "received_events_url": "https://api.github.com/users/jenia-sakirko/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [ + + ], + "milestone": null, + "comments": 0, + "created_at": "2023-11-28T15:53:30Z", + "updated_at": "2023-11-28T16:09:18Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/watercorp2/jenia_test_repo_1/pulls/14", + "html_url": "https://github.com/watercorp2/jenia_test_repo_1/pull/14", + "diff_url": "https://github.com/watercorp2/jenia_test_repo_1/pull/14.diff", + "patch_url": "https://github.com/watercorp2/jenia_test_repo_1/pull/14.patch", + "merged_at": null + }, + "body": null, + "reactions": { + "url": "https://api.github.com/repos/watercorp2/jenia_test_repo_1/issues/14/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/watercorp2/jenia_test_repo_1/issues/14/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1.0 + }, + { + "url": "https://api.github.com/repos/YunoHost-Apps/prowlarr_ynh/issues/96", + "repository_url": "https://api.github.com/repos/YunoHost-Apps/prowlarr_ynh", + "labels_url": "https://api.github.com/repos/YunoHost-Apps/prowlarr_ynh/issues/96/labels{/name}", + "comments_url": "https://api.github.com/repos/YunoHost-Apps/prowlarr_ynh/issues/96/comments", + "events_url": "https://api.github.com/repos/YunoHost-Apps/prowlarr_ynh/issues/96/events", + "html_url": "https://github.com/YunoHost-Apps/prowlarr_ynh/pull/96", + "id": 2012079780, + "node_id": "PR_kwDOGIwkU85gbaPj", + "number": 96, + "title": "Testing", + "user": { + "login": "ericgaspar", + "id": 46165813, + "node_id": "MDQ6VXNlcjQ2MTY1ODEz", + "avatar_url": "https://avatars.githubusercontent.com/u/46165813?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ericgaspar", + "html_url": "https://github.com/ericgaspar", + "followers_url": "https://api.github.com/users/ericgaspar/followers", + "following_url": "https://api.github.com/users/ericgaspar/following{/other_user}", + "gists_url": "https://api.github.com/users/ericgaspar/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ericgaspar/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ericgaspar/subscriptions", + "organizations_url": "https://api.github.com/users/ericgaspar/orgs", + "repos_url": "https://api.github.com/users/ericgaspar/repos", + "events_url": "https://api.github.com/users/ericgaspar/events{/privacy}", + "received_events_url": "https://api.github.com/users/ericgaspar/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [ + + ], + "milestone": null, + "comments": 2, + "created_at": "2023-11-27T11:36:08Z", + "updated_at": "2023-11-27T11:36:18Z", + "closed_at": null, + "author_association": "MEMBER", + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/YunoHost-Apps/prowlarr_ynh/pulls/96", + "html_url": "https://github.com/YunoHost-Apps/prowlarr_ynh/pull/96", + "diff_url": "https://github.com/YunoHost-Apps/prowlarr_ynh/pull/96.diff", + "patch_url": "https://github.com/YunoHost-Apps/prowlarr_ynh/pull/96.patch", + "merged_at": null + }, + "body": "## Problem\r\n\r\n- *Description of why you made this PR*\r\n\r\n## Solution\r\n\r\n- *And how do you fix that problem*\r\n\r\n## PR Status\r\n\r\n- [ ] Code finished and ready to be reviewed/tested\r\n- [ ] The fix/enhancement were manually tested (if applicable)\r\n\r\n## Automatic tests\r\n\r\nAutomatic tests can be triggered on https://ci-apps-dev.yunohost.org/ *after creating the PR*, by commenting \"!testme\", \"!gogogadgetoci\" or \"By the power of systemd, I invoke The Great App CI to test this Pull Request!\". (N.B. : for this to work you need to be a member of the Yunohost-Apps organization)\r\n", + "reactions": { + "url": "https://api.github.com/repos/YunoHost-Apps/prowlarr_ynh/issues/96/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/YunoHost-Apps/prowlarr_ynh/issues/96/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1.0 + }, + { + "url": "https://api.github.com/repos/fernandoocampo/kb-store/issues/25", + "repository_url": "https://api.github.com/repos/fernandoocampo/kb-store", + "labels_url": "https://api.github.com/repos/fernandoocampo/kb-store/issues/25/labels{/name}", + "comments_url": "https://api.github.com/repos/fernandoocampo/kb-store/issues/25/comments", + "events_url": "https://api.github.com/repos/fernandoocampo/kb-store/issues/25/events", + "html_url": "https://github.com/fernandoocampo/kb-store/pull/25", + "id": 2019367106, + "node_id": "PR_kwDOKpeLR85g0XWJ", + "number": 25, + "title": "test: 15 test build pipeline", + "user": { + "login": "fernandoocampo", + "id": 31908957, + "node_id": "MDQ6VXNlcjMxOTA4OTU3", + "avatar_url": "https://avatars.githubusercontent.com/u/31908957?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/fernandoocampo", + "html_url": "https://github.com/fernandoocampo", + "followers_url": "https://api.github.com/users/fernandoocampo/followers", + "following_url": "https://api.github.com/users/fernandoocampo/following{/other_user}", + "gists_url": "https://api.github.com/users/fernandoocampo/gists{/gist_id}", + "starred_url": "https://api.github.com/users/fernandoocampo/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/fernandoocampo/subscriptions", + "organizations_url": "https://api.github.com/users/fernandoocampo/orgs", + "repos_url": "https://api.github.com/users/fernandoocampo/repos", + "events_url": "https://api.github.com/users/fernandoocampo/events{/privacy}", + "received_events_url": "https://api.github.com/users/fernandoocampo/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [ + + ], + "milestone": null, + "comments": 0, + "created_at": "2023-11-30T19:31:52Z", + "updated_at": "2023-11-30T19:41:35Z", + "closed_at": null, + "author_association": "OWNER", + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/fernandoocampo/kb-store/pulls/25", + "html_url": "https://github.com/fernandoocampo/kb-store/pull/25", + "diff_url": "https://github.com/fernandoocampo/kb-store/pull/25.diff", + "patch_url": "https://github.com/fernandoocampo/kb-store/pull/25.patch", + "merged_at": null + }, + "body": null, + "reactions": { + "url": "https://api.github.com/repos/fernandoocampo/kb-store/issues/25/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/fernandoocampo/kb-store/issues/25/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1.0 + }, + { + "url": "https://api.github.com/repos/sperrow/nextjs-blog/issues/1", + "repository_url": "https://api.github.com/repos/sperrow/nextjs-blog", + "labels_url": "https://api.github.com/repos/sperrow/nextjs-blog/issues/1/labels{/name}", + "comments_url": "https://api.github.com/repos/sperrow/nextjs-blog/issues/1/comments", + "events_url": "https://api.github.com/repos/sperrow/nextjs-blog/issues/1/events", + "html_url": "https://github.com/sperrow/nextjs-blog/pull/1", + "id": 2011264171, + "node_id": "PR_kwDOKwjCTs5gYqyS", + "number": 1, + "title": "test", + "user": { + "login": "sperrow", + "id": 1517247, + "node_id": "MDQ6VXNlcjE1MTcyNDc=", + "avatar_url": "https://avatars.githubusercontent.com/u/1517247?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/sperrow", + "html_url": "https://github.com/sperrow", + "followers_url": "https://api.github.com/users/sperrow/followers", + "following_url": "https://api.github.com/users/sperrow/following{/other_user}", + "gists_url": "https://api.github.com/users/sperrow/gists{/gist_id}", + "starred_url": "https://api.github.com/users/sperrow/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/sperrow/subscriptions", + "organizations_url": "https://api.github.com/users/sperrow/orgs", + "repos_url": "https://api.github.com/users/sperrow/repos", + "events_url": "https://api.github.com/users/sperrow/events{/privacy}", + "received_events_url": "https://api.github.com/users/sperrow/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [ + + ], + "milestone": null, + "comments": 1, + "created_at": "2023-11-26T23:37:52Z", + "updated_at": "2023-11-26T23:38:06Z", + "closed_at": null, + "author_association": "OWNER", + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/sperrow/nextjs-blog/pulls/1", + "html_url": "https://github.com/sperrow/nextjs-blog/pull/1", + "diff_url": "https://github.com/sperrow/nextjs-blog/pull/1.diff", + "patch_url": "https://github.com/sperrow/nextjs-blog/pull/1.patch", + "merged_at": null + }, + "body": null, + "reactions": { + "url": "https://api.github.com/repos/sperrow/nextjs-blog/issues/1/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/sperrow/nextjs-blog/issues/1/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1.0 + }, + { + "url": "https://api.github.com/repos/Kate941-su/GeoChat/issues/1", + "repository_url": "https://api.github.com/repos/Kate941-su/GeoChat", + "labels_url": "https://api.github.com/repos/Kate941-su/GeoChat/issues/1/labels{/name}", + "comments_url": "https://api.github.com/repos/Kate941-su/GeoChat/issues/1/comments", + "events_url": "https://api.github.com/repos/Kate941-su/GeoChat/issues/1/events", + "html_url": "https://github.com/Kate941-su/GeoChat/pull/1", + "id": 1993823383, + "node_id": "PR_kwDOKmPSaM5fd_Po", + "number": 1, + "title": "test : test github actions", + "user": { + "login": "Kate941-su", + "id": 62321671, + "node_id": "MDQ6VXNlcjYyMzIxNjcx", + "avatar_url": "https://avatars.githubusercontent.com/u/62321671?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Kate941-su", + "html_url": "https://github.com/Kate941-su", + "followers_url": "https://api.github.com/users/Kate941-su/followers", + "following_url": "https://api.github.com/users/Kate941-su/following{/other_user}", + "gists_url": "https://api.github.com/users/Kate941-su/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Kate941-su/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Kate941-su/subscriptions", + "organizations_url": "https://api.github.com/users/Kate941-su/orgs", + "repos_url": "https://api.github.com/users/Kate941-su/repos", + "events_url": "https://api.github.com/users/Kate941-su/events{/privacy}", + "received_events_url": "https://api.github.com/users/Kate941-su/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [ + + ], + "milestone": null, + "comments": 24, + "created_at": "2023-11-15T00:48:06Z", + "updated_at": "2023-11-15T03:32:48Z", + "closed_at": null, + "author_association": "OWNER", + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/Kate941-su/GeoChat/pulls/1", + "html_url": "https://github.com/Kate941-su/GeoChat/pull/1", + "diff_url": "https://github.com/Kate941-su/GeoChat/pull/1.diff", + "patch_url": "https://github.com/Kate941-su/GeoChat/pull/1.patch", + "merged_at": null + }, + "body": "safasdgasdgasdg", + "reactions": { + "url": "https://api.github.com/repos/Kate941-su/GeoChat/issues/1/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/Kate941-su/GeoChat/issues/1/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1.0 + }, + { + "url": "https://api.github.com/repos/HamedAsoodeh/SolidityPersianWebDesign/issues/2", + "repository_url": "https://api.github.com/repos/HamedAsoodeh/SolidityPersianWebDesign", + "labels_url": "https://api.github.com/repos/HamedAsoodeh/SolidityPersianWebDesign/issues/2/labels{/name}", + "comments_url": "https://api.github.com/repos/HamedAsoodeh/SolidityPersianWebDesign/issues/2/comments", + "events_url": "https://api.github.com/repos/HamedAsoodeh/SolidityPersianWebDesign/issues/2/events", + "html_url": "https://github.com/HamedAsoodeh/SolidityPersianWebDesign/pull/2", + "id": 1987092579, + "node_id": "PR_kwDOKd3JQM5fHNcF", + "number": 2, + "title": "test ", + "user": { + "login": "HamedAsoodeh", + "id": 92183756, + "node_id": "U_kgDOBX6czA", + "avatar_url": "https://avatars.githubusercontent.com/u/92183756?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/HamedAsoodeh", + "html_url": "https://github.com/HamedAsoodeh", + "followers_url": "https://api.github.com/users/HamedAsoodeh/followers", + "following_url": "https://api.github.com/users/HamedAsoodeh/following{/other_user}", + "gists_url": "https://api.github.com/users/HamedAsoodeh/gists{/gist_id}", + "starred_url": "https://api.github.com/users/HamedAsoodeh/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/HamedAsoodeh/subscriptions", + "organizations_url": "https://api.github.com/users/HamedAsoodeh/orgs", + "repos_url": "https://api.github.com/users/HamedAsoodeh/repos", + "events_url": "https://api.github.com/users/HamedAsoodeh/events{/privacy}", + "received_events_url": "https://api.github.com/users/HamedAsoodeh/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [ + + ], + "milestone": null, + "comments": 0, + "created_at": "2023-11-10T07:44:31Z", + "updated_at": "2023-11-25T10:45:27Z", + "closed_at": null, + "author_association": "OWNER", + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/HamedAsoodeh/SolidityPersianWebDesign/pulls/2", + "html_url": "https://github.com/HamedAsoodeh/SolidityPersianWebDesign/pull/2", + "diff_url": "https://github.com/HamedAsoodeh/SolidityPersianWebDesign/pull/2.diff", + "patch_url": "https://github.com/HamedAsoodeh/SolidityPersianWebDesign/pull/2.patch", + "merged_at": null + }, + "body": "تست شد آماده انجام روش های و مراجل دیگر است ", + "reactions": { + "url": "https://api.github.com/repos/HamedAsoodeh/SolidityPersianWebDesign/issues/2/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/HamedAsoodeh/SolidityPersianWebDesign/issues/2/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1.0 + }, + { + "url": "https://api.github.com/repos/deployment-io/react-js-starter/issues/1", + "repository_url": "https://api.github.com/repos/deployment-io/react-js-starter", + "labels_url": "https://api.github.com/repos/deployment-io/react-js-starter/issues/1/labels{/name}", + "comments_url": "https://api.github.com/repos/deployment-io/react-js-starter/issues/1/comments", + "events_url": "https://api.github.com/repos/deployment-io/react-js-starter/issues/1/events", + "html_url": "https://github.com/deployment-io/react-js-starter/pull/1", + "id": 1969806677, + "node_id": "PR_kwDOKRcLfc5eMon4", + "number": 1, + "title": "test", + "user": { + "login": "ankit-arora", + "id": 2604486, + "node_id": "MDQ6VXNlcjI2MDQ0ODY=", + "avatar_url": "https://avatars.githubusercontent.com/u/2604486?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/ankit-arora", + "html_url": "https://github.com/ankit-arora", + "followers_url": "https://api.github.com/users/ankit-arora/followers", + "following_url": "https://api.github.com/users/ankit-arora/following{/other_user}", + "gists_url": "https://api.github.com/users/ankit-arora/gists{/gist_id}", + "starred_url": "https://api.github.com/users/ankit-arora/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/ankit-arora/subscriptions", + "organizations_url": "https://api.github.com/users/ankit-arora/orgs", + "repos_url": "https://api.github.com/users/ankit-arora/repos", + "events_url": "https://api.github.com/users/ankit-arora/events{/privacy}", + "received_events_url": "https://api.github.com/users/ankit-arora/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [ + + ], + "milestone": null, + "comments": 0, + "created_at": "2023-10-31T07:22:07Z", + "updated_at": "2023-12-03T05:13:01Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/deployment-io/react-js-starter/pulls/1", + "html_url": "https://github.com/deployment-io/react-js-starter/pull/1", + "diff_url": "https://github.com/deployment-io/react-js-starter/pull/1.diff", + "patch_url": "https://github.com/deployment-io/react-js-starter/pull/1.patch", + "merged_at": null + }, + "body": null, + "reactions": { + "url": "https://api.github.com/repos/deployment-io/react-js-starter/issues/1/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/deployment-io/react-js-starter/issues/1/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1.0 + }, + { + "url": "https://api.github.com/repos/kimberlywebb/COMBO/issues/1", + "repository_url": "https://api.github.com/repos/kimberlywebb/COMBO", + "labels_url": "https://api.github.com/repos/kimberlywebb/COMBO/issues/1/labels{/name}", + "comments_url": "https://api.github.com/repos/kimberlywebb/COMBO/issues/1/comments", + "events_url": "https://api.github.com/repos/kimberlywebb/COMBO/issues/1/events", + "html_url": "https://github.com/kimberlywebb/COMBO/pull/1", + "id": 2017181841, + "node_id": "PR_kwDOICujes5gs3kU", + "number": 1, + "title": "Added a test set and a test", + "user": { + "login": "muschellij2", + "id": 1075118, + "node_id": "MDQ6VXNlcjEwNzUxMTg=", + "avatar_url": "https://avatars.githubusercontent.com/u/1075118?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/muschellij2", + "html_url": "https://github.com/muschellij2", + "followers_url": "https://api.github.com/users/muschellij2/followers", + "following_url": "https://api.github.com/users/muschellij2/following{/other_user}", + "gists_url": "https://api.github.com/users/muschellij2/gists{/gist_id}", + "starred_url": "https://api.github.com/users/muschellij2/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/muschellij2/subscriptions", + "organizations_url": "https://api.github.com/users/muschellij2/orgs", + "repos_url": "https://api.github.com/users/muschellij2/repos", + "events_url": "https://api.github.com/users/muschellij2/events{/privacy}", + "received_events_url": "https://api.github.com/users/muschellij2/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [ + + ], + "milestone": null, + "comments": 0, + "created_at": "2023-11-29T18:28:46Z", + "updated_at": "2023-11-29T18:28:46Z", + "closed_at": null, + "author_association": "NONE", + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/kimberlywebb/COMBO/pulls/1", + "html_url": "https://github.com/kimberlywebb/COMBO/pull/1", + "diff_url": "https://github.com/kimberlywebb/COMBO/pull/1.diff", + "patch_url": "https://github.com/kimberlywebb/COMBO/pull/1.patch", + "merged_at": null + }, + "body": "Here's a PR (looked at your package after the talk) - added a test and a fixed test set for COMBO_EM. \r\n\r\nNice talk!", + "reactions": { + "url": "https://api.github.com/repos/kimberlywebb/COMBO/issues/1/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/kimberlywebb/COMBO/issues/1/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1.0 + }, + { + "url": "https://api.github.com/repos/FRC1884/season-2023/issues/27", + "repository_url": "https://api.github.com/repos/FRC1884/season-2023", + "labels_url": "https://api.github.com/repos/FRC1884/season-2023/issues/27/labels{/name}", + "comments_url": "https://api.github.com/repos/FRC1884/season-2023/issues/27/comments", + "events_url": "https://api.github.com/repos/FRC1884/season-2023/issues/27/events", + "html_url": "https://github.com/FRC1884/season-2023/pull/27", + "id": 1990978315, + "node_id": "PR_kwDOIvWYYc5fUSe8", + "number": 27, + "title": "Testing", + "user": { + "login": "EXIBIST32132", + "id": 81558382, + "node_id": "MDQ6VXNlcjgxNTU4Mzgy", + "avatar_url": "https://avatars.githubusercontent.com/u/81558382?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/EXIBIST32132", + "html_url": "https://github.com/EXIBIST32132", + "followers_url": "https://api.github.com/users/EXIBIST32132/followers", + "following_url": "https://api.github.com/users/EXIBIST32132/following{/other_user}", + "gists_url": "https://api.github.com/users/EXIBIST32132/gists{/gist_id}", + "starred_url": "https://api.github.com/users/EXIBIST32132/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/EXIBIST32132/subscriptions", + "organizations_url": "https://api.github.com/users/EXIBIST32132/orgs", + "repos_url": "https://api.github.com/users/EXIBIST32132/repos", + "events_url": "https://api.github.com/users/EXIBIST32132/events{/privacy}", + "received_events_url": "https://api.github.com/users/EXIBIST32132/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [ + + ], + "milestone": null, + "comments": 0, + "created_at": "2023-11-13T16:10:33Z", + "updated_at": "2023-11-13T16:10:33Z", + "closed_at": null, + "author_association": "NONE", + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/FRC1884/season-2023/pulls/27", + "html_url": "https://github.com/FRC1884/season-2023/pull/27", + "diff_url": "https://github.com/FRC1884/season-2023/pull/27.diff", + "patch_url": "https://github.com/FRC1884/season-2023/pull/27.patch", + "merged_at": null + }, + "body": "testing added nothing just for practice", + "reactions": { + "url": "https://api.github.com/repos/FRC1884/season-2023/issues/27/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/FRC1884/season-2023/issues/27/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1.0 + }, + { + "url": "https://api.github.com/repos/biz204088/price-calculation/issues/1", + "repository_url": "https://api.github.com/repos/biz204088/price-calculation", + "labels_url": "https://api.github.com/repos/biz204088/price-calculation/issues/1/labels{/name}", + "comments_url": "https://api.github.com/repos/biz204088/price-calculation/issues/1/comments", + "events_url": "https://api.github.com/repos/biz204088/price-calculation/issues/1/events", + "html_url": "https://github.com/biz204088/price-calculation/pull/1", + "id": 2021759548, + "node_id": "PR_kwDOK0o2Jc5g8hhj", + "number": 1, + "title": "test friendly", + "user": { + "login": "biz204088", + "id": 116663430, + "node_id": "U_kgDOBvQkhg", + "avatar_url": "https://avatars.githubusercontent.com/u/116663430?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/biz204088", + "html_url": "https://github.com/biz204088", + "followers_url": "https://api.github.com/users/biz204088/followers", + "following_url": "https://api.github.com/users/biz204088/following{/other_user}", + "gists_url": "https://api.github.com/users/biz204088/gists{/gist_id}", + "starred_url": "https://api.github.com/users/biz204088/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/biz204088/subscriptions", + "organizations_url": "https://api.github.com/users/biz204088/orgs", + "repos_url": "https://api.github.com/users/biz204088/repos", + "events_url": "https://api.github.com/users/biz204088/events{/privacy}", + "received_events_url": "https://api.github.com/users/biz204088/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [ + + ], + "milestone": null, + "comments": 0, + "created_at": "2023-12-02T00:15:51Z", + "updated_at": "2023-12-02T01:32:26Z", + "closed_at": null, + "author_association": "OWNER", + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/biz204088/price-calculation/pulls/1", + "html_url": "https://github.com/biz204088/price-calculation/pull/1", + "diff_url": "https://github.com/biz204088/price-calculation/pull/1.diff", + "patch_url": "https://github.com/biz204088/price-calculation/pull/1.patch", + "merged_at": null + }, + "body": null, + "reactions": { + "url": "https://api.github.com/repos/biz204088/price-calculation/issues/1/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/biz204088/price-calculation/issues/1/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1.0 + }, + { + "url": "https://api.github.com/repos/elena161284/hw2.2/issues/3", + "repository_url": "https://api.github.com/repos/elena161284/hw2.2", + "labels_url": "https://api.github.com/repos/elena161284/hw2.2/issues/3/labels{/name}", + "comments_url": "https://api.github.com/repos/elena161284/hw2.2/issues/3/comments", + "events_url": "https://api.github.com/repos/elena161284/hw2.2/issues/3/events", + "html_url": "https://github.com/elena161284/hw2.2/pull/3", + "id": 1982882671, + "node_id": "PR_kwDOKlxxQ85e43NG", + "number": 3, + "title": "Tests", + "user": { + "login": "elena161284", + "id": 100692069, + "node_id": "U_kgDOBgBwZQ", + "avatar_url": "https://avatars.githubusercontent.com/u/100692069?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/elena161284", + "html_url": "https://github.com/elena161284", + "followers_url": "https://api.github.com/users/elena161284/followers", + "following_url": "https://api.github.com/users/elena161284/following{/other_user}", + "gists_url": "https://api.github.com/users/elena161284/gists{/gist_id}", + "starred_url": "https://api.github.com/users/elena161284/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/elena161284/subscriptions", + "organizations_url": "https://api.github.com/users/elena161284/orgs", + "repos_url": "https://api.github.com/users/elena161284/repos", + "events_url": "https://api.github.com/users/elena161284/events{/privacy}", + "received_events_url": "https://api.github.com/users/elena161284/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [ + + ], + "milestone": null, + "comments": 0, + "created_at": "2023-11-08T06:55:45Z", + "updated_at": "2023-11-14T14:47:14Z", + "closed_at": null, + "author_association": "OWNER", + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/elena161284/hw2.2/pulls/3", + "html_url": "https://github.com/elena161284/hw2.2/pull/3", + "diff_url": "https://github.com/elena161284/hw2.2/pull/3.diff", + "patch_url": "https://github.com/elena161284/hw2.2/pull/3.patch", + "merged_at": null + }, + "body": null, + "reactions": { + "url": "https://api.github.com/repos/elena161284/hw2.2/issues/3/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/elena161284/hw2.2/issues/3/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1.0 + }, + { + "url": "https://api.github.com/repos/Bohdan-Zasiadvovk/bot_dobromir/issues/3", + "repository_url": "https://api.github.com/repos/Bohdan-Zasiadvovk/bot_dobromir", + "labels_url": "https://api.github.com/repos/Bohdan-Zasiadvovk/bot_dobromir/issues/3/labels{/name}", + "comments_url": "https://api.github.com/repos/Bohdan-Zasiadvovk/bot_dobromir/issues/3/comments", + "events_url": "https://api.github.com/repos/Bohdan-Zasiadvovk/bot_dobromir/issues/3/events", + "html_url": "https://github.com/Bohdan-Zasiadvovk/bot_dobromir/pull/3", + "id": 1977968470, + "node_id": "PR_kwDOKcGl885eoFNr", + "number": 3, + "title": "Tests", + "user": { + "login": "Bohdan-Zasiadvovk", + "id": 52670409, + "node_id": "MDQ6VXNlcjUyNjcwNDA5", + "avatar_url": "https://avatars.githubusercontent.com/u/52670409?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Bohdan-Zasiadvovk", + "html_url": "https://github.com/Bohdan-Zasiadvovk", + "followers_url": "https://api.github.com/users/Bohdan-Zasiadvovk/followers", + "following_url": "https://api.github.com/users/Bohdan-Zasiadvovk/following{/other_user}", + "gists_url": "https://api.github.com/users/Bohdan-Zasiadvovk/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Bohdan-Zasiadvovk/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Bohdan-Zasiadvovk/subscriptions", + "organizations_url": "https://api.github.com/users/Bohdan-Zasiadvovk/orgs", + "repos_url": "https://api.github.com/users/Bohdan-Zasiadvovk/repos", + "events_url": "https://api.github.com/users/Bohdan-Zasiadvovk/events{/privacy}", + "received_events_url": "https://api.github.com/users/Bohdan-Zasiadvovk/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [ + + ], + "milestone": null, + "comments": 0, + "created_at": "2023-11-05T21:18:18Z", + "updated_at": "2023-11-05T21:18:18Z", + "closed_at": null, + "author_association": "OWNER", + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/Bohdan-Zasiadvovk/bot_dobromir/pulls/3", + "html_url": "https://github.com/Bohdan-Zasiadvovk/bot_dobromir/pull/3", + "diff_url": "https://github.com/Bohdan-Zasiadvovk/bot_dobromir/pull/3.diff", + "patch_url": "https://github.com/Bohdan-Zasiadvovk/bot_dobromir/pull/3.patch", + "merged_at": null + }, + "body": "Final update", + "reactions": { + "url": "https://api.github.com/repos/Bohdan-Zasiadvovk/bot_dobromir/issues/3/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/Bohdan-Zasiadvovk/bot_dobromir/issues/3/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1.0 + }, + { + "url": "https://api.github.com/repos/sebastian-pietrykowski/Rezerwowy/issues/10", + "repository_url": "https://api.github.com/repos/sebastian-pietrykowski/Rezerwowy", + "labels_url": "https://api.github.com/repos/sebastian-pietrykowski/Rezerwowy/issues/10/labels{/name}", + "comments_url": "https://api.github.com/repos/sebastian-pietrykowski/Rezerwowy/issues/10/comments", + "events_url": "https://api.github.com/repos/sebastian-pietrykowski/Rezerwowy/issues/10/events", + "html_url": "https://github.com/sebastian-pietrykowski/Rezerwowy/pull/10", + "id": 1985534206, + "node_id": "PR_kwDOKkqbTs5fB6HV", + "number": 10, + "title": "Test", + "user": { + "login": "wpaczesniak", + "id": 96004619, + "node_id": "U_kgDOBbjqCw", + "avatar_url": "https://avatars.githubusercontent.com/u/96004619?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/wpaczesniak", + "html_url": "https://github.com/wpaczesniak", + "followers_url": "https://api.github.com/users/wpaczesniak/followers", + "following_url": "https://api.github.com/users/wpaczesniak/following{/other_user}", + "gists_url": "https://api.github.com/users/wpaczesniak/gists{/gist_id}", + "starred_url": "https://api.github.com/users/wpaczesniak/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/wpaczesniak/subscriptions", + "organizations_url": "https://api.github.com/users/wpaczesniak/orgs", + "repos_url": "https://api.github.com/users/wpaczesniak/repos", + "events_url": "https://api.github.com/users/wpaczesniak/events{/privacy}", + "received_events_url": "https://api.github.com/users/wpaczesniak/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [ + + ], + "milestone": null, + "comments": 0, + "created_at": "2023-11-09T12:36:18Z", + "updated_at": "2023-11-09T12:36:18Z", + "closed_at": null, + "author_association": "COLLABORATOR", + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/sebastian-pietrykowski/Rezerwowy/pulls/10", + "html_url": "https://github.com/sebastian-pietrykowski/Rezerwowy/pull/10", + "diff_url": "https://github.com/sebastian-pietrykowski/Rezerwowy/pull/10.diff", + "patch_url": "https://github.com/sebastian-pietrykowski/Rezerwowy/pull/10.patch", + "merged_at": null + }, + "body": null, + "reactions": { + "url": "https://api.github.com/repos/sebastian-pietrykowski/Rezerwowy/issues/10/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/sebastian-pietrykowski/Rezerwowy/issues/10/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1.0 + }, + { + "url": "https://api.github.com/repos/kikoorange8/AgileLab1/issues/1", + "repository_url": "https://api.github.com/repos/kikoorange8/AgileLab1", + "labels_url": "https://api.github.com/repos/kikoorange8/AgileLab1/issues/1/labels{/name}", + "comments_url": "https://api.github.com/repos/kikoorange8/AgileLab1/issues/1/comments", + "events_url": "https://api.github.com/repos/kikoorange8/AgileLab1/issues/1/events", + "html_url": "https://github.com/kikoorange8/AgileLab1/pull/1", + "id": 1977316861, + "node_id": "PR_kwDOKgKxqc5emFlp", + "number": 1, + "title": "Test", + "user": { + "login": "kikoorange8", + "id": 121585912, + "node_id": "U_kgDOBz9A-A", + "avatar_url": "https://avatars.githubusercontent.com/u/121585912?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/kikoorange8", + "html_url": "https://github.com/kikoorange8", + "followers_url": "https://api.github.com/users/kikoorange8/followers", + "following_url": "https://api.github.com/users/kikoorange8/following{/other_user}", + "gists_url": "https://api.github.com/users/kikoorange8/gists{/gist_id}", + "starred_url": "https://api.github.com/users/kikoorange8/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/kikoorange8/subscriptions", + "organizations_url": "https://api.github.com/users/kikoorange8/orgs", + "repos_url": "https://api.github.com/users/kikoorange8/repos", + "events_url": "https://api.github.com/users/kikoorange8/events{/privacy}", + "received_events_url": "https://api.github.com/users/kikoorange8/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [ + + ], + "milestone": null, + "comments": 0, + "created_at": "2023-11-04T12:43:49Z", + "updated_at": "2023-11-04T12:43:49Z", + "closed_at": null, + "author_association": "OWNER", + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/kikoorange8/AgileLab1/pulls/1", + "html_url": "https://github.com/kikoorange8/AgileLab1/pull/1", + "diff_url": "https://github.com/kikoorange8/AgileLab1/pull/1.diff", + "patch_url": "https://github.com/kikoorange8/AgileLab1/pull/1.patch", + "merged_at": null + }, + "body": "Testing Pull Request", + "reactions": { + "url": "https://api.github.com/repos/kikoorange8/AgileLab1/issues/1/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/kikoorange8/AgileLab1/issues/1/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1.0 + }, + { + "url": "https://api.github.com/repos/alex-aviator/test/issues/32", + "repository_url": "https://api.github.com/repos/alex-aviator/test", + "labels_url": "https://api.github.com/repos/alex-aviator/test/issues/32/labels{/name}", + "comments_url": "https://api.github.com/repos/alex-aviator/test/issues/32/comments", + "events_url": "https://api.github.com/repos/alex-aviator/test/issues/32/events", + "html_url": "https://github.com/alex-aviator/test/pull/32", + "id": 2007210268, + "node_id": "PR_kwDOKVRvqM5gLYUr", + "number": 32, + "title": "[mq-bot test] PR for test 24", + "user": { + "login": "aviator-az[bot]", + "id": 145402390, + "node_id": "BOT_kgDOCKqqFg", + "avatar_url": "https://avatars.githubusercontent.com/in/391934?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/aviator-az%5Bbot%5D", + "html_url": "https://github.com/apps/aviator-az", + "followers_url": "https://api.github.com/users/aviator-az%5Bbot%5D/followers", + "following_url": "https://api.github.com/users/aviator-az%5Bbot%5D/following{/other_user}", + "gists_url": "https://api.github.com/users/aviator-az%5Bbot%5D/gists{/gist_id}", + "starred_url": "https://api.github.com/users/aviator-az%5Bbot%5D/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/aviator-az%5Bbot%5D/subscriptions", + "organizations_url": "https://api.github.com/users/aviator-az%5Bbot%5D/orgs", + "repos_url": "https://api.github.com/users/aviator-az%5Bbot%5D/repos", + "events_url": "https://api.github.com/users/aviator-az%5Bbot%5D/events{/privacy}", + "received_events_url": "https://api.github.com/users/aviator-az%5Bbot%5D/received_events", + "type": "Bot", + "site_admin": false + }, + "labels": [ + + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [ + + ], + "milestone": null, + "comments": 0, + "created_at": "2023-11-22T22:44:49Z", + "updated_at": "2023-11-22T22:44:49Z", + "closed_at": null, + "author_association": "NONE", + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/alex-aviator/test/pulls/32", + "html_url": "https://github.com/alex-aviator/test/pull/32", + "diff_url": "https://github.com/alex-aviator/test/pull/32.diff", + "patch_url": "https://github.com/alex-aviator/test/pull/32.patch", + "merged_at": null + }, + "body": "This PR contains changes from PR(s): #27\nThese PR(s) will be merged into `main` when CI passes.\n\n\n\nThis PR also includes changes from the following PRs:\n- [**PR for test 17** #19](19)\n- [**PR for test 26** #29](29)\n- [**PR for test 25** #28](28)", + "reactions": { + "url": "https://api.github.com/repos/alex-aviator/test/issues/32/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/alex-aviator/test/issues/32/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1.0 + }, + { + "url": "https://api.github.com/repos/PsychoProgrammar/Assessify/issues/1", + "repository_url": "https://api.github.com/repos/PsychoProgrammar/Assessify", + "labels_url": "https://api.github.com/repos/PsychoProgrammar/Assessify/issues/1/labels{/name}", + "comments_url": "https://api.github.com/repos/PsychoProgrammar/Assessify/issues/1/comments", + "events_url": "https://api.github.com/repos/PsychoProgrammar/Assessify/issues/1/events", + "html_url": "https://github.com/PsychoProgrammar/Assessify/pull/1", + "id": 2012350307, + "node_id": "PR_kwDOKwrux85gcVJV", + "number": 1, + "title": "Test pr", + "user": { + "login": "PsychoProgrammar", + "id": 72486566, + "node_id": "MDQ6VXNlcjcyNDg2NTY2", + "avatar_url": "https://avatars.githubusercontent.com/u/72486566?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/PsychoProgrammar", + "html_url": "https://github.com/PsychoProgrammar", + "followers_url": "https://api.github.com/users/PsychoProgrammar/followers", + "following_url": "https://api.github.com/users/PsychoProgrammar/following{/other_user}", + "gists_url": "https://api.github.com/users/PsychoProgrammar/gists{/gist_id}", + "starred_url": "https://api.github.com/users/PsychoProgrammar/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/PsychoProgrammar/subscriptions", + "organizations_url": "https://api.github.com/users/PsychoProgrammar/orgs", + "repos_url": "https://api.github.com/users/PsychoProgrammar/repos", + "events_url": "https://api.github.com/users/PsychoProgrammar/events{/privacy}", + "received_events_url": "https://api.github.com/users/PsychoProgrammar/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [ + + ], + "milestone": null, + "comments": 0, + "created_at": "2023-11-27T14:02:57Z", + "updated_at": "2023-11-27T14:02:57Z", + "closed_at": null, + "author_association": "OWNER", + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/PsychoProgrammar/Assessify/pulls/1", + "html_url": "https://github.com/PsychoProgrammar/Assessify/pull/1", + "diff_url": "https://github.com/PsychoProgrammar/Assessify/pull/1.diff", + "patch_url": "https://github.com/PsychoProgrammar/Assessify/pull/1.patch", + "merged_at": null + }, + "body": null, + "reactions": { + "url": "https://api.github.com/repos/PsychoProgrammar/Assessify/issues/1/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/PsychoProgrammar/Assessify/issues/1/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1.0 + }, + { + "url": "https://api.github.com/repos/zanderteller/dqm/issues/18", + "repository_url": "https://api.github.com/repos/zanderteller/dqm", + "labels_url": "https://api.github.com/repos/zanderteller/dqm/issues/18/labels{/name}", + "comments_url": "https://api.github.com/repos/zanderteller/dqm/issues/18/comments", + "events_url": "https://api.github.com/repos/zanderteller/dqm/issues/18/events", + "html_url": "https://github.com/zanderteller/dqm/pull/18", + "id": 2008867899, + "node_id": "PR_kwDOJa4QuM5gQ4hh", + "number": 18, + "title": "Move tests", + "user": { + "login": "SpencerC", + "id": 817672, + "node_id": "MDQ6VXNlcjgxNzY3Mg==", + "avatar_url": "https://avatars.githubusercontent.com/u/817672?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/SpencerC", + "html_url": "https://github.com/SpencerC", + "followers_url": "https://api.github.com/users/SpencerC/followers", + "following_url": "https://api.github.com/users/SpencerC/following{/other_user}", + "gists_url": "https://api.github.com/users/SpencerC/gists{/gist_id}", + "starred_url": "https://api.github.com/users/SpencerC/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/SpencerC/subscriptions", + "organizations_url": "https://api.github.com/users/SpencerC/orgs", + "repos_url": "https://api.github.com/users/SpencerC/repos", + "events_url": "https://api.github.com/users/SpencerC/events{/privacy}", + "received_events_url": "https://api.github.com/users/SpencerC/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [ + + ], + "milestone": null, + "comments": 0, + "created_at": "2023-11-23T22:45:24Z", + "updated_at": "2023-11-23T22:45:24Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/zanderteller/dqm/pulls/18", + "html_url": "https://github.com/zanderteller/dqm/pull/18", + "diff_url": "https://github.com/zanderteller/dqm/pull/18.diff", + "patch_url": "https://github.com/zanderteller/dqm/pull/18.patch", + "merged_at": null + }, + "body": "Prereq for #13. Everything in the `dqm/` directory will go into the package, and test code isn't needed. Tested with:\r\n```\r\npython -m unittest discover -s tests\r\n```", + "reactions": { + "url": "https://api.github.com/repos/zanderteller/dqm/issues/18/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/zanderteller/dqm/issues/18/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1.0 + }, + { + "url": "https://api.github.com/repos/dima0046/WB_postavki/issues/1", + "repository_url": "https://api.github.com/repos/dima0046/WB_postavki", + "labels_url": "https://api.github.com/repos/dima0046/WB_postavki/issues/1/labels{/name}", + "comments_url": "https://api.github.com/repos/dima0046/WB_postavki/issues/1/comments", + "events_url": "https://api.github.com/repos/dima0046/WB_postavki/issues/1/events", + "html_url": "https://github.com/dima0046/WB_postavki/pull/1", + "id": 1961313523, + "node_id": "PR_kwDOKhYc5M5dv7Xw", + "number": 1, + "title": "Test", + "user": { + "login": "dima0046", + "id": 76613047, + "node_id": "MDQ6VXNlcjc2NjEzMDQ3", + "avatar_url": "https://avatars.githubusercontent.com/u/76613047?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/dima0046", + "html_url": "https://github.com/dima0046", + "followers_url": "https://api.github.com/users/dima0046/followers", + "following_url": "https://api.github.com/users/dima0046/following{/other_user}", + "gists_url": "https://api.github.com/users/dima0046/gists{/gist_id}", + "starred_url": "https://api.github.com/users/dima0046/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/dima0046/subscriptions", + "organizations_url": "https://api.github.com/users/dima0046/orgs", + "repos_url": "https://api.github.com/users/dima0046/repos", + "events_url": "https://api.github.com/users/dima0046/events{/privacy}", + "received_events_url": "https://api.github.com/users/dima0046/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [ + + ], + "milestone": null, + "comments": 1, + "created_at": "2023-10-25T12:31:39Z", + "updated_at": "2023-11-02T14:52:16Z", + "closed_at": null, + "author_association": "OWNER", + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/dima0046/WB_postavki/pulls/1", + "html_url": "https://github.com/dima0046/WB_postavki/pull/1", + "diff_url": "https://github.com/dima0046/WB_postavki/pull/1.diff", + "patch_url": "https://github.com/dima0046/WB_postavki/pull/1.patch", + "merged_at": null + }, + "body": null, + "reactions": { + "url": "https://api.github.com/repos/dima0046/WB_postavki/issues/1/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/dima0046/WB_postavki/issues/1/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1.0 + }, + { + "url": "https://api.github.com/repos/orbitalturtle/rust-lightning/issues/1", + "repository_url": "https://api.github.com/repos/orbitalturtle/rust-lightning", + "labels_url": "https://api.github.com/repos/orbitalturtle/rust-lightning/issues/1/labels{/name}", + "comments_url": "https://api.github.com/repos/orbitalturtle/rust-lightning/issues/1/comments", + "events_url": "https://api.github.com/repos/orbitalturtle/rust-lightning/issues/1/events", + "html_url": "https://github.com/orbitalturtle/rust-lightning/pull/1", + "id": 1960271599, + "node_id": "PR_kwDOKkKtgc5dsa_2", + "number": 1, + "title": "Testing", + "user": { + "login": "orbitalturtle", + "id": 33561706, + "node_id": "MDQ6VXNlcjMzNTYxNzA2", + "avatar_url": "https://avatars.githubusercontent.com/u/33561706?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/orbitalturtle", + "html_url": "https://github.com/orbitalturtle", + "followers_url": "https://api.github.com/users/orbitalturtle/followers", + "following_url": "https://api.github.com/users/orbitalturtle/following{/other_user}", + "gists_url": "https://api.github.com/users/orbitalturtle/gists{/gist_id}", + "starred_url": "https://api.github.com/users/orbitalturtle/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/orbitalturtle/subscriptions", + "organizations_url": "https://api.github.com/users/orbitalturtle/orgs", + "repos_url": "https://api.github.com/users/orbitalturtle/repos", + "events_url": "https://api.github.com/users/orbitalturtle/events{/privacy}", + "received_events_url": "https://api.github.com/users/orbitalturtle/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [ + + ], + "milestone": null, + "comments": 0, + "created_at": "2023-10-24T23:57:36Z", + "updated_at": "2023-11-13T00:27:11Z", + "closed_at": null, + "author_association": "OWNER", + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/orbitalturtle/rust-lightning/pulls/1", + "html_url": "https://github.com/orbitalturtle/rust-lightning/pull/1", + "diff_url": "https://github.com/orbitalturtle/rust-lightning/pull/1.diff", + "patch_url": "https://github.com/orbitalturtle/rust-lightning/pull/1.patch", + "merged_at": null + }, + "body": null, + "reactions": { + "url": "https://api.github.com/repos/orbitalturtle/rust-lightning/issues/1/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/orbitalturtle/rust-lightning/issues/1/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1.0 + }, + { + "url": "https://api.github.com/repos/graphql-python/graphql-server/issues/125", + "repository_url": "https://api.github.com/repos/graphql-python/graphql-server", + "labels_url": "https://api.github.com/repos/graphql-python/graphql-server/issues/125/labels{/name}", + "comments_url": "https://api.github.com/repos/graphql-python/graphql-server/issues/125/comments", + "events_url": "https://api.github.com/repos/graphql-python/graphql-server/issues/125/events", + "html_url": "https://github.com/graphql-python/graphql-server/pull/125", + "id": 1947684922, + "node_id": "PR_kwDOBR7HVc5dCA2d", + "number": 125, + "title": "test: add test cases to version tests", + "user": { + "login": "kiendang", + "id": 6521018, + "node_id": "MDQ6VXNlcjY1MjEwMTg=", + "avatar_url": "https://avatars.githubusercontent.com/u/6521018?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/kiendang", + "html_url": "https://github.com/kiendang", + "followers_url": "https://api.github.com/users/kiendang/followers", + "following_url": "https://api.github.com/users/kiendang/following{/other_user}", + "gists_url": "https://api.github.com/users/kiendang/gists{/gist_id}", + "starred_url": "https://api.github.com/users/kiendang/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/kiendang/subscriptions", + "organizations_url": "https://api.github.com/users/kiendang/orgs", + "repos_url": "https://api.github.com/users/kiendang/repos", + "events_url": "https://api.github.com/users/kiendang/events{/privacy}", + "received_events_url": "https://api.github.com/users/kiendang/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [ + + ], + "milestone": null, + "comments": 0, + "created_at": "2023-10-17T15:20:20Z", + "updated_at": "2023-10-17T15:22:36Z", + "closed_at": null, + "author_association": "COLLABORATOR", + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/graphql-python/graphql-server/pulls/125", + "html_url": "https://github.com/graphql-python/graphql-server/pull/125", + "diff_url": "https://github.com/graphql-python/graphql-server/pull/125.diff", + "patch_url": "https://github.com/graphql-python/graphql-server/pull/125.patch", + "merged_at": null + }, + "body": "Added some artificial test cases to the version tests added in #124 to make sure that these tests work correctly.", + "reactions": { + "url": "https://api.github.com/repos/graphql-python/graphql-server/issues/125/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/graphql-python/graphql-server/issues/125/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1.0 + }, + { + "url": "https://api.github.com/repos/rodrigsmor/currency-converter/issues/38", + "repository_url": "https://api.github.com/repos/rodrigsmor/currency-converter", + "labels_url": "https://api.github.com/repos/rodrigsmor/currency-converter/issues/38/labels{/name}", + "comments_url": "https://api.github.com/repos/rodrigsmor/currency-converter/issues/38/comments", + "events_url": "https://api.github.com/repos/rodrigsmor/currency-converter/issues/38/events", + "html_url": "https://github.com/rodrigsmor/currency-converter/pull/38", + "id": 1971491701, + "node_id": "PR_kwDOKR2oV85eSZuD", + "number": 38, + "title": "🧪 tests: Tests components UI", + "user": { + "login": "rodrigsmor", + "id": 78985382, + "node_id": "MDQ6VXNlcjc4OTg1Mzgy", + "avatar_url": "https://avatars.githubusercontent.com/u/78985382?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/rodrigsmor", + "html_url": "https://github.com/rodrigsmor", + "followers_url": "https://api.github.com/users/rodrigsmor/followers", + "following_url": "https://api.github.com/users/rodrigsmor/following{/other_user}", + "gists_url": "https://api.github.com/users/rodrigsmor/gists{/gist_id}", + "starred_url": "https://api.github.com/users/rodrigsmor/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/rodrigsmor/subscriptions", + "organizations_url": "https://api.github.com/users/rodrigsmor/orgs", + "repos_url": "https://api.github.com/users/rodrigsmor/repos", + "events_url": "https://api.github.com/users/rodrigsmor/events{/privacy}", + "received_events_url": "https://api.github.com/users/rodrigsmor/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [ + + ], + "milestone": null, + "comments": 0, + "created_at": "2023-11-01T00:38:58Z", + "updated_at": "2023-11-01T00:38:58Z", + "closed_at": null, + "author_association": "OWNER", + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/rodrigsmor/currency-converter/pulls/38", + "html_url": "https://github.com/rodrigsmor/currency-converter/pull/38", + "diff_url": "https://github.com/rodrigsmor/currency-converter/pull/38.diff", + "patch_url": "https://github.com/rodrigsmor/currency-converter/pull/38.patch", + "merged_at": null + }, + "body": null, + "reactions": { + "url": "https://api.github.com/repos/rodrigsmor/currency-converter/issues/38/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/rodrigsmor/currency-converter/issues/38/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1.0 + }, + { + "url": "https://api.github.com/repos/thanhduong001/4A2/issues/8", + "repository_url": "https://api.github.com/repos/thanhduong001/4A2", + "labels_url": "https://api.github.com/repos/thanhduong001/4A2/issues/8/labels{/name}", + "comments_url": "https://api.github.com/repos/thanhduong001/4A2/issues/8/comments", + "events_url": "https://api.github.com/repos/thanhduong001/4A2/issues/8/events", + "html_url": "https://github.com/thanhduong001/4A2/pull/8", + "id": 1955930996, + "node_id": "PR_kwDOKhgGTs5dd05-", + "number": 8, + "title": "test", + "user": { + "login": "thanhduong001", + "id": 52699111, + "node_id": "MDQ6VXNlcjUyNjk5MTEx", + "avatar_url": "https://avatars.githubusercontent.com/u/52699111?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/thanhduong001", + "html_url": "https://github.com/thanhduong001", + "followers_url": "https://api.github.com/users/thanhduong001/followers", + "following_url": "https://api.github.com/users/thanhduong001/following{/other_user}", + "gists_url": "https://api.github.com/users/thanhduong001/gists{/gist_id}", + "starred_url": "https://api.github.com/users/thanhduong001/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/thanhduong001/subscriptions", + "organizations_url": "https://api.github.com/users/thanhduong001/orgs", + "repos_url": "https://api.github.com/users/thanhduong001/repos", + "events_url": "https://api.github.com/users/thanhduong001/events{/privacy}", + "received_events_url": "https://api.github.com/users/thanhduong001/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [ + + ], + "milestone": null, + "comments": 0, + "created_at": "2023-10-22T14:50:17Z", + "updated_at": "2023-10-22T14:50:17Z", + "closed_at": null, + "author_association": "OWNER", + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/thanhduong001/4A2/pulls/8", + "html_url": "https://github.com/thanhduong001/4A2/pull/8", + "diff_url": "https://github.com/thanhduong001/4A2/pull/8.diff", + "patch_url": "https://github.com/thanhduong001/4A2/pull/8.patch", + "merged_at": null + }, + "body": null, + "reactions": { + "url": "https://api.github.com/repos/thanhduong001/4A2/issues/8/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/thanhduong001/4A2/issues/8/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1.0 + }, + { + "url": "https://api.github.com/repos/https-github-com-leehyjein/Dev-Project-Repository/issues/1", + "repository_url": "https://api.github.com/repos/https-github-com-leehyjein/Dev-Project-Repository", + "labels_url": "https://api.github.com/repos/https-github-com-leehyjein/Dev-Project-Repository/issues/1/labels{/name}", + "comments_url": "https://api.github.com/repos/https-github-com-leehyjein/Dev-Project-Repository/issues/1/comments", + "events_url": "https://api.github.com/repos/https-github-com-leehyjein/Dev-Project-Repository/issues/1/events", + "html_url": "https://github.com/https-github-com-leehyjein/Dev-Project-Repository/pull/1", + "id": 1955762209, + "node_id": "PR_kwDOKjeSac5ddUFT", + "number": 1, + "title": "Test", + "user": { + "login": "leehyjein", + "id": 80885540, + "node_id": "MDQ6VXNlcjgwODg1NTQw", + "avatar_url": "https://avatars.githubusercontent.com/u/80885540?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/leehyjein", + "html_url": "https://github.com/leehyjein", + "followers_url": "https://api.github.com/users/leehyjein/followers", + "following_url": "https://api.github.com/users/leehyjein/following{/other_user}", + "gists_url": "https://api.github.com/users/leehyjein/gists{/gist_id}", + "starred_url": "https://api.github.com/users/leehyjein/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/leehyjein/subscriptions", + "organizations_url": "https://api.github.com/users/leehyjein/orgs", + "repos_url": "https://api.github.com/users/leehyjein/repos", + "events_url": "https://api.github.com/users/leehyjein/events{/privacy}", + "received_events_url": "https://api.github.com/users/leehyjein/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [ + + ], + "milestone": null, + "comments": 0, + "created_at": "2023-10-22T04:59:24Z", + "updated_at": "2023-10-22T04:59:24Z", + "closed_at": null, + "author_association": "CONTRIBUTOR", + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/https-github-com-leehyjein/Dev-Project-Repository/pulls/1", + "html_url": "https://github.com/https-github-com-leehyjein/Dev-Project-Repository/pull/1", + "diff_url": "https://github.com/https-github-com-leehyjein/Dev-Project-Repository/pull/1.diff", + "patch_url": "https://github.com/https-github-com-leehyjein/Dev-Project-Repository/pull/1.patch", + "merged_at": null + }, + "body": null, + "reactions": { + "url": "https://api.github.com/repos/https-github-com-leehyjein/Dev-Project-Repository/issues/1/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/https-github-com-leehyjein/Dev-Project-Repository/issues/1/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1.0 + }, + { + "url": "https://api.github.com/repos/henriqueidt/poc-storybook-7/issues/10", + "repository_url": "https://api.github.com/repos/henriqueidt/poc-storybook-7", + "labels_url": "https://api.github.com/repos/henriqueidt/poc-storybook-7/issues/10/labels{/name}", + "comments_url": "https://api.github.com/repos/henriqueidt/poc-storybook-7/issues/10/comments", + "events_url": "https://api.github.com/repos/henriqueidt/poc-storybook-7/issues/10/events", + "html_url": "https://github.com/henriqueidt/poc-storybook-7/pull/10", + "id": 1960059260, + "node_id": "PR_kwDOJ4k6XM5drtu5", + "number": 10, + "title": "test", + "user": { + "login": "henriqueidt", + "id": 42181775, + "node_id": "MDQ6VXNlcjQyMTgxNzc1", + "avatar_url": "https://avatars.githubusercontent.com/u/42181775?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/henriqueidt", + "html_url": "https://github.com/henriqueidt", + "followers_url": "https://api.github.com/users/henriqueidt/followers", + "following_url": "https://api.github.com/users/henriqueidt/following{/other_user}", + "gists_url": "https://api.github.com/users/henriqueidt/gists{/gist_id}", + "starred_url": "https://api.github.com/users/henriqueidt/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/henriqueidt/subscriptions", + "organizations_url": "https://api.github.com/users/henriqueidt/orgs", + "repos_url": "https://api.github.com/users/henriqueidt/repos", + "events_url": "https://api.github.com/users/henriqueidt/events{/privacy}", + "received_events_url": "https://api.github.com/users/henriqueidt/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [ + + ], + "milestone": null, + "comments": 0, + "created_at": "2023-10-24T20:55:24Z", + "updated_at": "2023-10-24T20:55:24Z", + "closed_at": null, + "author_association": "OWNER", + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/henriqueidt/poc-storybook-7/pulls/10", + "html_url": "https://github.com/henriqueidt/poc-storybook-7/pull/10", + "diff_url": "https://github.com/henriqueidt/poc-storybook-7/pull/10.diff", + "patch_url": "https://github.com/henriqueidt/poc-storybook-7/pull/10.patch", + "merged_at": null + }, + "body": null, + "reactions": { + "url": "https://api.github.com/repos/henriqueidt/poc-storybook-7/issues/10/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/henriqueidt/poc-storybook-7/issues/10/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1.0 + }, + { + "url": "https://api.github.com/repos/jayasanka-sack/openmrs-esm-patient-chart/issues/4", + "repository_url": "https://api.github.com/repos/jayasanka-sack/openmrs-esm-patient-chart", + "labels_url": "https://api.github.com/repos/jayasanka-sack/openmrs-esm-patient-chart/issues/4/labels{/name}", + "comments_url": "https://api.github.com/repos/jayasanka-sack/openmrs-esm-patient-chart/issues/4/comments", + "events_url": "https://api.github.com/repos/jayasanka-sack/openmrs-esm-patient-chart/issues/4/events", + "html_url": "https://github.com/jayasanka-sack/openmrs-esm-patient-chart/pull/4", + "id": 1886101681, + "node_id": "PR_kwDOIp3CZM5ZyzVe", + "number": 4, + "title": "test", + "user": { + "login": "jayasanka-sack", + "id": 33048395, + "node_id": "MDQ6VXNlcjMzMDQ4Mzk1", + "avatar_url": "https://avatars.githubusercontent.com/u/33048395?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/jayasanka-sack", + "html_url": "https://github.com/jayasanka-sack", + "followers_url": "https://api.github.com/users/jayasanka-sack/followers", + "following_url": "https://api.github.com/users/jayasanka-sack/following{/other_user}", + "gists_url": "https://api.github.com/users/jayasanka-sack/gists{/gist_id}", + "starred_url": "https://api.github.com/users/jayasanka-sack/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/jayasanka-sack/subscriptions", + "organizations_url": "https://api.github.com/users/jayasanka-sack/orgs", + "repos_url": "https://api.github.com/users/jayasanka-sack/repos", + "events_url": "https://api.github.com/users/jayasanka-sack/events{/privacy}", + "received_events_url": "https://api.github.com/users/jayasanka-sack/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [ + + ], + "milestone": null, + "comments": 1, + "created_at": "2023-09-07T15:17:26Z", + "updated_at": "2023-11-28T11:47:21Z", + "closed_at": null, + "author_association": "OWNER", + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/jayasanka-sack/openmrs-esm-patient-chart/pulls/4", + "html_url": "https://github.com/jayasanka-sack/openmrs-esm-patient-chart/pull/4", + "diff_url": "https://github.com/jayasanka-sack/openmrs-esm-patient-chart/pull/4.diff", + "patch_url": "https://github.com/jayasanka-sack/openmrs-esm-patient-chart/pull/4.patch", + "merged_at": null + }, + "body": "## Requirements\r\n\r\n- [ ] This PR has a title that briefly describes the work done including the ticket number. If there is a ticket, make sure your PR title includes a [conventional commit](https://o3-dev.docs.openmrs.org/#/getting_started/contributing?id=your-pr-title-should-indicate-the-type-of-change-it-is) label. See existing PR titles for inspiration.\r\n- [ ] My work conforms to the [OpenMRS 3.0 Styleguide](https://om.rs/styleguide) and [design documentation](https://zeroheight.com/23a080e38/p/880723-introduction).\r\n- [ ] My work includes tests or is validated by existing tests.\r\n\r\n## Summary\r\n\r\n\r\n## Screenshots\r\n\r\n\r\n## Related Issue\r\n\r\n\r\n\r\n## Other\r\n\r\n", + "reactions": { + "url": "https://api.github.com/repos/jayasanka-sack/openmrs-esm-patient-chart/issues/4/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/jayasanka-sack/openmrs-esm-patient-chart/issues/4/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1.0 + }, + { + "url": "https://api.github.com/repos/SurenAvagyanG/test/issues/2", + "repository_url": "https://api.github.com/repos/SurenAvagyanG/test", + "labels_url": "https://api.github.com/repos/SurenAvagyanG/test/issues/2/labels{/name}", + "comments_url": "https://api.github.com/repos/SurenAvagyanG/test/issues/2/comments", + "events_url": "https://api.github.com/repos/SurenAvagyanG/test/issues/2/events", + "html_url": "https://github.com/SurenAvagyanG/test/pull/2", + "id": 1952380547, + "node_id": "PR_kwDOKifAhc5dSApw", + "number": 2, + "title": "Test", + "user": { + "login": "SurenAvagyanG", + "id": 28754624, + "node_id": "MDQ6VXNlcjI4NzU0NjI0", + "avatar_url": "https://avatars.githubusercontent.com/u/28754624?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/SurenAvagyanG", + "html_url": "https://github.com/SurenAvagyanG", + "followers_url": "https://api.github.com/users/SurenAvagyanG/followers", + "following_url": "https://api.github.com/users/SurenAvagyanG/following{/other_user}", + "gists_url": "https://api.github.com/users/SurenAvagyanG/gists{/gist_id}", + "starred_url": "https://api.github.com/users/SurenAvagyanG/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/SurenAvagyanG/subscriptions", + "organizations_url": "https://api.github.com/users/SurenAvagyanG/orgs", + "repos_url": "https://api.github.com/users/SurenAvagyanG/repos", + "events_url": "https://api.github.com/users/SurenAvagyanG/events{/privacy}", + "received_events_url": "https://api.github.com/users/SurenAvagyanG/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [ + + ], + "milestone": null, + "comments": 0, + "created_at": "2023-10-19T14:18:09Z", + "updated_at": "2023-10-19T14:19:25Z", + "closed_at": null, + "author_association": "OWNER", + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/SurenAvagyanG/test/pulls/2", + "html_url": "https://github.com/SurenAvagyanG/test/pull/2", + "diff_url": "https://github.com/SurenAvagyanG/test/pull/2.diff", + "patch_url": "https://github.com/SurenAvagyanG/test/pull/2.patch", + "merged_at": null + }, + "body": null, + "reactions": { + "url": "https://api.github.com/repos/SurenAvagyanG/test/issues/2/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/SurenAvagyanG/test/issues/2/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1.0 + }, + { + "url": "https://api.github.com/repos/gustabessa/desbravando-backend-unit-tests/issues/2", + "repository_url": "https://api.github.com/repos/gustabessa/desbravando-backend-unit-tests", + "labels_url": "https://api.github.com/repos/gustabessa/desbravando-backend-unit-tests/issues/2/labels{/name}", + "comments_url": "https://api.github.com/repos/gustabessa/desbravando-backend-unit-tests/issues/2/comments", + "events_url": "https://api.github.com/repos/gustabessa/desbravando-backend-unit-tests/issues/2/events", + "html_url": "https://github.com/gustabessa/desbravando-backend-unit-tests/pull/2", + "id": 1962286782, + "node_id": "PR_kwDOKk6dq85dzOaQ", + "number": 2, + "title": "Test: Create tests", + "user": { + "login": "artsandrade", + "id": 39040167, + "node_id": "MDQ6VXNlcjM5MDQwMTY3", + "avatar_url": "https://avatars.githubusercontent.com/u/39040167?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/artsandrade", + "html_url": "https://github.com/artsandrade", + "followers_url": "https://api.github.com/users/artsandrade/followers", + "following_url": "https://api.github.com/users/artsandrade/following{/other_user}", + "gists_url": "https://api.github.com/users/artsandrade/gists{/gist_id}", + "starred_url": "https://api.github.com/users/artsandrade/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/artsandrade/subscriptions", + "organizations_url": "https://api.github.com/users/artsandrade/orgs", + "repos_url": "https://api.github.com/users/artsandrade/repos", + "events_url": "https://api.github.com/users/artsandrade/events{/privacy}", + "received_events_url": "https://api.github.com/users/artsandrade/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [ + + ], + "milestone": null, + "comments": 0, + "created_at": "2023-10-25T21:50:41Z", + "updated_at": "2023-10-25T21:50:41Z", + "closed_at": null, + "author_association": "COLLABORATOR", + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/gustabessa/desbravando-backend-unit-tests/pulls/2", + "html_url": "https://github.com/gustabessa/desbravando-backend-unit-tests/pull/2", + "diff_url": "https://github.com/gustabessa/desbravando-backend-unit-tests/pull/2.diff", + "patch_url": "https://github.com/gustabessa/desbravando-backend-unit-tests/pull/2.patch", + "merged_at": null + }, + "body": null, + "reactions": { + "url": "https://api.github.com/repos/gustabessa/desbravando-backend-unit-tests/issues/2/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/gustabessa/desbravando-backend-unit-tests/issues/2/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1.0 + }, + { + "url": "https://api.github.com/repos/HamedAsoodeh/SolidityPersianWebDesign/issues/1", + "repository_url": "https://api.github.com/repos/HamedAsoodeh/SolidityPersianWebDesign", + "labels_url": "https://api.github.com/repos/HamedAsoodeh/SolidityPersianWebDesign/issues/1/labels{/name}", + "comments_url": "https://api.github.com/repos/HamedAsoodeh/SolidityPersianWebDesign/issues/1/comments", + "events_url": "https://api.github.com/repos/HamedAsoodeh/SolidityPersianWebDesign/issues/1/events", + "html_url": "https://github.com/HamedAsoodeh/SolidityPersianWebDesign/pull/1", + "id": 1987075703, + "node_id": "PR_kwDOKd3JQM5fHJwQ", + "number": 1, + "title": "test nin", + "user": { + "login": "Anens0", + "id": 129123586, + "node_id": "U_kgDOB7JFAg", + "avatar_url": "https://avatars.githubusercontent.com/u/129123586?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/Anens0", + "html_url": "https://github.com/Anens0", + "followers_url": "https://api.github.com/users/Anens0/followers", + "following_url": "https://api.github.com/users/Anens0/following{/other_user}", + "gists_url": "https://api.github.com/users/Anens0/gists{/gist_id}", + "starred_url": "https://api.github.com/users/Anens0/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/Anens0/subscriptions", + "organizations_url": "https://api.github.com/users/Anens0/orgs", + "repos_url": "https://api.github.com/users/Anens0/repos", + "events_url": "https://api.github.com/users/Anens0/events{/privacy}", + "received_events_url": "https://api.github.com/users/Anens0/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [ + + ], + "milestone": null, + "comments": 0, + "created_at": "2023-11-10T07:30:24Z", + "updated_at": "2023-11-25T11:01:57Z", + "closed_at": null, + "author_association": "NONE", + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/HamedAsoodeh/SolidityPersianWebDesign/pulls/1", + "html_url": "https://github.com/HamedAsoodeh/SolidityPersianWebDesign/pull/1", + "diff_url": "https://github.com/HamedAsoodeh/SolidityPersianWebDesign/pull/1.diff", + "patch_url": "https://github.com/HamedAsoodeh/SolidityPersianWebDesign/pull/1.patch", + "merged_at": null + }, + "body": "فایلهای تست رو انجام شده و بزودی در 10 هفته آینده بارگزاری شود ", + "reactions": { + "url": "https://api.github.com/repos/HamedAsoodeh/SolidityPersianWebDesign/issues/1/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/HamedAsoodeh/SolidityPersianWebDesign/issues/1/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1.0 + }, + { + "url": "https://api.github.com/repos/JLBegemot/examplepulsar/issues/8", + "repository_url": "https://api.github.com/repos/JLBegemot/examplepulsar", + "labels_url": "https://api.github.com/repos/JLBegemot/examplepulsar/issues/8/labels{/name}", + "comments_url": "https://api.github.com/repos/JLBegemot/examplepulsar/issues/8/comments", + "events_url": "https://api.github.com/repos/JLBegemot/examplepulsar/issues/8/events", + "html_url": "https://github.com/JLBegemot/examplepulsar/pull/8", + "id": 1943107333, + "node_id": "PR_kwDOKfhvE85cy0ls", + "number": 8, + "title": "Testing", + "user": { + "login": "OlaMarmarola", + "id": 147447561, + "node_id": "U_kgDOCMnfCQ", + "avatar_url": "https://avatars.githubusercontent.com/u/147447561?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/OlaMarmarola", + "html_url": "https://github.com/OlaMarmarola", + "followers_url": "https://api.github.com/users/OlaMarmarola/followers", + "following_url": "https://api.github.com/users/OlaMarmarola/following{/other_user}", + "gists_url": "https://api.github.com/users/OlaMarmarola/gists{/gist_id}", + "starred_url": "https://api.github.com/users/OlaMarmarola/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/OlaMarmarola/subscriptions", + "organizations_url": "https://api.github.com/users/OlaMarmarola/orgs", + "repos_url": "https://api.github.com/users/OlaMarmarola/repos", + "events_url": "https://api.github.com/users/OlaMarmarola/events{/privacy}", + "received_events_url": "https://api.github.com/users/OlaMarmarola/received_events", + "type": "User", + "site_admin": false + }, + "labels": [ + + ], + "state": "open", + "locked": false, + "assignee": null, + "assignees": [ + + ], + "milestone": null, + "comments": 0, + "created_at": "2023-10-14T09:10:22Z", + "updated_at": "2023-10-14T09:10:22Z", + "closed_at": null, + "author_association": "COLLABORATOR", + "active_lock_reason": null, + "draft": false, + "pull_request": { + "url": "https://api.github.com/repos/JLBegemot/examplepulsar/pulls/8", + "html_url": "https://github.com/JLBegemot/examplepulsar/pull/8", + "diff_url": "https://github.com/JLBegemot/examplepulsar/pull/8.diff", + "patch_url": "https://github.com/JLBegemot/examplepulsar/pull/8.patch", + "merged_at": null + }, + "body": "Hi \r\nplease check my changes", + "reactions": { + "url": "https://api.github.com/repos/JLBegemot/examplepulsar/issues/8/reactions", + "total_count": 0, + "+1": 0, + "-1": 0, + "laugh": 0, + "hooray": 0, + "confused": 0, + "heart": 0, + "rocket": 0, + "eyes": 0 + }, + "timeline_url": "https://api.github.com/repos/JLBegemot/examplepulsar/issues/8/timeline", + "performed_via_github_app": null, + "state_reason": null, + "score": 1.0 + } +] \ No newline at end of file diff --git a/test/github.test.js b/test/github.test.js index c6f278f..a152af2 100644 --- a/test/github.test.js +++ b/test/github.test.js @@ -41,9 +41,9 @@ describe('github.js', function() { }) }) - // OCK PR search test - describe.skip('#OCK.github.searchPullRequests(query, options);', async function() { - it('should start the task of archiving contributors for REPO_OWNER', async function() { + // PR search test + describe.skip('#searchPullRequests(query);', async function() { + it('should return the PRs matching query; only the first page;', async function() { this.timeout(100000); let prSearchResults = await githubApi.searchPullRequests(pullRequestsFixture.PR_SEARCH_QUERY); assert.isNotNull(prSearchResults, "No PR search results returned"); @@ -55,19 +55,61 @@ describe('github.js', function() { }) }) - // OCK PR search test - describe('#OCK.github.searchPullRequests(query, options);', async function() { - it('should start the task of archiving contributors for REPO_OWNER', async function() { + // Recursive PR search test + describe.skip('#recursivelySearchPullRequests(query, { maxResults: 198 });', async function() { + it('should return PRs list; return <200 results;', async function() { this.timeout(100000); - let prResults = await githubApi.recursiveSearchPullRequests("test", { maxResults: 198}); + let prResults = await githubApi.recursivelySearchPullRequests("test", { maxResults: 198}); assert.isNotNull(prResults, "No PR search results returned"); expect(prResults).to.be.an('array'); - expect(prResults).to.have.lengthOf.at.least(198); + expect(prResults).to.have.lengthOf.at.least(100); expect(prResults).to.have.lengthOf.at.most(200); expect(prResults[0]).to.include.all.keys('title', 'html_url', 'state', 'user', 'draft', 'repository_url', 'comments', 'comments_url', 'assignees', 'created_at', 'closed_at'); }) }) - + // PR aggregation test + describe.skip('#aggregateAllPullRequests(pullRequests, "repository_url");', async function() { + it('should group results by repository_url', async function() { + this.timeout(100000); + let groupedPRs = await githubApi.aggregateAllPullRequests(pullRequestsFixture.VALID_PR_SEARCH_RESULT_ITEMS); + assert.isNotNull(groupedPRs, "No PR results to group"); + expect(groupedPRs).to.be.an('array'); + expect(groupedPRs).to.have.lengthOf.lessThan(pullRequestsFixture.VALID_PR_SEARCH_RESULT_ITEMS.length); + expect(groupedPRs[0]).to.have.keys('repository_url', 'pull_requests'); + }) + }) + + // Get repo detail + describe.skip('#getRepoDetail("gitcommitshow/open-community-kit");', async function() { + it('should return repo details', async function() { + this.timeout(100000); + let repoDetail = await githubApi.getRepoDetail("gitcommitshow/open-community-kit"); + assert.isNotNull(repoDetail, "Repo detail not returned"); + expect(repoDetail).to.be.an('object'); + expect(repoDetail).to.include.all.keys('name', 'full_name', 'html_url', 'owner','description','stargazers_count', 'watchers_count', 'forks_count', 'open_issues_count', 'is_template', 'topics', 'archived', 'private', 'license'); + }) + }) + + describe.skip('#getRepoDetail("https://api.github.com/repos/gitcommitshow/open-community-kit");', async function() { + it('should return repo details', async function() { + this.timeout(100000); + let repoDetail = await githubApi.getRepoDetail("https://api.github.com/repos/gitcommitshow/open-community-kit"); + assert.isNotNull(repoDetail, "Repo detail not returned"); + expect(repoDetail).to.be.an('object'); + expect(repoDetail).to.include.all.keys('name', 'full_name', 'html_url', 'owner','description','stargazers_count', 'watchers_count', 'forks_count', 'open_issues_count', 'is_template', 'topics', 'archived', 'private', 'license'); + }) + }) + + describe('#archiveReposWithMatchingPullRequests('+pullRequestsFixture.PR_SEARCH_QUERY+', {maxResults: '+pullRequestsFixture.PR_SEARCH_MAX_RESULTS+'});', async function() { + it('should fetch and save repos with matching PR to a csv file', async function() { + this.timeout(100000); + let repos = await githubApi.archiveReposWithMatchingPullRequests(pullRequestsFixture.PR_SEARCH_QUERY, { maxResults: pullRequestsFixture.PR_SEARCH_MAX_RESULTS }); + assert.isNotNull(repos, "Repos not returned"); + expect(repos).to.be.an('array'); + expect(repos).to.have.lengthOf.lessThanOrEqual(pullRequestsFixture.PR_SEARCH_MAX_RESULTS); + expect(repos).to.include.all.keys('name', 'full_name', 'html_url', 'owner','description','stargazers_count', 'watchers_count', 'forks_count', 'open_issues_count', 'is_template', 'topics', 'archived', 'private', 'license'); + }) + }) }) \ No newline at end of file From ab57057b47d29d55171d2ca33bdaae84a0c65631 Mon Sep 17 00:00:00 2001 From: gitcommitshow Date: Wed, 20 Dec 2023 08:35:03 +0530 Subject: [PATCH 3/4] fix: pr search query format --- github.js | 2 +- test/lifecycle.test.js | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 test/lifecycle.test.js diff --git a/github.js b/github.js index 879e9b2..d76fd19 100644 --- a/github.js +++ b/github.js @@ -235,7 +235,7 @@ export async function searchPullRequests(query, options) { if(options && options.GITHUB_PERSONAL_TOKEN){ GITHUB_REQUEST_OPTIONS.headers["Authorization"] = "token "+options.GITHUB_PERSONAL_TOKEN; } - let queryString = encodeURIComponent(query || ''+'+type:pr'); + let queryString = encodeURIComponent((query || ''))+'+is:pull-request'; let url = `https://api.github.com/search/issues?q=${queryString}&per_page=100&page=${pageNo}&sort=${options.sort || 'created'}`; const { res, data } = await makeRequestWithRateLimit('GET', url, Object.assign({},GITHUB_REQUEST_OPTIONS)); console.log("PR search request finished"); diff --git a/test/lifecycle.test.js b/test/lifecycle.test.js new file mode 100644 index 0000000..5813019 --- /dev/null +++ b/test/lifecycle.test.js @@ -0,0 +1,14 @@ +import 'dotenv/config' +import { expect, assert } from "chai"; + + +describe('lifecycle', function() { + + describe('configs exist', async function() { + it('aperture configs', async function() { + assert.isNotNull(process.env.APERTURE_SERVICE_ADDRESS); + assert.isNotNull(process.env.APERTURE_API_KEY); + }) + }) + +}) \ No newline at end of file From b09f3cd8cd63131b4563e046cc129371e60fcff7 Mon Sep 17 00:00:00 2001 From: gitcommitshow Date: Wed, 20 Dec 2023 14:29:14 +0530 Subject: [PATCH 4/4] fix: increase wait time for requests --- ENV_SAMPLE | 3 ++- network.js | 14 +++++++++----- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/ENV_SAMPLE b/ENV_SAMPLE index df41ecb..d81e635 100644 --- a/ENV_SAMPLE +++ b/ENV_SAMPLE @@ -1,4 +1,5 @@ REPO_OWNER="Git-Commit-Show" GITHUB_PERSONAL_TOKEN="ghp_adsfdsf32sdfasdfcdcsdfsdf23sfasdf1" APERTURE_SERVICE_ADDRESS="my.app.fluxninja.com:443" -APERTURE_API_KEY="4dsfs323db7dsfsde310ca6dsdf12sfr4" \ No newline at end of file +APERTURE_API_KEY="4dsfs323db7dsfsde310ca6dsdf12sfr4" +MAX_RATE_LIMIT_WAIT_DURATION_MS=60000 \ No newline at end of file diff --git a/network.js b/network.js index da4fbba..003aec6 100644 --- a/network.js +++ b/network.js @@ -1,6 +1,7 @@ import * as https from 'https'; -import { ApertureClient } from "@fluxninja/aperture-js"; +import { ApertureClient, FlowStatus } from "@fluxninja/aperture-js"; +const MAX_RATE_LIMIT_WAIT_DURATION_MS = process.env.MAX_RATE_LIMIT_WAIT_DURATION_MS || 60000; // 10 mins var apertureClient; @@ -47,7 +48,9 @@ export async function makeRequest(method, url, requestOptions) { // Handle HTTP response stream let data = ''; res.on('data', chunk => data += chunk); - res.on('end', () => resolve({ res, data })); + res.on('end', function(){ + resolve({ res, data }) + }); }); req.on('error', error => { @@ -92,17 +95,18 @@ export async function makeRequest(method, url, requestOptions) { * } * */ export async function makeRequestWithRateLimit(method, url, options){ + if(!method) method = "GET"; let flow; try { flow = await getApertureClient().startFlow("external-api", { labels: { url: url, priority: 1, - tokens: 1, + tokens: ["POST", "PUT", "DELETE", "PATCH"].includes(method.toUpperCase()) ? 5 : 1, workload: 'api.github' }, grpcCallOptions: { - deadline: Date.now() + 300, // ms + deadline: Date.now() + MAX_RATE_LIMIT_WAIT_DURATION_MS, // ms }, }); } catch(err){ @@ -116,7 +120,7 @@ export async function makeRequestWithRateLimit(method, url, options){ // Add business logic to process incoming request console.log("Request accepted. Processing..."); // Wait for 500ms - await new Promise(resolve => setTimeout(resolve, 2000)); + await new Promise(resolve => setTimeout(resolve, 500)); const {res, data} = await makeRequest(...arguments) return { res, data} } else {