UNPKG

@mlaursen/release-script

Version:

The release script I normally use for packages I publish to npm

81 lines (70 loc) 1.85 kB
import confirm from "@inquirer/confirm"; import { Octokit } from "@octokit/core"; import dotenv from "dotenv"; export interface ConfigurableCreateReleaseOptions { repo: string; /** * @defaultValue `"mlaursen"` */ owner?: string; /** * The `.env` file to load to get the {@link tokenName} environment variable. * * @defaultValue `".env.local"` */ envPath?: string; /** * @defaultValue `"GITHUB_RELEASE_TOKEN"` */ tokenName?: string; } export interface CreateReleaseOptions extends ConfigurableCreateReleaseOptions { body: string; override?: boolean; tagName: string; prerelease: boolean; } export async function createRelease( options: CreateReleaseOptions ): Promise<void> { const { body, override, owner = "mlaursen", repo, prerelease, envPath = ".env.local", tagName, tokenName = "GITHUB_RELEASE_TOKEN", } = options; dotenv.config({ path: envPath, override, quiet: true }); const octokit = new Octokit({ auth: process.env[tokenName] }); try { const response = await octokit.request( "POST /repos/{owner}/{repo}/releases", { owner, repo, tag_name: tagName, body, prerelease, } ); console.log(`Created release: ${response.data.html_url}`); } catch (error) { console.error(error); console.log(); console.log( "The npm token is most likely expired or never created. Update the `.env.local` to include the latest GITHUB_TOKEN" ); console.log( "Regenerate the token: https://github.com/settings/personal-access-tokens" ); if ( !(await confirm({ message: "Try creating the Github release again?" })) ) { throw new Error("Unable to create a Github release"); } return createRelease({ ...options, override: true }); } }