codestats-readme/action.ts
2023-09-24 15:26:57 +02:00

121 lines
4.8 KiB
TypeScript

import * as core from "@actions/core";
import * as fs from "fs";
import themes from "./themes/themes.json";
import { fetchProfile, fetchTopLanguages, fetchHistory } from "./src/fetcher";
import ProfileCard from "./src/cards/ProfileCard";
import TopLanguagesCard from "./src/cards/TopLanguagesCard";
import HistoryCard from "./src/cards/HistoryCard";
import ReactDOMServer from "react-dom/server";
import {
parseBoolean,
parseArray,
parseNumber,
clampValue,
} from "./src/common/utils";
async function main() {
try {
const username = core.getInput("username");
// Fetch Code::Stats API
console.log(`Fetch account data: codestats.net/users/${username}`);
const profile = await fetchProfile(username);
const toplang = await fetchTopLanguages(username);
const history = await fetchHistory(
username,
parseNumber(core.getInput("history_card_days_count"))
);
// Generate Profile Summary Card
const profilecard = ReactDOMServer.renderToStaticMarkup(
new ProfileCard(profile.username, profile.xp, profile.recentXp, {
// hide: parseArray(core.getInput("profile_card_hide_lines")),
// show_icons: core.getBooleanInput("profile_card_show_icons"),
// hide_rank: core.getBooleanInput("profile_card_hide_rank"),
// line_height: parseNumber(core.getInput("profile_card_line_height")),
// title: core.getInput("profile_card_title")
// ? core.getInput("profile_card_title")
// : `Code::Stats of ${username}`,
// title_color: core.getInput("common_title_color"),
// icon_color: core.getInput("common_icon_color"),
// text_color: core.getInput("common_text_color"),
// bg_color: core.getInput("common_bg_color"),
// hide_title: core.getBooleanInput("common_hide_title"),
// hide_border: core.getBooleanInput("common_hide_border"),
theme:
core.getInput("theme") in themes
? (core.getInput("theme") as keyof typeof themes)
: "default",
}).render()
);
console.log(`Generated ./codestats_profilecard_${username}.svg`);
fs.writeFileSync(`./codestats_profilecard_${username}.svg`, profilecard);
// Generate Top Languages Card
const toplangcard = ReactDOMServer.renderToStaticMarkup(
new TopLanguagesCard(username, toplang.langs, {
// hide: parseArray(core.getInput("common_hide_languages")),
// language_count: parseNumber(
// core.getInput("toplangs_card_language_count")
// ),
// card_width: 500,
// layout: core.getBooleanInput("toplangs_card_compact_layout")
// ? "compact"
// : undefined,
// title: core.getInput("toplangs_card_title")
// ? core.getInput("toplangs_card_title")
// : `Code::Stats of ${username}`,
// title_color: core.getInput("common_title_color"),
// text_color: core.getInput("common_text_color"),
// bg_color: core.getInput("common_bg_color"),
// hide_title: core.getBooleanInput("common_hide_title"),
// hide_border: core.getBooleanInput("common_hide_border"),
theme:
core.getInput("theme") in themes
? (core.getInput("theme") as keyof typeof themes)
: "default",
}).render()
);
console.log(`Generated ./codestats_toplangs_${username}.svg`);
fs.writeFileSync(`./codestats_toplangs_${username}.svg`, toplangcard);
// Generate History Card
const historycard = ReactDOMServer.renderToStaticMarkup(
new HistoryCard(username, history, {
// hide: parseArray(core.getInput("common_hide_languages")),
// language_count: parseNumber(
// core.getInput("history_card_language_count")
// ),
// hide_legend: core.getBooleanInput("history_card_hide_legend"),
// reverse_order: core.getBooleanInput("history_card_reverse_order"),
// width: 500,
// height: 300,
// title_color: core.getInput("common_title_color"),
// text_color: core.getInput("common_text_color"),
// bg_color: core.getInput("common_bg_color"),
// layout: core.getBooleanInput("history_card_horizontal_layout")
// ? "horizontal"
// : undefined,
// hide_title: core.getBooleanInput("common_hide_title"),
// hide_border: core.getBooleanInput("common_hide_border"),
theme:
core.getInput("theme") in themes
? (core.getInput("theme") as keyof typeof themes)
: "default",
}).render()
);
console.log(`Generated ./codestats_history_${username}.svg`);
fs.writeFileSync(`./codestats_history_${username}.svg`, historycard);
} catch (error) {
if (error instanceof Error) {
core.setFailed(error.message);
} else {
console.log(error);
}
}
}
main();