Skip to content

Commit

Permalink
feat: add INCLUDE_ORGS env variable (anuraghazra#2275)
Browse files Browse the repository at this point in the history
This commit adds an INCLUDE_ORGS ENV variable that can be used to include results from
organizations into the GRS cards for self-deployed Vercel instances.

**Warning**
This is a hidden feature since we can not officially support this on the Public
Vercel instance due to GraphQL and Vercel rate/timeout limits. You can set this env
variable via Vercel's ENV variable menu (see
https://vercel.com/docs/concepts/projects/environment-variables).
  • Loading branch information
rickstaa committed Nov 21, 2022
1 parent 3cb205c commit ada9cf4
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 10 deletions.
2 changes: 1 addition & 1 deletion src/common/utils.js
Expand Up @@ -77,7 +77,7 @@ const isValidHexColor = (hexColor) => {
/**
* Returns boolean if value is either "true" or "false" else the value as it is.
*
* @param {string | boolean} value The value to parse.
* @param {string | boolean| undefined} value The value to parse.
* @returns {boolean | undefined } The parsed value.
*/
const parseBoolean = (value) => {
Expand Down
25 changes: 19 additions & 6 deletions src/fetchers/stats-fetcher.js
Expand Up @@ -7,6 +7,7 @@ import {
CustomError,
logger,
MissingParamError,
parseBoolean,
request,
wrapTextMultiline,
} from "../common/utils.js";
Expand All @@ -22,7 +23,7 @@ const fetcher = (variables, token) => {
return request(
{
query: `
query userInfo($login: String!) {
query userInfo($login: String!, $ownerAffiliations: [RepositoryAffiliation]) {
user(login: $login) {
name
login
Expand All @@ -45,7 +46,7 @@ const fetcher = (variables, token) => {
followers {
totalCount
}
repositories(ownerAffiliations: OWNER) {
repositories(ownerAffiliations: $ownerAffiliations) {
totalCount
}
}
Expand All @@ -70,9 +71,9 @@ const repositoriesFetcher = (variables, token) => {
return request(
{
query: `
query userInfo($login: String!, $after: String) {
query userInfo($login: String!, $after: String, $ownerAffiliations: [RepositoryAffiliation]) {
user(login: $login) {
repositories(first: 100, ownerAffiliations: OWNER, orderBy: {direction: DESC, field: STARGAZERS}, after: $after) {
repositories(first: 100, ownerAffiliations: $ownerAffiliations, orderBy: {direction: DESC, field: STARGAZERS}, after: $after) {
nodes {
name
stargazers {
Expand Down Expand Up @@ -149,7 +150,14 @@ const totalStarsFetcher = async (username, repoToHide) => {
let hasNextPage = true;
let endCursor = null;
while (hasNextPage) {
const variables = { login: username, first: 100, after: endCursor };
const variables = {
login: username,
first: 100,
after: endCursor,
ownerAffiliations: parseBoolean(process.env.INCLUDE_ORGS)
? ["OWNER", "COLLABORATOR"]
: ["OWNER"],
};
let res = await retryer(repositoriesFetcher, variables);

if (res.data.errors) {
Expand Down Expand Up @@ -203,7 +211,12 @@ const fetchStats = async (
rank: { level: "C", score: 0 },
};

let res = await retryer(fetcher, { login: username });
let res = await retryer(fetcher, {
login: username,
ownerAffiliations: parseBoolean(process.env.INCLUDE_ORGS)
? ["OWNER", "COLLABORATOR"]
: ["OWNER"],
});

// Catch GraphQL errors.
if (res.data.errors) {
Expand Down
12 changes: 9 additions & 3 deletions src/fetchers/top-languages-fetcher.js
Expand Up @@ -4,6 +4,7 @@ import {
CustomError,
logger,
MissingParamError,
parseBoolean,
request,
wrapTextMultiline,
} from "../common/utils.js";
Expand All @@ -19,10 +20,10 @@ const fetcher = (variables, token) => {
return request(
{
query: `
query userInfo($login: String!) {
query userInfo($login: String!, $ownerAffiliations: [RepositoryAffiliation]) {
user(login: $login) {
# fetch only owner repos & not forks
repositories(ownerAffiliations: OWNER, isFork: false, first: 100) {
repositories(ownerAffiliations: $ownerAffiliations, isFork: false, first: 100) {
nodes {
name
languages(first: 10, orderBy: {field: SIZE, direction: DESC}) {
Expand Down Expand Up @@ -57,7 +58,12 @@ const fetcher = (variables, token) => {
const fetchTopLanguages = async (username, exclude_repo = []) => {
if (!username) throw new MissingParamError(["username"]);

const res = await retryer(fetcher, { login: username });
const res = await retryer(fetcher, {
login: username,
ownerAffiliations: parseBoolean(process.env.INCLUDE_ORGS)
? ["OWNER", "COLLABORATOR"]
: ["OWNER"],
});

if (res.data.errors) {
logger.error(res.data.errors);
Expand Down

0 comments on commit ada9cf4

Please sign in to comment.