Skip to content

Commit

Permalink
feat: Added exclude argument for languages (#97)
Browse files Browse the repository at this point in the history
* feat: Hide languages

* fix: Hidden not required

* fix: Correct URL safe language names

* fix: Correct URL safe language names for non API

* fix: Name uppercasing

* refactor\!: Changed hidden arg to exclude

* feat: exclude arg

* fix: Exclude fix for actions

* refactor: remove unnecessary modules

* fix: package-lock
  • Loading branch information
MiranDaniel committed Nov 20, 2022
1 parent 4435a69 commit 0e356b9
Show file tree
Hide file tree
Showing 14 changed files with 353 additions and 34 deletions.
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,9 @@ jobs:
with:
USERNAME: ${{ github.repository_owner }}
# UTC_OFFSET is optional, default to zero
UTC_OFFSET: 8
UTC_OFFSET: 8
# EXCLUDE is an optional comma seperated list of languages to exclude, defaults to ""
EXCLUDE: ""
```

---
Expand Down
4 changes: 4 additions & 0 deletions action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@ inputs:
required: false
description: 'The UTC offset used in the Productive Time Card.(e.g., 8, -3)'
default: 0
EXCLUDE:
required: false
description: 'A comma seperated list of languages to hide'
default: ''

runs:
using: 'node16'
Expand Down
14 changes: 12 additions & 2 deletions api/cards/most-commit-language.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
import {getCommitsLanguageSVGWithThemeName} from '../../src/cards/most-commit-lauguage-card';
import {changToNextGitHubToken} from '../utils/github-token-updater';
import {getErrorMsgCard} from '../utils/error-card';
import {translateLanguage} from '../../src/utils/translator'
import type {VercelRequest, VercelResponse} from '@vercel/node';

export default async (req: VercelRequest, res: VercelResponse) => {
const {username, theme = 'default'} = req.query;
let {username, theme = 'default', exclude = ""} = req.query;

if (typeof theme !== 'string') {
res.status(400).send('theme must be a string');
return;
Expand All @@ -13,12 +15,20 @@ export default async (req: VercelRequest, res: VercelResponse) => {
res.status(400).send('username must be a string');
return;
}
if (typeof exclude !== 'string') {
res.status(400).send('exclude must be a string');
return;
}
let excludeArr = <string[]>[];
exclude.split(",").forEach(function(val){
excludeArr.push(translateLanguage(val));
});

try {
let tokenIndex = 0;
while (true) {
try {
const cardSVG = await getCommitsLanguageSVGWithThemeName(username, theme);
const cardSVG = await getCommitsLanguageSVGWithThemeName(username, theme, excludeArr);
res.setHeader('Content-Type', 'image/svg+xml');
res.send(cardSVG);
return;
Expand Down
16 changes: 13 additions & 3 deletions api/cards/repos-per-language.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
import {getReposPerLanguageSVGWithThemeName} from '../../src/cards/repos-per-language-card';
import {changToNextGitHubToken} from '../utils/github-token-updater';
import {getErrorMsgCard} from '../utils/error-card';
import {translateLanguage} from '../../src/utils/translator'
import type {VercelRequest, VercelResponse} from '@vercel/node';

export default async (req: VercelRequest, res: VercelResponse) => {
const {username, theme = 'default'} = req.query;
let {username, theme = 'default', exclude = ""} = req.query;

if (typeof theme !== 'string') {
res.status(400).send('theme must be a string');
return;
Expand All @@ -13,11 +15,20 @@ export default async (req: VercelRequest, res: VercelResponse) => {
res.status(400).send('username must be a string');
return;
}
if (typeof exclude !== 'string') {
res.status(400).send('exclude must be a string');
return;
}
let excludeArr = <string[]>[];
exclude.split(",").forEach(function(val){
excludeArr.push(translateLanguage(val));
});

try {
let tokenIndex = 0;
while (true) {
try {
const cardSVG = await getReposPerLanguageSVGWithThemeName(username, theme);
const cardSVG = await getReposPerLanguageSVGWithThemeName(username, theme, excludeArr);
res.setHeader('Content-Type', 'image/svg+xml');
res.send(cardSVG);
return;
Expand All @@ -29,7 +40,6 @@ export default async (req: VercelRequest, res: VercelResponse) => {
}
}
} catch (err: any) {
console.log(err);
res.send(getErrorMsgCard(err.message, theme));
}
};
2 changes: 1 addition & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
"js-abbreviation-number": "^1.4.0",
"jsdom": "^16.4.0",
"moment": "^2.29.2",
"retry-axios": "^2.6.0"
"retry-axios": "^2.6.0",
},
"devDependencies": {
"@types/d3": "^7.1.0",
Expand Down
22 changes: 16 additions & 6 deletions src/app.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import {createCommitsPerLanguageCard} from './cards/most-commit-lauguage-card';
import {createStatsCard} from './cards/stats-card';
import {createProductiveTimeCard} from './cards/productive-time-card';
import {spawn} from 'child_process';
import { translateLanguage } from './utils/translator';
import {OUTPUT_PATH, generatePreviewMarkdown} from './utils/file-writer';

const execCmd = (cmd: string, args: string[] = []) =>
Expand Down Expand Up @@ -39,6 +40,8 @@ const action = async () => {
core.info(`Username: ${username}`);
const utcOffset = Number(core.getInput('UTC_OFFSET', {required: false}));
core.info(`UTC offset: ${utcOffset}`);
const exclude = core.getInput('EXCLUE', {required: false}).split(",");
core.info(`Excluded languages: ${utcOffset}`);
try {
// Remove old output
core.info(`Remove old cards...`);
Expand All @@ -55,15 +58,15 @@ const action = async () => {
// ReposPerLanguageCard
try {
core.info(`Creating ReposPerLanguageCard...`);
await createReposPerLanguageCard(username);
await createReposPerLanguageCard(username, exclude);
} catch (error: any) {
core.error(`Error when creating ReposPerLanguageCard \n${error.stack}`);
}

// CommitsPerLanguageCard
try {
core.info(`Creating CommitsPerLanguageCard...`);
await createCommitsPerLanguageCard(username);
await createCommitsPerLanguageCard(username, exclude);
} catch (error: any) {
core.error(`Error when creating CommitsPerLanguageCard \n${error.stack}`);
}
Expand Down Expand Up @@ -112,11 +115,11 @@ const action = async () => {
}
};

const main = async (username: string, utcOffset: number) => {
const main = async (username: string, utcOffset: number, exclude: Array<string>) => {
try {
await createProfileDetailsCard(username);
await createReposPerLanguageCard(username);
await createCommitsPerLanguageCard(username);
await createReposPerLanguageCard(username, exclude);
await createCommitsPerLanguageCard(username, exclude);
await createStatsCard(username);
await createProductiveTimeCard(username, utcOffset);
generatePreviewMarkdown(false);
Expand All @@ -132,5 +135,12 @@ if (process.argv.length == 2) {
} else {
const username = process.argv[2];
const utcOffset = Number(process.argv[3]);
main(username, utcOffset);
let exclude: Array<string> = [];
if(process.argv[4]){
process.argv[4].split(",").forEach(function(val){
exclude.push(translateLanguage(val));
});
};
console.log(exclude)
main(username, utcOffset, exclude);
}
14 changes: 8 additions & 6 deletions src/cards/most-commit-lauguage-card.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ import {getCommitLanguage, CommitLanguages} from '../github-api/commits-per-lang
import {createDonutChartCard} from '../templates/donut-chart-card';
import {writeSVG} from '../utils/file-writer';

export const createCommitsPerLanguageCard = async function (username: string) {
const statsData = await getCommitsLanguageData(username);
export const createCommitsPerLanguageCard = async function (username: string, exclude: Array<string>) {
const statsData = await getCommitsLanguageData(username, exclude);
for (const themeName of ThemeMap.keys()) {
const svgString = getCommitsLanguageSVG(statsData, themeName);
// output to folder, use 2- prefix for sort in preview
Expand All @@ -14,10 +14,11 @@ export const createCommitsPerLanguageCard = async function (username: string) {

export const getCommitsLanguageSVGWithThemeName = async function (
username: string,
themeName: string
themeName: string,
exclude: Array<string>
): Promise<string> {
if (!ThemeMap.has(themeName)) throw new Error('Theme does not exist');
const langData = await getCommitsLanguageData(username);
const langData = await getCommitsLanguageData(username, exclude);
return getCommitsLanguageSVG(langData, themeName);
};

Expand Down Expand Up @@ -47,9 +48,10 @@ const getCommitsLanguageSVG = function (
};

const getCommitsLanguageData = async function (
username: string
username: string,
exclude: Array<string>
): Promise<{name: string; value: number; color: string}[]> {
const commitLanguages: CommitLanguages = await getCommitLanguage(username);
const commitLanguages: CommitLanguages = await getCommitLanguage(username, exclude);
let langData = [];

// make a pie data
Expand Down
16 changes: 10 additions & 6 deletions src/cards/repos-per-language-card.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,22 @@ import {getRepoLanguages} from '../github-api/repos-per-language';
import {createDonutChartCard} from '../templates/donut-chart-card';
import {writeSVG} from '../utils/file-writer';

export const createReposPerLanguageCard = async function (username: string) {
const langData = await getRepoLanguageData(username);
export const createReposPerLanguageCard = async function (username: string, exclude: Array<string>) {
const langData = await getRepoLanguageData(username, exclude);
for (const themeName of ThemeMap.keys()) {
const svgString = getReposPerLanguageSVG(langData, themeName);
// output to folder, use 1- prefix for sort in preview
writeSVG(themeName, '1-repos-per-language', svgString);
}
};

export const getReposPerLanguageSVGWithThemeName = async function (username: string, themeName: string) {
export const getReposPerLanguageSVGWithThemeName = async function (
username: string,
themeName: string,
exclude: Array<string>
) {
if (!ThemeMap.has(themeName)) throw new Error('Theme does not exist');
const langData = await getRepoLanguageData(username);
const langData = await getRepoLanguageData(username, exclude);
return getReposPerLanguageSVG(langData, themeName);
};

Expand All @@ -23,8 +27,8 @@ const getReposPerLanguageSVG = function (langData: {name: string; value: number;
return svgString;
};

const getRepoLanguageData = async function (username: string) {
const repoLanguages = await getRepoLanguages(username);
const getRepoLanguageData = async function (username: string, exclude: Array<string>) {
const repoLanguages = await getRepoLanguages(username, exclude);
let langData = [];

// make a pie data
Expand Down
6 changes: 4 additions & 2 deletions src/github-api/commits-per-language.ts
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ const fetcher = (token: string, variables: any) => {
};

// repos per language
export async function getCommitLanguage(username: string): Promise<CommitLanguages> {
export async function getCommitLanguage(username: string, exclude: Array<string>): Promise<CommitLanguages> {
const commitLanguages = new CommitLanguages();

const res = await fetcher(process.env.GITHUB_TOKEN!, {
Expand All @@ -83,7 +83,9 @@ export async function getCommitLanguage(username: string): Promise<CommitLanguag
const langName = node.repository.primaryLanguage.name;
const langColor = node.repository.primaryLanguage.color;
const totalCount = node.contributions.totalCount;
commitLanguages.addLanguageCount(langName, langColor, totalCount);
if (!exclude.includes(langName)) {
commitLanguages.addLanguageCount(langName, langColor, totalCount);
}
}
);

Expand Down
6 changes: 4 additions & 2 deletions src/github-api/repos-per-language.ts
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ const fetcher = (token: string, variables: any) => {
};

// repos per language
export async function getRepoLanguages(username: string): Promise<RepoLanguages> {
export async function getRepoLanguages(username: string, exclude: Array<string>): Promise<RepoLanguages> {
let hasNextPage = true;
let cursor = null;
const repoLanguages = new RepoLanguages();
Expand All @@ -85,7 +85,9 @@ export async function getRepoLanguages(username: string): Promise<RepoLanguages>
if (node.primaryLanguage) {
const langName = node.primaryLanguage.name;
const langColor = node.primaryLanguage.color;
repoLanguages.addLanguage(langName, langColor);
if (!exclude.includes(langName)) {
repoLanguages.addLanguage(langName, langColor);
}
}
});

Expand Down
Loading

0 comments on commit 0e356b9

Please sign in to comment.