import fs from 'fs'; import ejs from 'ejs'; import * as core from '@actions/core'; import remark from 'remark'; import toc from 'remark-toc'; import git from './git'; import type { PaginationLink, ApiGetStarResponse, Stars, Star } from './types'; export const REPO_USERNAME = process.env.GITHUB_REPOSITORY?.split('/')[0]; export const API_STARRED_URL = `${process.env.GITHUB_API_URL}/users/${REPO_USERNAME}/starred`; const fsp = fs.promises; export async function renderer( data: { [key: string]: any }, templateString: string ): Promise { try { return ejs.render(templateString, data); } catch (error) { core.setFailed(`#renderer: ${error}`); return ''; } } export function generateMd(data: string): Promise { return new Promise((resolve) => { remark() .use(toc) .process(data, function (error, file) { if (error) { core.error('#generateMd'); core.error(error); return resolve(''); } return resolve(String(file)); }); }); } export const MARKDOWN_FILENAME: string = core.getInput('output-filename'); type File = { filename: string; data: string; }; export async function pushNewFiles(files: File[] = []): Promise { if (!files.length) return; await git.pull(); await Promise.all( files.map(({ filename, data }) => fsp.writeFile(filename, data)) ); await git.add(files.map(({ filename }) => filename)); await git.commit(`chore(updates): updated entries in files`); await git.push(); }