in index.js [166:226]
async function main() {
async function handleRepository(repository, displayName = repository, isPrivate = false) {
console.log(`[${displayName}] Processing repository ${displayName}`);
const [ owner, repo ] = repository.split('/');
console.log(`[${displayName}] Loading cache entries...`);
const cache = await loadCacheForRepo(owner, repo);
console.log(`[${displayName}] Found ${Object.keys(cache).length} cache entries`);
let page = 1;
let shouldCheckNextPage = true;
while(shouldCheckNextPage) {
console.log(`[${displayName}#${page}] Requesting issues using etag: ${cache[page]}`);
try {
const headers = cache[page] ? { 'If-None-Match': cache[page] } : {};
const response = await octokit.issues.listForRepo({
owner,
repo,
page,
per_page: 100,
state: 'all',
sort: 'created',
direction: 'asc',
headers: headers
});
console.log(`[${displayName}#${page}] Remaining request limit: %s/%s`,
response.headers['x-ratelimit-remaining'],
response.headers['x-ratelimit-limit']
);
const indexName = isPrivate ? `private-issues-${owner}-${repo}` : `issues-${owner}-${repo}`;
await processGitHubIssues(owner, repo, response, page, indexName, displayName);
shouldCheckNextPage = response.headers.link && response.headers.link.includes('rel="next"');
page++;
} catch (error) {
if (error.name === 'HttpError' && error.status === 304) {
// Ignore not modified responses and continue with the next page.
console.log(`[${displayName}#${page}] Page was not modified. Continue with next page.`);
page++;
continue;
}
if(error.request && error.request.request.retryCount) {
console.error(`[${displayName}#${page}] Failed request for page after ${error.request.request.retryCount} retries.`);
console.error(`[${displayName}#${page}] ${error.toString()}`);
} else {
console.error(error);
}
throw error;
}
}
}
const results = await Promise.allSettled([
...config.repos.map(rep => handleRepository(rep)),
...(config.privateRepos.length > 0 ? config.privateRepos.map((rep, index) => handleRepository(rep, `PRIVATE_REPOS[${index}]`, true)) : [])
]);
if (results.some(({ status }) => status === 'rejected')) {
process.exit(1);
}
}