From 4892d691b051a8381014fd26309766aa89484b7a Mon Sep 17 00:00:00 2001 From: lowlighter <22963968+lowlighter@users.noreply.github.com> Date: Wed, 14 Apr 2021 13:12:19 +0200 Subject: [PATCH] Make repositories_affiliations support arrays, and use both affiliations and affiliationsOwner in queries #232 --- source/plugins/base/README.md | 8 ++++---- source/plugins/base/index.mjs | 8 +++++--- source/plugins/base/metadata.yml | 7 ++++--- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/source/plugins/base/README.md b/source/plugins/base/README.md index ab8acaac..4819926b 100644 --- a/source/plugins/base/README.md +++ b/source/plugins/base/README.md @@ -32,8 +32,8 @@ These are all enabled by default, but you can explicitely opt out from them. - uses: lowlighter/metrics@latest with: # ... other options - base: header, repositories # Only display "header" and "repositories" sections - repositories: 100 # Query only last 100 repositories - repositories_forks: no # Don't include forks - repositories_affiliations: owner # Display only repositories where user is owner + base: header, repositories # Only display "header" and "repositories" sections + repositories: 100 # Query only last 100 repositories + repositories_forks: no # Don't include forks + repositories_affiliations: owner, collaborator # Display only repositories where user is owner or collaborator ``` diff --git a/source/plugins/base/index.mjs b/source/plugins/base/index.mjs index 94fd9221..c7539827 100644 --- a/source/plugins/base/index.mjs +++ b/source/plugins/base/index.mjs @@ -7,7 +7,9 @@ export default async function({login, graphql, data, q, queries, imports}, conf) { //Load inputs console.debug(`metrics/compute/${login}/base > started`) - let {repositories, "repositories.forks":forks, "repositories.affiliations":affiliations} = imports.metadata.plugins.base.inputs({data, q, account:"bypass"}, {repositories:conf.settings.repositories ?? 100}) + let {repositories, "repositories.forks":_forks, "repositories.affiliations":_affiliations} = imports.metadata.plugins.base.inputs({data, q, account:"bypass"}, {repositories:conf.settings.repositories ?? 100}) + const forks = _forks ? "" : ", isFork: false" + const affiliations = _affiliations?.length ? `, ownerAffiliations: [${_affiliations.map(x => x.toLocaleUpperCase()).join(", ")}], affiliations: [${_affiliations.map(x => x.toLocaleUpperCase()).join(", ")}]` : "" //Skip initial data gathering if not needed if (conf.settings.notoken) @@ -23,7 +25,7 @@ try { //Query data from GitHub API console.debug(`metrics/compute/${login}/base > account ${account}`) - const queried = await graphql(queries.base[account]({login, "calendar.from":new Date(Date.now()-14*24*60*60*1000).toISOString(), "calendar.to":(new Date()).toISOString(), forks:forks ? "" : ", isFork: false", affiliations:affiliations ? `, ownerAffiliations: ${affiliations.toLocaleUpperCase()}` : ""})) + const queried = await graphql(queries.base[account]({login, "calendar.from":new Date(Date.now()-14*24*60*60*1000).toISOString(), "calendar.to":(new Date()).toISOString(), forks, affiliations})) Object.assign(data, {user:queried[account]}) postprocess?.[account]({login, data}) //Query repositories from GitHub API @@ -33,7 +35,7 @@ let pushed = 0 do { console.debug(`metrics/compute/${login}/base > retrieving repositories after ${cursor}`) - const {[account]:{repositories:{edges, nodes}}} = await graphql(queries.base.repositories({login, account, after:cursor ? `after: "${cursor}"` : "", repositories:Math.min(repositories, {user:100, organization:25}[account]), forks:forks ? "" : ", isFork: false", affiliations:affiliations ? `, ownerAffiliations: ${affiliations.toLocaleUpperCase()}` : ""})) + const {[account]:{repositories:{edges, nodes}}} = await graphql(queries.base.repositories({login, account, after:cursor ? `after: "${cursor}"` : "", repositories:Math.min(repositories, {user:100, organization:25}[account]), forks, affiliations})) cursor = edges?.[edges?.length-1]?.cursor data.user.repositories.nodes.push(...nodes) pushed = nodes.length diff --git a/source/plugins/base/metadata.yml b/source/plugins/base/metadata.yml index 7cd29a95..a2c243de 100644 --- a/source/plugins/base/metadata.yml +++ b/source/plugins/base/metadata.yml @@ -34,14 +34,15 @@ inputs: type: boolean default: no - # Filter repositories by user affiliations + # Filter repositories by user affiliations (you can specify multiple affiliations constraints) + # Set to "" to use all repositories related to you # Note that it may affect some plugin outputs (broad affiliations will result in less representative metrics) repositories_affiliations: description: Repositories affiliations - type: string + type: array + format: comma-separated default: owner values: - - "" # Use all repositories related to you - owner # Use repositories you own - collaborator # Use repositories you have contributed too - organization_member # Use repositories where you're an organization member