diff --git a/lib/run-script-against-repositories.js b/lib/run-script-against-repositories.js index 2b4f3c6..2223291 100644 --- a/lib/run-script-against-repositories.js +++ b/lib/run-script-against-repositories.js @@ -1,7 +1,11 @@ +function filterCancelledRoutesFromResults(results) { + return results.filter(Boolean); +} + export async function runScriptAgainstRepositories(octokit, repositories, script, options) { - for (const repository of repositories) { + const results = await Promise.all(repositories.map(async repository => { octokit.log.info( - { octoherd: true }, + {octoherd: true}, "Running on %s ...", repository.full_name ); @@ -12,10 +16,14 @@ export async function runScriptAgainstRepositories(octokit, repositories, script octokit.log.setContext({repository: {id, owner, name}}); } - await script(octokit, repository, options); + const scriptResult = await script(octokit, repository, options); + + return [repository.full_name, scriptResult]; } catch (error) { if (!error.cancel) throw error; octokit.log.debug(error.message); } - } + })); + + return Object.fromEntries(filterCancelledRoutesFromResults(results)); } diff --git a/tests/run-script-against-resolved-repositories.test.js b/tests/run-script-against-resolved-repositories.test.js index ee97799..ecbda18 100644 --- a/tests/run-script-against-resolved-repositories.test.js +++ b/tests/run-script-against-resolved-repositories.test.js @@ -14,10 +14,20 @@ runAgainstRepos('run the script against the provided repositories', async () => const octokit = {log: {info: octokitInfoLogger}}; const octokitCoreRepository = {id: 456, owner: {login: 'octokit'}, name: 'core.js', full_name: 'octokit/core.js'}; const repositories = [octoherdCliRepository, octokitCoreRepository]; - const script = simple.spy(() => undefined); + const script = simple.stub().callFn((octokitInstance, repository, options) => { + switch (repository) { + case octoherdCliRepository: + return {foo: 'bar'}; + case octokitCoreRepository: + return {baz: 'qux'}; + default: + throw new Error('Unknown repository'); + } + }); - await runScriptAgainstRepositories(octokit, repositories, script, userOptions); + const results = await runScriptAgainstRepositories(octokit, repositories, script, userOptions); + equal(results, {[octoherdCliRepository.full_name]: {foo: 'bar'}, [octokitCoreRepository.full_name]: {baz: 'qux'}}); repositories.forEach((repository, index) => { equal(script.calls[index].args, [octokit, repository, userOptions]); equal(octokitInfoLogger.calls[index].args, [{octoherd: true}, "Running on %s ...", repository.full_name]);