From 16182e898662d088df11f0b04191e07e2208a7bb Mon Sep 17 00:00:00 2001 From: scottluskcis Date: Mon, 16 Dec 2024 13:41:05 -0500 Subject: [PATCH 1/3] new setting added EXCLUDE_TEAMS to AppConfig, added note in README --- README.md | 3 +++ src/shared/app-config.ts | 1 + 2 files changed, 4 insertions(+) diff --git a/README.md b/README.md index 6762266..4792933 100644 --- a/README.md +++ b/README.md @@ -105,6 +105,9 @@ GITHUB_API_VERSION=2022-11-28 # valid values are day, week, month, quarter, or year TIME_PERIOD=month +# any teams to exclude from the results (comma separated list) +EXCLUDE_TEAMS=team1,team2 + # pretty, json, hidden LOG_TYPE=pretty diff --git a/src/shared/app-config.ts b/src/shared/app-config.ts index 000e607..e7957dc 100644 --- a/src/shared/app-config.ts +++ b/src/shared/app-config.ts @@ -12,6 +12,7 @@ export class AppConfig { public static readonly GENERATE_DATA: boolean = AppConfig.getEnvVar("GENERATE_DATA", "true").toLowerCase() === "true"; public static readonly GITHUB_TOKENS_BY_ORG: { [key: string]: string } = AppConfig.getTokensByOrg(AppConfig.getEnvVar("GITHUB_TOKENS_BY_ORG")); public static readonly PER_PAGE: number = parseInt(AppConfig.getEnvVar("PER_PAGE", "100")); + public static readonly EXCLUDE_TEAMS: string[] = AppConfig.getEnvVar("EXCLUDE_TEAMS", "").split(",").filter((team) => team !== ""); // logging settings public static readonly MIN_LOG_LEVEL: number = parseInt(AppConfig.getEnvVar("MIN_LOG_LEVEL", "3")); From 71638f503a7f6d918aeeb3a61c2374dd342153dd Mon Sep 17 00:00:00 2001 From: scottluskcis Date: Mon, 16 Dec 2024 13:41:23 -0500 Subject: [PATCH 2/3] add check for ExcludeTeams and ignore processing of team if in the array --- src/data/copilot-associations-data.ts | 5 +++++ src/report/copilot-associations-report.ts | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/src/data/copilot-associations-data.ts b/src/data/copilot-associations-data.ts index b49c185..c9b1f3a 100644 --- a/src/data/copilot-associations-data.ts +++ b/src/data/copilot-associations-data.ts @@ -2,6 +2,7 @@ import { listCopilotSeats } from "../restapi/copilot"; import { getAuditLogForActor } from "../restapi/organizations"; import { listRepoContributors } from "../restapi/repositories"; import { listTeamMembers, listTeams } from "../restapi/teams"; +import { AppConfig } from "../shared/app-config"; import logger from "../shared/app-logger"; import { CopilotSeatAssignee, Repository, TeamInfo, TimePeriodType } from "../shared/shared-types"; import { timestampToDate } from "../shared/time-util"; @@ -123,6 +124,10 @@ async function processRepositories(repository_owner_name: string, seat_assignee: async function fetchOrgTeamsMembers(org: string, per_page: number, teams: { [team: string]: TeamInfo }, org_copilot_seats: CopilotSeatAssignee[]) { let team_count: number = 0; for await (const team of listTeams({ org, per_page })) { + if(AppConfig.EXCLUDE_TEAMS.includes(team.slug)) { + continue; + } + processTeams(org, team.slug, per_page, teams, org_copilot_seats); team_count++; } diff --git a/src/report/copilot-associations-report.ts b/src/report/copilot-associations-report.ts index e7d5f42..90b717f 100644 --- a/src/report/copilot-associations-report.ts +++ b/src/report/copilot-associations-report.ts @@ -109,6 +109,10 @@ function getTeamAssociations(data: CopilotAssociationsData): { member: string, t const member_teams: { [member: string]: Set } = {}; for (const team_name in data.teams) { + if(AppConfig.EXCLUDE_TEAMS.includes(team_name)) { + continue; + } + const team = data.teams[team_name]; const copilot_users = new Set(team.copilot_users); From ec5bd83a87ca587dbc8ac772f1bac4a21cd5478f Mon Sep 17 00:00:00 2001 From: scottluskcis Date: Mon, 16 Dec 2024 13:46:52 -0500 Subject: [PATCH 3/3] make check for exclude teams case insensitive by storing as lower case and comparing to lower case --- src/data/copilot-associations-data.ts | 2 +- src/report/copilot-associations-report.ts | 4 ++-- src/shared/app-config.ts | 5 ++++- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/data/copilot-associations-data.ts b/src/data/copilot-associations-data.ts index c9b1f3a..99c6794 100644 --- a/src/data/copilot-associations-data.ts +++ b/src/data/copilot-associations-data.ts @@ -124,7 +124,7 @@ async function processRepositories(repository_owner_name: string, seat_assignee: async function fetchOrgTeamsMembers(org: string, per_page: number, teams: { [team: string]: TeamInfo }, org_copilot_seats: CopilotSeatAssignee[]) { let team_count: number = 0; for await (const team of listTeams({ org, per_page })) { - if(AppConfig.EXCLUDE_TEAMS.includes(team.slug)) { + if (AppConfig.EXCLUDE_TEAMS.includes(team.slug.toLowerCase())) { continue; } diff --git a/src/report/copilot-associations-report.ts b/src/report/copilot-associations-report.ts index 90b717f..6909241 100644 --- a/src/report/copilot-associations-report.ts +++ b/src/report/copilot-associations-report.ts @@ -109,10 +109,10 @@ function getTeamAssociations(data: CopilotAssociationsData): { member: string, t const member_teams: { [member: string]: Set } = {}; for (const team_name in data.teams) { - if(AppConfig.EXCLUDE_TEAMS.includes(team_name)) { + if(AppConfig.EXCLUDE_TEAMS.includes(team_name.toLowerCase())) { continue; } - + const team = data.teams[team_name]; const copilot_users = new Set(team.copilot_users); diff --git a/src/shared/app-config.ts b/src/shared/app-config.ts index e7957dc..da66ffe 100644 --- a/src/shared/app-config.ts +++ b/src/shared/app-config.ts @@ -12,7 +12,10 @@ export class AppConfig { public static readonly GENERATE_DATA: boolean = AppConfig.getEnvVar("GENERATE_DATA", "true").toLowerCase() === "true"; public static readonly GITHUB_TOKENS_BY_ORG: { [key: string]: string } = AppConfig.getTokensByOrg(AppConfig.getEnvVar("GITHUB_TOKENS_BY_ORG")); public static readonly PER_PAGE: number = parseInt(AppConfig.getEnvVar("PER_PAGE", "100")); - public static readonly EXCLUDE_TEAMS: string[] = AppConfig.getEnvVar("EXCLUDE_TEAMS", "").split(",").filter((team) => team !== ""); + public static readonly EXCLUDE_TEAMS: string[] = AppConfig.getEnvVar("EXCLUDE_TEAMS", "") + .split(",") + .map((team) => team.trim().toLowerCase()) + .filter((team) => team !== ""); // logging settings public static readonly MIN_LOG_LEVEL: number = parseInt(AppConfig.getEnvVar("MIN_LOG_LEVEL", "3"));