@halospv3/hce.shared-config
Version:
Automate commit message quality, changelogs, and CI/CD releases. Its `main` entry point is a Semantic Release config. Functions and classes are exposed for customization. An ESLint config, a Commitlint config, and addl. resources for .NET projects are als
63 lines (55 loc) • 2.23 kB
text/typescript
import * as console from 'node:console';
import { NugetRegistryInfo, getGithubOutput } from './NugetRegistryInfo.ts';
import esMain from 'es-main';
/**
* @returns if successful
* @throws {Error} if...
* - {@link process.argv} does not include...
* - `--packageId [string]`
* - `--source [string]`
* - Value of `await getGithubOutput())['new-release-version']`...
* - is not a valid Version
* - already exists at `source`
*/
async function main(): Promise<0> {
const arguments_ = process.argv.slice(2);
// Parse command-line arguments - https://stackoverflow.com/a/76298476/14894786
const options: {
packageId: string | undefined;
source: string | undefined;
} & Record<string, string | undefined> = { packageId: undefined, source: undefined };
for (let index = 0; index < arguments_.length; index += 2) {
const argumentName = arguments_[index];
const argumentValue = arguments_[index + 1];
if (argumentValue !== undefined && argumentName?.startsWith('--') === true) {
options[argumentName.slice(2)] = argumentValue;
}
}
if (typeof options.packageId !== 'string')
throw new Error('packageId must be a string');
if (typeof options.source !== 'string')
throw new Error('source must be a string');
const packageId = options.packageId,
source = options.source,
versionPattern = new RegExp(/\d+\.\d+\.\d+([-+].+)?/);
const ghOutput = await getGithubOutput() ?? {};
const matches = versionPattern.exec(ghOutput['new-release-version'] ?? '');
if (matches === null || matches.length === 0)
throw new Error(
'The variable new-release-version is not present in the GITHUB_OUTPUT env file or its value contains invalid characters.',
);
const nextVersion = matches[0];
const isPublished = await NugetRegistryInfo.IsNextVersionAlreadyPublished(
source,
packageId,
nextVersion,
);
if (typeof isPublished !== 'boolean')
throw new Error('isPublished is not a boolean');
if (isPublished)
throw new Error(`${packageId}@${nextVersion} already exists at ${source}.`);
console.log(`OK: ${packageId}@${nextVersion} does NOT yet exist at ${source}. Yay.`);
return 0;
}
if (esMain(import.meta))
await main();