import { Octokit } from "@octokit/core"; import dotenv from "dotenv"; import fsAsync from "fs/promises"; import { exec as execCallback } from "child_process"; import axios from "axios"; function exec(command: string) { return new Promise((resolve) => { execCallback(command, () => { resolve(); }); }); } dotenv.config(); const octokit = new Octokit({ auth: process.env.GITHUB_TOKEN }); (async () => { const deviconVersion = ( await octokit.request("GET /repos/{owner}/{repo}/releases/latest", { owner: "devicons", repo: "devicon", }) ).data.tag_name.replace("v", ""); const currentVersion = ( await octokit.request("GET /repos/{owner}/{repo}/releases/latest", { owner: "devicons", repo: "react-devicons", }) ).data.tag_name.replace("v", ""); await fsAsync.writeFile( ".npmrc", `//registry.npmjs.org/:_authToken=${process.env.NPM_TOKEN}` ); if (!deviconVersion.includes(currentVersion)) { console.log( `New version available (${currentVersion} -> ${deviconVersion})` ); console.log(" - Building"); await exec("pnpm build"); console.log(" - Publishing"); await exec( `pnpm publish dist --non-interactive --new-version ${deviconVersion}` ); console.log(" - Creating github release"); const release_id = ( await octokit.request("POST /repos/{owner}/{repo}/releases", { owner: "devicons", repo: "react-devicons", tag_name: `v${deviconVersion}`, }) ).data.id; await exec("zip react-devicons.zip dist -r"); await axios({ url: `https://uploads.github.com/repos/devicons/react-devicons/releases/${release_id}/assets?name=react-devicons.zip`, data: Buffer.from(await fsAsync.readFile("./react-devicons.zip")), headers: { Authorization: `token ${process.env.GITHUB_TOKEN}`, "Content-Type": "application/zip", }, }); console.log("All done!"); } else { console.log(`Version up to date (${deviconVersion})`); } })();