feat(cli): add help message and usage documentation

This commit is contained in:
2025-10-25 17:57:35 +01:00
parent c111fd6689
commit aa1013185a
2 changed files with 28 additions and 1 deletions

View File

@@ -1,6 +1,6 @@
{ {
"name": "issue-scheduler", "name": "issue-scheduler",
"description": "Schedule issues in Gitea or Github from issue templates", "description": "Schedule issues in Gitea or GitHub using issue templates",
"version": "0.0.0", "version": "0.0.0",
"main": "dist/index.js", "main": "dist/index.js",

View File

@@ -8,6 +8,10 @@ export interface CLIConfig {
// doesn't log to stdout/stderr (still logs to file if --log-file) // doesn't log to stdout/stderr (still logs to file if --log-file)
quiet: boolean quiet: boolean
} }
// TODO: Git client shouldn't be identified from the config,
// but from the host url or a custom config property
// TODO: add --list-issue-templates <user> <repo> <token> : list results from api.getIssueTemplates
// TODO: add other utility commands
export const defaults: CLIConfig = { export const defaults: CLIConfig = {
config_filepath: "config.toml", config_filepath: "config.toml",
@@ -97,14 +101,37 @@ export function optionalBooleanFlag(args: string[], flags: string[]): boolean {
return value === null; return value === null;
} }
const Usage = (program_name: string) => `\
Usage: ${program_name} [options...]
Issue Scheduler - Schedule issues in Gitea or GitHub using issue templates
Options:
-h, --help Display this message
-c, --config <filepath> Config file [default: "config.toml"]
-l, --log-file <filepath> Logs output to file
-v, --verbose Verbose logging
-q, --quiet Only logs to --log-file (if provided)
`
/** /**
* Parse command line arguments from a string array (process.argv) * Parse command line arguments from a string array (process.argv)
* @param args Command line arguments * @param args Command line arguments
* @return {CLIConfig} Parsed flags * @return {CLIConfig} Parsed flags
*/ */
export function parseArgs(args: string[]): CLIConfig { export function parseArgs(args: string[]): CLIConfig {
if (args.length < 2) { // [node executable, program path, ...]
// TODO: log error
process.exit(1)
}
const config = defaults const config = defaults
const helpValue = optionalBooleanFlag(args, ["--help", "-h"])
if (helpValue) {
console.log(Usage(args[1]!))
process.exit(0)
}
const configValue = optionalStringFlag(args, ["--config", "-c"]) const configValue = optionalStringFlag(args, ["--config", "-c"])
if (configValue) config.config_filepath = configValue if (configValue) config.config_filepath = configValue