fork-version
Version:
Fork-Version automates version control tasks such as determining, updating, and committing versions, files, and changelogs, simplifying the process when adhering to the conventional commit standard.
1 lines • 14.3 kB
Source Map (JSON)
{"version":3,"sources":["../src/config/cli-arguments.js","../src/cli.ts"],"names":["meow","getUserConfig","Logger","FileManager","Git","validateConfig","inspectVersion","inspectTag","main","writeFileSync","join","ZodError"],"mappings":"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","file":"cli.cjs","sourcesContent":["import meow from \"meow\";\n//@ts-check\n\n// This file is javascript so the following helper text can be extracted to the readme\n// without the need for a build step, otherwise it would also be typescript...\n\nexport const helperText = `Usage:\n $ fork-version [command?] [options?]\n\nCommands:\n main Bumps the version, update files, generate changelog, commit, and tag. [Default when no command is provided]\n inspect-version Prints the current version and exits.\n inspect-tag Prints the current git tag and exits.\n validate-config Validates the configuration and exits.\n\nGeneral Options:\n --version Show the current version of Fork-Version and exit.\n --help Show this help message and exit.\n\nLocation Options:\n --file, -F List of the files to be updated. [Default: [\"bower.json\", \"deno.json\", \"deno.jsonc\", \"jsr.json\", \"jsr.jsonc\", \"manifest.json\", \"npm-shrinkwrap.json\", \"package-lock.json\", \"package.json\"]]\n --glob, -G Glob pattern to match files to be updated.\n --path, -P The path Fork-Version will run from. [Default: process.cwd()]\n\nOptions:\n --changelog Name of the changelog file. [Default: \"CHANGELOG.md\"]\n --header The header text for the changelog.\n --tag-prefix Specify a prefix for the created tag. [Default: \"v\"]\n --pre-release Mark this release as a pre-release.\n --pre-release-tag Mark this release with a tagged pre-release. [Example: \"alpha\", \"beta\", \"rc\"]\n --current-version If set, Fork-Version will use this version instead of trying to determine one.\n --next-version If set, Fork-Version will attempt to update to this version, instead of incrementing using \"conventional-commit\".\n --release-as Release as increments the version by the specified level. [Choices: \"major\", \"minor\", \"patch\"]\n\nFlags:\n --allow-multiple-versions Don't throw an error if multiple versions are found in the given files. [Default: true]\n --commit-all Commit all changes, not just files updated by Fork-Version.\n --changelog-all If this flag is set, all default commit types will be added to the changelog.\n --debug Output debug information.\n --dry-run No output will be written to disk or committed.\n --silent Run without logging to the terminal.\n --git-tag-fallback If unable to find a version in the given files, fallback and attempt to use the latest git tag. [Default: true]\n --sign If true, git will sign the commit with the systems GPG key.\n --verify If true, git will run user defined git hooks before committing.\n\n To negate a flag you can prefix it with \"no-\", for example \"--no-git-tag-fallback\" will not fallback to the latest git tag.\n\nSkip Steps:\n --skip-bump Skip the version bump step.\n --skip-changelog Skip updating the changelog.\n --skip-commit Skip committing the changes.\n --skip-tag Skip tagging the commit.\n\nConventional Changelog Overrides:\n --commit-url-format Override the default commit URL format.\n --compare-url-format Override the default compare URL format.\n --issue-url-format Override the default issue URL format.\n --user-url-format Override the default user URL format.\n --release-commit-message-format Override the default release commit message format.\n --release-message-suffix Add a suffix to the end of the release message.\n\nExit Codes:\n 0: Success\n 1: General Error\n 2: Unknown Command\n 3: Config File Validation Error\n\nExamples:\n $ fork-version\n Run fork-version in the current directory with default options.\n\n $ fork-version --path ./packages/my-package\n Run fork-version in the \"./packages/my-package\" directory.\n\n $ fork-version --file package.json --file MyApi.csproj\n Run fork-version and update the \"package.json\" and \"MyApi.csproj\" files.\n\n $ fork-version --glob \"*/package.json\"\n Run fork-version and update all \"package.json\" files in subdirectories.\n\n $ fork-version inspect-version\n Prints the current version and exits.`;\n\nexport function getCliArguments() {\n\treturn meow(helperText, {\n\t\timportMeta: import.meta,\n\t\tbooleanDefault: undefined,\n\t\thelpIndent: 0,\n\t\tflags: {\n\t\t\t// Commands\n\t\t\t/** @deprecated Set the `inspect-version` command instead. */\n\t\t\tinspectVersion: { type: \"boolean\" },\n\n\t\t\t// Options\n\t\t\tfiles: { type: \"string\", isMultiple: true, aliases: [\"file\"], shortFlag: \"F\" },\n\t\t\tglob: { type: \"string\", shortFlag: \"G\" },\n\t\t\tpath: { type: \"string\", shortFlag: \"P\" },\n\t\t\tchangelog: { type: \"string\" },\n\t\t\theader: { type: \"string\" },\n\t\t\ttagPrefix: { type: \"string\" },\n\t\t\tpreRelease: { type: \"boolean\" },\n\t\t\tpreReleaseTag: { type: \"string\" },\n\t\t\tcurrentVersion: { type: \"string\" },\n\t\t\tnextVersion: { type: \"string\" },\n\t\t\treleaseAs: { type: \"string\", choices: [\"major\", \"minor\", \"patch\"] },\n\n\t\t\t// Flags\n\t\t\tallowMultipleVersions: { type: \"boolean\" },\n\t\t\tcommitAll: { type: \"boolean\" },\n\t\t\tchangelogAll: { type: \"boolean\" },\n\t\t\tdebug: { type: \"boolean\" },\n\t\t\tdryRun: { type: \"boolean\" },\n\t\t\tsilent: { type: \"boolean\" },\n\t\t\tgitTagFallback: { type: \"boolean\" },\n\t\t\tsign: { type: \"boolean\" },\n\t\t\tverify: { type: \"boolean\" },\n\n\t\t\t// Skip Steps\n\t\t\tskipBump: { type: \"boolean\" },\n\t\t\tskipChangelog: { type: \"boolean\" },\n\t\t\tskipCommit: { type: \"boolean\" },\n\t\t\tskipTag: { type: \"boolean\" },\n\n\t\t\t// Changelog Overrides\n\t\t\tcommitUrlFormat: { type: \"string\" },\n\t\t\tcompareUrlFormat: { type: \"string\" },\n\t\t\tissueUrlFormat: { type: \"string\" },\n\t\t\tuserUrlFormat: { type: \"string\" },\n\t\t\treleaseCommitMessageFormat: { type: \"string\" },\n\t\t\treleaseMessageSuffix: { type: \"string\" },\n\t\t},\n\t});\n}\n","#!/usr/bin/env node\n\nimport { writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { ZodError } from \"zod\";\n\nimport { getCliArguments } from \"./config/cli-arguments\";\nimport { getUserConfig } from \"./config/user-config\";\nimport { Logger } from \"./services/logger\";\nimport { FileManager } from \"./files/file-manager\";\nimport { Git } from \"./services/git\";\n\nimport { validateConfig } from \"./commands/validate-config\";\nimport { inspectVersion } from \"./commands/inspect-version\";\nimport { inspectTag } from \"./commands/inspect-tag\";\nimport { main } from \"./commands/main\";\n\nasync function runFork() {\n\tconst startTime = Date.now();\n\n\tconst cliArguments = getCliArguments();\n\tconst config = await getUserConfig(cliArguments);\n\tconst logger = new Logger(config);\n\tconst fileManager = new FileManager(config, logger);\n\tconst git = new Git(config);\n\n\tswitch (config.command) {\n\t\tcase \"validate-config\": {\n\t\t\tvalidateConfig(config);\n\t\t\tbreak;\n\t\t}\n\n\t\tcase \"inspect-version\": {\n\t\t\tawait inspectVersion(config, logger, fileManager, git);\n\t\t\tbreak;\n\t\t}\n\n\t\tcase \"inspect-tag\": {\n\t\t\tawait inspectTag(config, git);\n\t\t\tbreak;\n\t\t}\n\n\t\tcase \"main\": {\n\t\t\tconst result = await main(config, logger, fileManager, git);\n\n\t\t\t//#region Post-run instructions\n\t\t\tconst branchName = await git.getBranchName();\n\t\t\tlogger.log(\n\t\t\t\t`\\nRun \\`git push --follow-tags origin ${branchName}\\` to push the changes and the tag.`,\n\t\t\t);\n\n\t\t\tif (result.current.files.some((file) => file.name === \"package.json\" && !file.isPrivate)) {\n\t\t\t\tconst npmTag = typeof config.preRelease === \"string\" ? config.preRelease : \"prerelease\";\n\t\t\t\tlogger.log(\n\t\t\t\t\t`${result.next.releaseType}`.startsWith(\"pre\")\n\t\t\t\t\t\t? `Run \\`npm publish --tag ${npmTag}\\` to publish the package.`\n\t\t\t\t\t\t: \"Run `npm publish` to publish the package.\",\n\t\t\t\t);\n\t\t\t}\n\t\t\t//#endregion Post-run instructions\n\n\t\t\tif (!config.dryRun && config.debug) {\n\t\t\t\twriteFileSync(\n\t\t\t\t\tjoin(config.path, `fork-version-${Date.now()}.debug-log.json`),\n\t\t\t\t\tJSON.stringify(result, null, 2),\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tbreak;\n\t\t}\n\n\t\tdefault: {\n\t\t\tconsole.error(`Unknown command: ${config.command}`);\n\t\t\tprocess.exit(2);\n\t\t}\n\t}\n\n\tlogger.debug(`Completed in ${Date.now() - startTime} ms`);\n}\n\nrunFork().catch((error) => {\n\tif (error instanceof Error) {\n\t\t// If the error is a ZodError, print the keys that failed validation\n\t\tif (error.cause instanceof ZodError) {\n\t\t\tconsole.error(error.message);\n\t\t\tfor (const err of error.cause.issues) {\n\t\t\t\tconsole.log(`${err.path.join(\", \")} => ${err.message}`);\n\t\t\t}\n\t\t\tprocess.exit(3);\n\t\t}\n\n\t\tconsole.error(error.message);\n\t\tif (error.stack) console.error(error.stack);\n\t} else {\n\t\tconsole.error(error);\n\t}\n\tprocess.exit(1);\n});\n"]}