@eldrforge/kodrdriv 0.0.50 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -1
- package/dist/application.js +5 -3
- package/dist/application.js.map +1 -1
- package/dist/arguments.js +97 -70
- package/dist/arguments.js.map +1 -1
- package/dist/commands/audio-commit.js +7 -7
- package/dist/commands/audio-commit.js.map +1 -1
- package/dist/commands/audio-review.js +13 -13
- package/dist/commands/audio-review.js.map +1 -1
- package/dist/commands/clean.js +2 -2
- package/dist/commands/clean.js.map +1 -1
- package/dist/commands/commit.js +301 -36
- package/dist/commands/commit.js.map +1 -1
- package/dist/commands/link.js +7 -7
- package/dist/commands/link.js.map +1 -1
- package/dist/commands/publish.js +285 -306
- package/dist/commands/publish.js.map +1 -1
- package/dist/commands/release.js +171 -14
- package/dist/commands/release.js.map +1 -1
- package/dist/commands/review.js +52 -40
- package/dist/commands/review.js.map +1 -1
- package/dist/commands/select-audio.js +4 -4
- package/dist/commands/select-audio.js.map +1 -1
- package/dist/commands/tree.js +347 -34
- package/dist/commands/tree.js.map +1 -1
- package/dist/commands/unlink.js +5 -5
- package/dist/commands/unlink.js.map +1 -1
- package/dist/constants.js +28 -9
- package/dist/constants.js.map +1 -1
- package/dist/content/diff.js +122 -1
- package/dist/content/diff.js.map +1 -1
- package/dist/content/issues.js +17 -46
- package/dist/content/issues.js.map +1 -1
- package/dist/logging.js +3 -3
- package/dist/logging.js.map +1 -1
- package/dist/prompt/commit.js +2 -2
- package/dist/prompt/commit.js.map +1 -1
- package/dist/prompt/release.js +2 -2
- package/dist/prompt/release.js.map +1 -1
- package/dist/prompt/review.js +2 -2
- package/dist/prompt/review.js.map +1 -1
- package/dist/types.js +18 -5
- package/dist/types.js.map +1 -1
- package/dist/util/child.js +60 -4
- package/dist/util/child.js.map +1 -1
- package/dist/util/general.js +149 -13
- package/dist/util/general.js.map +1 -1
- package/dist/util/github.js +12 -8
- package/dist/util/github.js.map +1 -1
- package/dist/util/interactive.js +297 -0
- package/dist/util/interactive.js.map +1 -0
- package/dist/util/openai.js +87 -8
- package/dist/util/openai.js.map +1 -1
- package/dist/util/performance.js +8 -8
- package/dist/util/performance.js.map +1 -1
- package/dist/util/safety.js +4 -4
- package/dist/util/safety.js.map +1 -1
- package/dist/util/storage.js +2 -2
- package/dist/util/storage.js.map +1 -1
- package/package.json +6 -6
- package/test-increment.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publish.js","sources":["../../src/commands/publish.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\nimport path from 'path';\nimport * as Commit from './commit';\nimport * as Diff from '../content/diff';\nimport * as Release from './release';\nimport * as Link from './link';\nimport * as Unlink from './unlink';\nimport { getLogger, getDryRunLogger } from '../logging';\nimport { Config, PullRequest } from '../types';\nimport { run, runWithDryRunSupport } from '../util/child';\nimport * as GitHub from '../util/github';\nimport { create as createStorage } from '../util/storage';\nimport { incrementPatchVersion, getOutputPath } from '../util/general';\nimport { DEFAULT_OUTPUT_DIRECTORY } from '../constants';\nimport { safeJsonParse, validatePackageJson } from '../util/validation';\n\nconst scanNpmrcForEnvVars = async (storage: any): Promise<string[]> => {\n const logger = getLogger();\n const npmrcPath = path.join(process.cwd(), '.npmrc');\n const envVars: string[] = [];\n\n if (await storage.exists(npmrcPath)) {\n try {\n const npmrcContent = await storage.readFile(npmrcPath, 'utf-8');\n // Match environment variable patterns like ${VAR_NAME} or $VAR_NAME\n const envVarMatches = npmrcContent.match(/\\$\\{([^}]+)\\}|\\$([A-Z_][A-Z0-9_]*)/g);\n\n if (envVarMatches) {\n for (const match of envVarMatches) {\n // Extract variable name from ${VAR_NAME} or $VAR_NAME format\n const varName = match.replace(/\\$\\{|\\}|\\$/g, '');\n if (varName && !envVars.includes(varName)) {\n envVars.push(varName);\n }\n }\n }\n\n } catch (error: any) {\n logger.warn(`Failed to read .npmrc file at ${npmrcPath}: ${error.message}`);\n logger.verbose('This may affect environment variable detection for publishing');\n }\n } else {\n logger.debug('.npmrc file not found, skipping environment variable scan');\n }\n\n return envVars;\n};\n\nconst validateEnvironmentVariables = (requiredEnvVars: string[], isDryRun: boolean): void => {\n const logger = getDryRunLogger(isDryRun);\n const missingEnvVars: string[] = [];\n\n for (const envVar of requiredEnvVars) {\n if (!process.env[envVar]) {\n missingEnvVars.push(envVar);\n }\n }\n\n if (missingEnvVars.length > 0) {\n if (isDryRun) {\n logger.warn(`Missing required environment variables: ${missingEnvVars.join(', ')}`);\n } else {\n logger.error(`Missing required environment variables: ${missingEnvVars.join(', ')}`);\n throw new Error(`Missing required environment variables: ${missingEnvVars.join(', ')}. Please set these environment variables before running publish.`);\n }\n }\n};\n\nconst runPrechecks = async (runConfig: Config): Promise<void> => {\n const isDryRun = runConfig.dryRun || false;\n const logger = getDryRunLogger(isDryRun);\n const storage = createStorage({ log: logger.info });\n\n logger.info('Running prechecks...');\n\n // Check if we're in a git repository\n try {\n if (isDryRun) {\n logger.info('Would check git repository with: git rev-parse --git-dir');\n } else {\n await run('git rev-parse --git-dir');\n }\n\n } catch (error: any) {\n if (!isDryRun) {\n // Preserve the original error message to help with debugging\n const originalMessage = error.message || error.toString();\n throw new Error(`Not in a git repository or git command failed: ${originalMessage}. Please run this command from within a git repository.`);\n }\n }\n\n // Check for uncommitted changes\n logger.info('Checking for uncommitted changes...');\n try {\n if (isDryRun) {\n logger.info('Would check git status with: git status --porcelain');\n } else {\n const { stdout } = await run('git status --porcelain');\n if (stdout.trim()) {\n throw new Error('Working directory has uncommitted changes. Please commit or stash your changes before running publish.');\n }\n }\n\n } catch (error: any) {\n if (!isDryRun) {\n // Preserve the original error message to help with debugging\n const originalMessage = error.message || error.toString();\n throw new Error(`Failed to check git status: ${originalMessage}. Please ensure you are in a valid git repository and try again.`);\n }\n }\n\n // Check if we're on a release branch\n logger.info('Checking current branch...');\n if (isDryRun) {\n logger.info('Would verify current branch is a release branch (starts with \"release/\")');\n } else {\n const currentBranch = await GitHub.getCurrentBranchName();\n if (!currentBranch.startsWith('release/')) {\n throw new Error(`Current branch '${currentBranch}' is not a release branch. Please switch to a release branch (e.g., release/1.0.0) before running publish.`);\n }\n }\n\n // Check if prepublishOnly script exists in package.json\n logger.info('Checking for prepublishOnly script...');\n const packageJsonPath = path.join(process.cwd(), 'package.json');\n\n if (!await storage.exists(packageJsonPath)) {\n if (!isDryRun) {\n throw new Error('package.json not found in current directory.');\n } else {\n logger.warn('package.json not found in current directory.');\n }\n } else {\n let packageJson;\n try {\n const packageJsonContents = await storage.readFile(packageJsonPath, 'utf-8');\n const parsed = safeJsonParse(packageJsonContents, packageJsonPath);\n packageJson = validatePackageJson(parsed, packageJsonPath);\n\n } catch (error) {\n if (!isDryRun) {\n throw new Error('Failed to parse package.json. Please ensure it contains valid JSON.');\n } else {\n logger.warn('Failed to parse package.json. Please ensure it contains valid JSON.');\n }\n }\n\n if (packageJson && !packageJson.scripts?.prepublishOnly) {\n if (!isDryRun) {\n throw new Error('prepublishOnly script is required in package.json but was not found. Please add a prepublishOnly script that runs your pre-flight checks (e.g., clean, lint, build, test).');\n } else {\n logger.warn('prepublishOnly script is required in package.json but was not found.');\n }\n }\n }\n\n // Check required environment variables\n logger.verbose('Checking required environment variables...');\n const coreRequiredEnvVars = runConfig.publish?.requiredEnvVars || [];\n const npmrcEnvVars = isDryRun ? [] : await scanNpmrcForEnvVars(storage); // Skip .npmrc scan in dry run\n const allRequiredEnvVars = [...new Set([...coreRequiredEnvVars, ...npmrcEnvVars])];\n\n if (allRequiredEnvVars.length > 0) {\n logger.verbose(`Required environment variables: ${allRequiredEnvVars.join(', ')}`);\n validateEnvironmentVariables(allRequiredEnvVars, isDryRun);\n } else {\n logger.verbose('No required environment variables specified.');\n }\n\n logger.info('All prechecks passed.');\n};\n\nexport const execute = async (runConfig: Config): Promise<void> => {\n const isDryRun = runConfig.dryRun || false;\n const logger = getDryRunLogger(isDryRun);\n const storage = createStorage({ log: logger.info });\n\n // Track whether the publish process completed successfully\n let publishCompleted = false;\n // Track whether we've unlinked packages (and thus need to restore them)\n let packagesUnlinked = false;\n\n // Run prechecks before starting any work\n await runPrechecks(runConfig);\n\n logger.info('Starting release process...');\n\n try {\n // Unlink all workspace packages before starting (if enabled)\n const shouldUnlink = runConfig.publish?.unlinkWorkspacePackages !== false; // default to true\n if (shouldUnlink) {\n logger.verbose('Unlinking workspace packages...');\n await Unlink.execute(runConfig);\n packagesUnlinked = true;\n } else {\n logger.verbose('Skipping unlink workspace packages (disabled in config).');\n }\n\n let pr: PullRequest | null = null;\n\n if (isDryRun) {\n logger.info('Would check for existing pull request');\n logger.info('Assuming no existing PR found for demo purposes');\n } else {\n const branchName = await GitHub.getCurrentBranchName();\n pr = await GitHub.findOpenPullRequestByHeadRef(branchName);\n }\n\n if (pr) {\n logger.info(`Found existing pull request for branch: ${pr.html_url}`);\n } else {\n logger.info('No open pull request found, starting new release publishing process...');\n // 1. Prepare for release\n logger.verbose('Preparing for release: switching from workspace to remote dependencies.');\n\n logger.verbose('Updating dependencies to latest versions from registry');\n const updatePatterns = runConfig.publish?.dependencyUpdatePatterns;\n if (updatePatterns && updatePatterns.length > 0) {\n logger.verbose(`Updating dependencies matching patterns: ${updatePatterns.join(', ')}`);\n const patternsArg = updatePatterns.join(' ');\n await runWithDryRunSupport(`npm update ${patternsArg}`, isDryRun);\n } else {\n logger.verbose('No dependency update patterns specified, updating all dependencies');\n await runWithDryRunSupport('npm update', isDryRun);\n }\n\n logger.verbose('Staging changes for release commit');\n await runWithDryRunSupport('git add package.json package-lock.json', isDryRun);\n\n logger.info('Running prepublishOnly script...');\n await runWithDryRunSupport('npm run prepublishOnly', isDryRun);\n\n logger.verbose('Checking for staged changes...');\n if (isDryRun) {\n logger.verbose('Assuming staged changes exist for demo purposes');\n logger.verbose('Would create commit...');\n await Commit.execute(runConfig);\n } else {\n if (await Diff.hasStagedChanges()) {\n logger.verbose('Staged changes found, creating commit...');\n await Commit.execute(runConfig);\n } else {\n logger.verbose('No changes to commit, skipping commit.');\n }\n }\n\n logger.info('Bumping version...');\n // Manually increment version without creating a tag\n if (isDryRun) {\n logger.info('Would manually increment patch version in package.json and commit');\n } else {\n const packageJsonContents = await storage.readFile('package.json', 'utf-8');\n const parsed = safeJsonParse(packageJsonContents, 'package.json');\n const packageJson = validatePackageJson(parsed, 'package.json');\n const currentVersion = packageJson.version;\n const newVersion = incrementPatchVersion(currentVersion);\n packageJson.version = newVersion;\n await storage.writeFile('package.json', JSON.stringify(packageJson, null, 2) + '\\n', 'utf-8');\n logger.info(`Version bumped from ${currentVersion} to ${newVersion}`);\n\n // Stage and commit the version change\n await run('git add package.json');\n await run(`git commit -m \"chore: bump version to ${newVersion}\"`);\n logger.info(`Version change committed: ${newVersion}`);\n }\n\n logger.info('Generating release notes...');\n const releaseSummary = await Release.execute(runConfig);\n\n if (isDryRun) {\n logger.info('Would write release notes to RELEASE_NOTES.md and RELEASE_TITLE.md in output directory');\n } else {\n const outputDirectory = runConfig.outputDirectory || DEFAULT_OUTPUT_DIRECTORY;\n await storage.ensureDirectory(outputDirectory);\n\n const releaseNotesPath = getOutputPath(outputDirectory, 'RELEASE_NOTES.md');\n const releaseTitlePath = getOutputPath(outputDirectory, 'RELEASE_TITLE.md');\n\n await storage.writeFile(releaseNotesPath, releaseSummary.body, 'utf-8');\n await storage.writeFile(releaseTitlePath, releaseSummary.title, 'utf-8');\n logger.info(`Release notes and title generated and saved to ${releaseNotesPath} and ${releaseTitlePath}.`);\n }\n\n logger.info('Pushing to origin...');\n // Get current branch name and push explicitly to avoid pushing to wrong remote/branch\n const currentBranch = await GitHub.getCurrentBranchName();\n await runWithDryRunSupport(`git push origin ${currentBranch}`, isDryRun);\n\n logger.info('Creating pull request...');\n if (isDryRun) {\n logger.info('Would get commit title and create PR with GitHub API');\n pr = { number: 123, html_url: 'https://github.com/mock/repo/pull/123', labels: [] } as PullRequest;\n } else {\n const { stdout: commitTitle } = await run('git log -1 --pretty=%B');\n pr = await GitHub.createPullRequest(commitTitle, 'Automated release PR.', await GitHub.getCurrentBranchName());\n if (!pr) {\n throw new Error('Failed to create pull request.');\n }\n logger.info(`Pull request created: ${pr.html_url}`);\n }\n }\n\n logger.info(`Waiting for PR #${pr!.number} checks to complete...`);\n if (!isDryRun) {\n // Configure timeout and user confirmation behavior\n const timeout = runConfig.publish?.checksTimeout || 300000; // 5 minutes default\n const senditMode = runConfig.publish?.sendit || false;\n // sendit flag overrides skipUserConfirmation - if sendit is true, skip confirmation\n const skipUserConfirmation = senditMode || runConfig.publish?.skipUserConfirmation || false;\n\n await GitHub.waitForPullRequestChecks(pr!.number, {\n timeout,\n skipUserConfirmation\n });\n }\n\n const mergeMethod = runConfig.publish?.mergeMethod || 'squash';\n if (isDryRun) {\n logger.info(`Would merge PR #${pr!.number} using ${mergeMethod} method`);\n } else {\n try {\n await GitHub.mergePullRequest(pr!.number, mergeMethod);\n } catch (error: any) {\n // Check if this is a merge conflict error\n if (error.message && (\n error.message.includes('not mergeable') ||\n error.message.includes('Pull Request is not mergeable') ||\n error.message.includes('merge conflict')\n )) {\n logger.error(`❌ Pull Request #${pr!.number} has merge conflicts that need to be resolved.`);\n logger.error('');\n logger.error('📋 To resolve this issue:');\n logger.error(` 1. Visit the Pull Request: ${pr!.html_url}`);\n logger.error(' 2. Resolve the merge conflicts through GitHub\\'s web interface or locally');\n logger.error(' 3. Once conflicts are resolved, re-run the publish command');\n logger.error('');\n logger.error('💡 The command will automatically detect the existing PR and continue from where it left off.');\n throw new Error(`Merge conflicts detected in PR #${pr!.number}. Please resolve conflicts and re-run the command.`);\n } else {\n // Re-throw other merge errors\n throw error;\n }\n }\n }\n\n logger.info('Checking out main branch...');\n await runWithDryRunSupport('git checkout main', isDryRun);\n await runWithDryRunSupport('git pull origin main', isDryRun);\n\n // Now create and push the tag on the main branch\n logger.info('Creating release tag...');\n let tagName: string;\n if (isDryRun) {\n logger.info('Would read package.json version and create git tag');\n tagName = 'v1.0.0'; // Mock version for dry run\n } else {\n const packageJsonContents = await storage.readFile('package.json', 'utf-8');\n const { version } = JSON.parse(packageJsonContents);\n tagName = `v${version}`;\n\n // Check if tag already exists locally\n try {\n const { stdout } = await run(`git tag -l ${tagName}`);\n if (stdout.trim() === tagName) {\n logger.info(`Tag ${tagName} already exists locally, skipping tag creation`);\n } else {\n await run(`git tag ${tagName}`);\n logger.info(`Created local tag: ${tagName}`);\n }\n } catch (error) {\n // If git tag -l fails, create the tag anyway\n await run(`git tag ${tagName}`);\n logger.info(`Created local tag: ${tagName}`);\n }\n\n // Check if tag exists on remote before pushing\n let tagWasPushed = false;\n try {\n const { stdout } = await run(`git ls-remote origin refs/tags/${tagName}`);\n if (stdout.trim()) {\n logger.info(`Tag ${tagName} already exists on remote, skipping push`);\n } else {\n await run(`git push origin ${tagName}`);\n logger.info(`Pushed tag to remote: ${tagName}`);\n tagWasPushed = true;\n }\n } catch (error) {\n // If ls-remote fails, try to push anyway (might be a new remote)\n try {\n await run(`git push origin ${tagName}`);\n logger.info(`Pushed tag to remote: ${tagName}`);\n tagWasPushed = true;\n } catch (pushError: any) {\n if (pushError.message && pushError.message.includes('already exists')) {\n logger.info(`Tag ${tagName} already exists on remote, continuing...`);\n } else {\n throw pushError;\n }\n }\n }\n\n // If we just pushed a new tag, wait for GitHub to process it\n if (tagWasPushed) {\n logger.verbose('Waiting for GitHub to process the pushed tag...');\n await new Promise(resolve => setTimeout(resolve, 5000)); // 5 second delay\n }\n }\n\n logger.info('Creating GitHub release...');\n if (isDryRun) {\n logger.info('Would read package.json version and create GitHub release with retry logic');\n } else {\n const outputDirectory = runConfig.outputDirectory || DEFAULT_OUTPUT_DIRECTORY;\n const releaseNotesPath = getOutputPath(outputDirectory, 'RELEASE_NOTES.md');\n const releaseTitlePath = getOutputPath(outputDirectory, 'RELEASE_TITLE.md');\n\n const releaseNotesContent = await storage.readFile(releaseNotesPath, 'utf-8');\n const releaseTitle = await storage.readFile(releaseTitlePath, 'utf-8');\n\n // Create release with retry logic to handle GitHub tag processing delays\n let retries = 3;\n while (retries > 0) {\n try {\n await GitHub.createRelease(tagName, releaseTitle, releaseNotesContent);\n logger.info(`GitHub release created successfully for tag: ${tagName}`);\n break; // Success - exit retry loop\n } catch (error: any) {\n // Check if this is a tag-not-found error that we can retry\n const isTagNotFoundError = error.message && (\n error.message.includes('not found') ||\n error.message.includes('does not exist') ||\n error.message.includes('Reference does not exist')\n );\n\n if (isTagNotFoundError && retries > 1) {\n logger.verbose(`Tag ${tagName} not yet available on GitHub, retrying in 3 seconds... (${retries - 1} retries left)`);\n await new Promise(resolve => setTimeout(resolve, 3000));\n retries--;\n } else if (isTagNotFoundError) {\n // Tag not found error and we're out of retries\n throw new Error(`Tag ${tagName} was not found on GitHub after ${3 - retries + 1} attempts. This may indicate a problem with tag creation or GitHub synchronization.`);\n } else {\n // Not a tag-not-found error - re-throw the original error\n throw error;\n }\n }\n }\n }\n\n // Wait for release workflows to complete (if enabled)\n const waitForWorkflows = runConfig.publish?.waitForReleaseWorkflows !== false; // default to true\n if (waitForWorkflows) {\n logger.info('Waiting for release workflows...');\n if (isDryRun) {\n logger.info('Would monitor GitHub Actions workflows triggered by release');\n } else {\n const workflowTimeout = runConfig.publish?.releaseWorkflowsTimeout || 600000; // 10 minutes default\n const senditMode = runConfig.publish?.sendit || false;\n const skipUserConfirmation = senditMode || runConfig.publish?.skipUserConfirmation || false;\n\n // Get workflow names - either from config or auto-detect\n let workflowNames = runConfig.publish?.releaseWorkflowNames;\n\n if (!workflowNames || workflowNames.length === 0) {\n logger.info('No specific workflow names configured, auto-detecting workflows triggered by release events...');\n try {\n workflowNames = await GitHub.getWorkflowsTriggeredByRelease();\n if (workflowNames.length === 0) {\n logger.info('No workflows found that are triggered by release events.');\n } else {\n logger.info(`Auto-detected release workflows: ${workflowNames.join(', ')}`);\n }\n } catch (error: any) {\n logger.warn(`Failed to auto-detect release workflows: ${error.message}`);\n workflowNames = undefined; // Fall back to monitoring all workflows\n }\n }\n\n await GitHub.waitForReleaseWorkflows(tagName, {\n timeout: workflowTimeout,\n workflowNames,\n skipUserConfirmation\n });\n }\n } else {\n logger.verbose('Skipping waiting for release workflows (disabled in config).');\n }\n\n logger.info('Creating new release branch...');\n if (isDryRun) {\n logger.info('Would create next release branch (e.g., release/1.0.1) and push to origin');\n } else {\n const packageJsonContents = await storage.readFile('package.json', 'utf-8');\n const { version } = JSON.parse(packageJsonContents);\n const nextVersion = incrementPatchVersion(version);\n const newBranchName = `release/${nextVersion}`;\n\n // Check if branch already exists locally\n let branchExists = false;\n try {\n await run(`git show-ref --verify --quiet refs/heads/${newBranchName}`);\n branchExists = true;\n } catch {\n // Branch doesn't exist locally\n branchExists = false;\n }\n\n if (branchExists) {\n // Branch exists, switch to it\n await run(`git checkout ${newBranchName}`);\n logger.info(`Switched to existing branch ${newBranchName}`);\n } else {\n // Branch doesn't exist, create it\n await run(`git checkout -b ${newBranchName}`);\n logger.info(`Created new branch ${newBranchName}`);\n }\n\n // Check if branch exists on remote before pushing\n let remoteExists = false;\n try {\n const { stdout } = await run(`git ls-remote origin refs/heads/${newBranchName}`);\n remoteExists = stdout.trim() !== '';\n } catch {\n // Assume remote doesn't exist if ls-remote fails\n remoteExists = false;\n }\n\n if (remoteExists) {\n logger.info(`Branch ${newBranchName} already exists on remote, skipping push`);\n } else {\n await run(`git push -u origin ${newBranchName}`);\n logger.info(`Branch ${newBranchName} pushed to origin.`);\n }\n }\n\n logger.info('Preparation complete.');\n publishCompleted = true; // Mark as completed only if we reach this point\n } finally {\n // Link packages if linking is enabled, regardless of whether we unlinked them\n const shouldLink = runConfig.publish?.linkWorkspacePackages !== false; // default to true\n if (shouldLink) {\n logger.verbose('Ensuring linked packages are properly set up...');\n await Link.execute(runConfig);\n } else {\n logger.verbose('Skipping link packages (disabled in config).');\n }\n }\n};\n"],"names":["scanNpmrcForEnvVars","storage","logger","getLogger","npmrcPath","path","join","process","cwd","envVars","exists","npmrcContent","readFile","envVarMatches","match","varName","replace","includes","push","error","warn","message","verbose","debug","validateEnvironmentVariables","requiredEnvVars","isDryRun","getDryRunLogger","missingEnvVars","envVar","env","length","Error","runPrechecks","runConfig","dryRun","createStorage","log","info","run","originalMessage","toString","stdout","trim","currentBranch","GitHub","startsWith","packageJsonPath","packageJson","packageJsonContents","parsed","safeJsonParse","validatePackageJson","scripts","prepublishOnly","coreRequiredEnvVars","publish","npmrcEnvVars","allRequiredEnvVars","Set","execute","publishCompleted","packagesUnlinked","shouldUnlink","unlinkWorkspacePackages","Unlink","pr","branchName","html_url","updatePatterns","dependencyUpdatePatterns","patternsArg","runWithDryRunSupport","Commit","Diff","currentVersion","version","newVersion","incrementPatchVersion","writeFile","JSON","stringify","releaseSummary","Release","outputDirectory","DEFAULT_OUTPUT_DIRECTORY","ensureDirectory","releaseNotesPath","getOutputPath","releaseTitlePath","body","title","number","labels","commitTitle","timeout","checksTimeout","senditMode","sendit","skipUserConfirmation","mergeMethod","tagName","parse","tagWasPushed","pushError","Promise","resolve","setTimeout","releaseNotesContent","releaseTitle","retries","isTagNotFoundError","waitForWorkflows","waitForReleaseWorkflows","workflowTimeout","releaseWorkflowsTimeout","workflowNames","releaseWorkflowNames","undefined","nextVersion","newBranchName","branchExists","remoteExists","shouldLink","linkWorkspacePackages","Link"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"publish.js","sources":["../../src/commands/publish.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\nimport path from 'path';\nimport * as Commit from './commit';\nimport * as Diff from '../content/diff';\nimport * as Release from './release';\n\nimport { getLogger, getDryRunLogger } from '../logging';\nimport { Config, PullRequest } from '../types';\nimport { run, runWithDryRunSupport } from '../util/child';\nimport * as GitHub from '../util/github';\nimport { create as createStorage } from '../util/storage';\nimport { incrementPatchVersion, getOutputPath, calculateTargetVersion, checkIfTagExists, confirmVersionInteractively } from '../util/general';\nimport { DEFAULT_OUTPUT_DIRECTORY } from '../constants';\nimport { safeJsonParse, validatePackageJson } from '../util/validation';\n\nconst scanNpmrcForEnvVars = async (storage: any): Promise<string[]> => {\n const logger = getLogger();\n const npmrcPath = path.join(process.cwd(), '.npmrc');\n const envVars: string[] = [];\n\n if (await storage.exists(npmrcPath)) {\n try {\n const npmrcContent = await storage.readFile(npmrcPath, 'utf-8');\n // Match environment variable patterns like ${VAR_NAME} or $VAR_NAME\n const envVarMatches = npmrcContent.match(/\\$\\{([^}]+)\\}|\\$([A-Z_][A-Z0-9_]*)/g);\n\n if (envVarMatches) {\n for (const match of envVarMatches) {\n // Extract variable name from ${VAR_NAME} or $VAR_NAME format\n const varName = match.replace(/\\$\\{|\\}|\\$/g, '');\n if (varName && !envVars.includes(varName)) {\n envVars.push(varName);\n }\n }\n }\n\n } catch (error: any) {\n logger.warn(`Failed to read .npmrc file at ${npmrcPath}: ${error.message}`);\n logger.verbose('This may affect environment variable detection for publishing');\n }\n } else {\n logger.debug('.npmrc file not found, skipping environment variable scan');\n }\n\n return envVars;\n};\n\nconst validateEnvironmentVariables = (requiredEnvVars: string[], isDryRun: boolean): void => {\n const logger = getDryRunLogger(isDryRun);\n const missingEnvVars: string[] = [];\n\n for (const envVar of requiredEnvVars) {\n if (!process.env[envVar]) {\n missingEnvVars.push(envVar);\n }\n }\n\n if (missingEnvVars.length > 0) {\n if (isDryRun) {\n logger.warn(`Missing required environment variables: ${missingEnvVars.join(', ')}`);\n } else {\n logger.error(`Missing required environment variables: ${missingEnvVars.join(', ')}`);\n throw new Error(`Missing required environment variables: ${missingEnvVars.join(', ')}. Please set these environment variables before running publish.`);\n }\n }\n};\n\nconst runPrechecks = async (runConfig: Config): Promise<void> => {\n const isDryRun = runConfig.dryRun || false;\n const logger = getDryRunLogger(isDryRun);\n const storage = createStorage({ log: logger.info });\n\n logger.info('Running prechecks...');\n\n // Check if we're in a git repository\n try {\n if (isDryRun) {\n logger.info('Would check git repository with: git rev-parse --git-dir');\n } else {\n await run('git rev-parse --git-dir');\n }\n\n } catch (error: any) {\n if (!isDryRun) {\n // Preserve the original error message to help with debugging\n const originalMessage = error.message || error.toString();\n throw new Error(`Not in a git repository or git command failed: ${originalMessage}. Please run this command from within a git repository.`);\n }\n }\n\n // Check for uncommitted changes\n logger.info('Checking for uncommitted changes...');\n try {\n if (isDryRun) {\n logger.info('Would check git status with: git status --porcelain');\n } else {\n const { stdout } = await run('git status --porcelain');\n if (stdout.trim()) {\n throw new Error('Working directory has uncommitted changes. Please commit or stash your changes before running publish.');\n }\n }\n\n } catch (error: any) {\n if (!isDryRun) {\n // Preserve the original error message to help with debugging\n const originalMessage = error.message || error.toString();\n throw new Error(`Failed to check git status: ${originalMessage}. Please ensure you are in a valid git repository and try again.`);\n }\n }\n\n // Check that we're not running from the target branch\n logger.info('Checking current branch...');\n const targetBranch = runConfig.publish?.targetBranch || 'main';\n if (isDryRun) {\n logger.info(`Would verify current branch is not the target branch (${targetBranch})`);\n } else {\n const currentBranch = await GitHub.getCurrentBranchName();\n if (currentBranch === targetBranch) {\n throw new Error(`Cannot run publish from the target branch '${targetBranch}'. Please switch to a different branch before running publish.`);\n }\n }\n\n // Check if prepublishOnly script exists in package.json\n logger.info('Checking for prepublishOnly script...');\n const packageJsonPath = path.join(process.cwd(), 'package.json');\n\n if (!await storage.exists(packageJsonPath)) {\n if (!isDryRun) {\n throw new Error('package.json not found in current directory.');\n } else {\n logger.warn('package.json not found in current directory.');\n }\n } else {\n let packageJson;\n try {\n const packageJsonContents = await storage.readFile(packageJsonPath, 'utf-8');\n const parsed = safeJsonParse(packageJsonContents, packageJsonPath);\n packageJson = validatePackageJson(parsed, packageJsonPath);\n\n } catch (error) {\n if (!isDryRun) {\n throw new Error('Failed to parse package.json. Please ensure it contains valid JSON.');\n } else {\n logger.warn('Failed to parse package.json. Please ensure it contains valid JSON.');\n }\n }\n\n if (packageJson && !packageJson.scripts?.prepublishOnly) {\n if (!isDryRun) {\n throw new Error('prepublishOnly script is required in package.json but was not found. Please add a prepublishOnly script that runs your pre-flight checks (e.g., clean, lint, build, test).');\n } else {\n logger.warn('prepublishOnly script is required in package.json but was not found.');\n }\n }\n }\n\n // Check required environment variables\n logger.verbose('Checking required environment variables...');\n const coreRequiredEnvVars = runConfig.publish?.requiredEnvVars || [];\n const npmrcEnvVars = isDryRun ? [] : await scanNpmrcForEnvVars(storage); // Skip .npmrc scan in dry run\n const allRequiredEnvVars = [...new Set([...coreRequiredEnvVars, ...npmrcEnvVars])];\n\n if (allRequiredEnvVars.length > 0) {\n logger.verbose(`Required environment variables: ${allRequiredEnvVars.join(', ')}`);\n validateEnvironmentVariables(allRequiredEnvVars, isDryRun);\n } else {\n logger.verbose('No required environment variables specified.');\n }\n\n logger.info('All prechecks passed.');\n};\n\nexport const execute = async (runConfig: Config): Promise<void> => {\n const isDryRun = runConfig.dryRun || false;\n const logger = getDryRunLogger(isDryRun);\n const storage = createStorage({ log: logger.info });\n\n // Run prechecks before starting any work\n await runPrechecks(runConfig);\n\n logger.info('Starting release process...');\n\n\n let pr: PullRequest | null = null;\n\n if (isDryRun) {\n logger.info('Would check for existing pull request');\n logger.info('Assuming no existing PR found for demo purposes');\n } else {\n const branchName = await GitHub.getCurrentBranchName();\n pr = await GitHub.findOpenPullRequestByHeadRef(branchName);\n }\n\n if (pr) {\n logger.info(`Found existing pull request for branch: ${pr.html_url}`);\n } else {\n logger.info('No open pull request found, starting new release publishing process...');\n\n // STEP 1: Determine and set target version FIRST (before any commits)\n logger.info('Determining target version...');\n let newVersion: string;\n\n if (isDryRun) {\n logger.info('Would determine target version and update package.json');\n newVersion = '1.0.0'; // Mock version for dry run\n } else {\n const packageJsonContents = await storage.readFile('package.json', 'utf-8');\n const parsed = safeJsonParse(packageJsonContents, 'package.json');\n const packageJson = validatePackageJson(parsed, 'package.json');\n const currentVersion = packageJson.version;\n\n // Determine target version based on --targetVersion option\n const targetVersionInput = runConfig.publish?.targetVersion || 'patch';\n const proposedVersion = calculateTargetVersion(currentVersion, targetVersionInput);\n\n // Check if target tag already exists\n const targetTagName = `v${proposedVersion}`;\n const tagExists = await checkIfTagExists(targetTagName);\n if (tagExists) {\n throw new Error(`Tag ${targetTagName} already exists. Please choose a different version or delete the existing tag.`);\n }\n\n // Interactive confirmation if --interactive flag is set\n if (runConfig.publish?.interactive) {\n newVersion = await confirmVersionInteractively(currentVersion, proposedVersion, targetVersionInput);\n\n // Re-check if the confirmed version's tag exists (in case user entered custom version)\n const confirmedTagName = `v${newVersion}`;\n const confirmedTagExists = await checkIfTagExists(confirmedTagName);\n if (confirmedTagExists) {\n throw new Error(`Tag ${confirmedTagName} already exists. Please choose a different version or delete the existing tag.`);\n }\n } else {\n newVersion = proposedVersion;\n }\n\n logger.info(`Bumping version from ${currentVersion} to ${newVersion}`);\n\n // Update package.json with the new version BEFORE any other operations\n packageJson.version = newVersion;\n await storage.writeFile('package.json', JSON.stringify(packageJson, null, 2) + '\\n', 'utf-8');\n logger.info(`Version updated in package.json: ${newVersion}`);\n }\n\n // STEP 2: Prepare for release (with correct version now in package.json)\n logger.verbose('Preparing for release: switching from workspace to remote dependencies.');\n\n logger.verbose('Updating dependencies to latest versions from registry');\n const updatePatterns = runConfig.publish?.dependencyUpdatePatterns;\n if (updatePatterns && updatePatterns.length > 0) {\n logger.verbose(`Updating dependencies matching patterns: ${updatePatterns.join(', ')}`);\n const patternsArg = updatePatterns.join(' ');\n await runWithDryRunSupport(`npm update ${patternsArg}`, isDryRun);\n } else {\n logger.verbose('No dependency update patterns specified, updating all dependencies');\n await runWithDryRunSupport('npm update', isDryRun);\n }\n\n logger.info('Running prepublishOnly script...');\n await runWithDryRunSupport('npm run prepublishOnly', isDryRun, {}, true); // Use inherited stdio\n\n // STEP 3: Stage all changes (version bump + dependencies + any build artifacts)\n logger.verbose('Staging all changes for release commit');\n await runWithDryRunSupport('git add package.json package-lock.json', isDryRun);\n\n logger.verbose('Checking for staged changes...');\n if (isDryRun) {\n logger.verbose('Assuming staged changes exist for demo purposes');\n logger.verbose('Would create commit...');\n await Commit.execute(runConfig);\n } else {\n if (await Diff.hasStagedChanges()) {\n logger.verbose('Staged changes found, creating commit...');\n await Commit.execute(runConfig);\n } else {\n logger.verbose('No changes to commit, skipping commit.');\n }\n }\n\n logger.info('Generating release notes...');\n // Create a modified config for release notes generation that includes the publish --from and --interactive options\n const releaseConfig = { ...runConfig };\n if (runConfig.publish?.from || runConfig.publish?.interactive) {\n // Pass the publish --from and --interactive options to the release config\n releaseConfig.release = {\n ...runConfig.release,\n ...(runConfig.publish.from && { from: runConfig.publish.from }),\n ...(runConfig.publish.interactive && { interactive: runConfig.publish.interactive })\n };\n if (runConfig.publish.from) {\n logger.verbose(`Using custom 'from' reference for release notes: ${runConfig.publish.from}`);\n }\n if (runConfig.publish.interactive) {\n logger.verbose('Interactive mode enabled for release notes generation');\n }\n }\n const releaseSummary = await Release.execute(releaseConfig);\n\n if (isDryRun) {\n logger.info('Would write release notes to RELEASE_NOTES.md and RELEASE_TITLE.md in output directory');\n } else {\n const outputDirectory = runConfig.outputDirectory || DEFAULT_OUTPUT_DIRECTORY;\n await storage.ensureDirectory(outputDirectory);\n\n const releaseNotesPath = getOutputPath(outputDirectory, 'RELEASE_NOTES.md');\n const releaseTitlePath = getOutputPath(outputDirectory, 'RELEASE_TITLE.md');\n\n await storage.writeFile(releaseNotesPath, releaseSummary.body, 'utf-8');\n await storage.writeFile(releaseTitlePath, releaseSummary.title, 'utf-8');\n logger.info(`Release notes and title generated and saved to ${releaseNotesPath} and ${releaseTitlePath}.`);\n }\n\n logger.info('Pushing to origin...');\n // Get current branch name and push explicitly to avoid pushing to wrong remote/branch\n const currentBranch = await GitHub.getCurrentBranchName();\n await runWithDryRunSupport(`git push origin ${currentBranch}`, isDryRun);\n\n logger.info('Creating pull request...');\n if (isDryRun) {\n logger.info('Would get commit title and create PR with GitHub API');\n pr = { number: 123, html_url: 'https://github.com/mock/repo/pull/123', labels: [] } as PullRequest;\n } else {\n const { stdout: commitTitle } = await run('git log -1 --pretty=%B');\n pr = await GitHub.createPullRequest(commitTitle, 'Automated release PR.', await GitHub.getCurrentBranchName());\n if (!pr) {\n throw new Error('Failed to create pull request.');\n }\n logger.info(`Pull request created: ${pr.html_url}`);\n }\n }\n\n logger.info(`Waiting for PR #${pr!.number} checks to complete...`);\n if (!isDryRun) {\n // Configure timeout and user confirmation behavior\n const timeout = runConfig.publish?.checksTimeout || 300000; // 5 minutes default\n const senditMode = runConfig.publish?.sendit || false;\n // sendit flag overrides skipUserConfirmation - if sendit is true, skip confirmation\n const skipUserConfirmation = senditMode || runConfig.publish?.skipUserConfirmation || false;\n\n await GitHub.waitForPullRequestChecks(pr!.number, {\n timeout,\n skipUserConfirmation\n });\n }\n\n const mergeMethod = runConfig.publish?.mergeMethod || 'squash';\n if (isDryRun) {\n logger.info(`Would merge PR #${pr!.number} using ${mergeMethod} method`);\n } else {\n try {\n await GitHub.mergePullRequest(pr!.number, mergeMethod, false); // Don't delete branch\n } catch (error: any) {\n // Check if this is a merge conflict error\n if (error.message && (\n error.message.includes('not mergeable') ||\n error.message.includes('Pull Request is not mergeable') ||\n error.message.includes('merge conflict')\n )) {\n logger.error(`❌ Pull Request #${pr!.number} has merge conflicts that need to be resolved.`);\n logger.error('');\n logger.error('📋 To resolve this issue:');\n logger.error(` 1. Visit the Pull Request: ${pr!.html_url}`);\n logger.error(' 2. Resolve the merge conflicts through GitHub\\'s web interface or locally');\n logger.error(' 3. Once conflicts are resolved, re-run the publish command');\n logger.error('');\n logger.error('💡 The command will automatically detect the existing PR and continue from where it left off.');\n throw new Error(`Merge conflicts detected in PR #${pr!.number}. Please resolve conflicts and re-run the command.`);\n } else {\n // Re-throw other merge errors\n throw error;\n }\n }\n }\n\n logger.info('Checking out main branch...');\n await runWithDryRunSupport('git checkout main', isDryRun);\n await runWithDryRunSupport('git pull origin main', isDryRun);\n\n // Now create and push the tag on the main branch\n logger.info('Creating release tag...');\n let tagName: string;\n if (isDryRun) {\n logger.info('Would read package.json version and create git tag');\n tagName = 'v1.0.0'; // Mock version for dry run\n } else {\n const packageJsonContents = await storage.readFile('package.json', 'utf-8');\n const { version } = JSON.parse(packageJsonContents);\n tagName = `v${version}`;\n\n // Check if tag already exists locally\n try {\n const { stdout } = await run(`git tag -l ${tagName}`);\n if (stdout.trim() === tagName) {\n logger.info(`Tag ${tagName} already exists locally, skipping tag creation`);\n } else {\n await run(`git tag ${tagName}`);\n logger.info(`Created local tag: ${tagName}`);\n }\n } catch (error) {\n // If git tag -l fails, create the tag anyway\n await run(`git tag ${tagName}`);\n logger.info(`Created local tag: ${tagName}`);\n }\n\n // Check if tag exists on remote before pushing\n let tagWasPushed = false;\n try {\n const { stdout } = await run(`git ls-remote origin refs/tags/${tagName}`);\n if (stdout.trim()) {\n logger.info(`Tag ${tagName} already exists on remote, skipping push`);\n } else {\n await run(`git push origin ${tagName}`);\n logger.info(`Pushed tag to remote: ${tagName}`);\n tagWasPushed = true;\n }\n } catch (error) {\n // If ls-remote fails, try to push anyway (might be a new remote)\n try {\n await run(`git push origin ${tagName}`);\n logger.info(`Pushed tag to remote: ${tagName}`);\n tagWasPushed = true;\n } catch (pushError: any) {\n if (pushError.message && pushError.message.includes('already exists')) {\n logger.info(`Tag ${tagName} already exists on remote, continuing...`);\n } else {\n throw pushError;\n }\n }\n }\n\n // If we just pushed a new tag, wait for GitHub to process it\n if (tagWasPushed) {\n logger.verbose('Waiting for GitHub to process the pushed tag...');\n await new Promise(resolve => setTimeout(resolve, 5000)); // 5 second delay\n }\n }\n\n logger.info('Creating GitHub release...');\n if (isDryRun) {\n logger.info('Would read package.json version and create GitHub release with retry logic');\n } else {\n const outputDirectory = runConfig.outputDirectory || DEFAULT_OUTPUT_DIRECTORY;\n const releaseNotesPath = getOutputPath(outputDirectory, 'RELEASE_NOTES.md');\n const releaseTitlePath = getOutputPath(outputDirectory, 'RELEASE_TITLE.md');\n\n const releaseNotesContent = await storage.readFile(releaseNotesPath, 'utf-8');\n const releaseTitle = await storage.readFile(releaseTitlePath, 'utf-8');\n\n // Create release with retry logic to handle GitHub tag processing delays\n let retries = 3;\n while (retries > 0) {\n try {\n await GitHub.createRelease(tagName, releaseTitle, releaseNotesContent);\n logger.info(`GitHub release created successfully for tag: ${tagName}`);\n break; // Success - exit retry loop\n } catch (error: any) {\n // Check if this is a tag-not-found error that we can retry\n const isTagNotFoundError = error.message && (\n error.message.includes('not found') ||\n error.message.includes('does not exist') ||\n error.message.includes('Reference does not exist')\n );\n\n if (isTagNotFoundError && retries > 1) {\n logger.verbose(`Tag ${tagName} not yet available on GitHub, retrying in 3 seconds... (${retries - 1} retries left)`);\n await new Promise(resolve => setTimeout(resolve, 3000));\n retries--;\n } else if (isTagNotFoundError) {\n // Tag not found error and we're out of retries\n throw new Error(`Tag ${tagName} was not found on GitHub after ${3 - retries + 1} attempts. This may indicate a problem with tag creation or GitHub synchronization.`);\n } else {\n // Not a tag-not-found error - re-throw the original error\n throw error;\n }\n }\n }\n }\n\n // Wait for release workflows to complete (if enabled)\n const waitForWorkflows = runConfig.publish?.waitForReleaseWorkflows !== false; // default to true\n if (waitForWorkflows) {\n logger.info('Waiting for release workflows...');\n if (isDryRun) {\n logger.info('Would monitor GitHub Actions workflows triggered by release');\n } else {\n const workflowTimeout = runConfig.publish?.releaseWorkflowsTimeout || 600000; // 10 minutes default\n const senditMode = runConfig.publish?.sendit || false;\n const skipUserConfirmation = senditMode || runConfig.publish?.skipUserConfirmation || false;\n\n // Get workflow names - either from config or auto-detect\n let workflowNames = runConfig.publish?.releaseWorkflowNames;\n\n if (!workflowNames || workflowNames.length === 0) {\n logger.info('No specific workflow names configured, auto-detecting workflows triggered by release events...');\n try {\n workflowNames = await GitHub.getWorkflowsTriggeredByRelease();\n if (workflowNames.length === 0) {\n logger.info('No workflows found that are triggered by release events.');\n } else {\n logger.info(`Auto-detected release workflows: ${workflowNames.join(', ')}`);\n }\n } catch (error: any) {\n logger.warn(`Failed to auto-detect release workflows: ${error.message}`);\n workflowNames = undefined; // Fall back to monitoring all workflows\n }\n }\n\n await GitHub.waitForReleaseWorkflows(tagName, {\n timeout: workflowTimeout,\n workflowNames,\n skipUserConfirmation\n });\n }\n } else {\n logger.verbose('Skipping waiting for release workflows (disabled in config).');\n }\n\n // Switch to target branch\n const targetBranch = runConfig.publish?.targetBranch || 'main';\n logger.info(`Switching to target branch: ${targetBranch}`);\n await runWithDryRunSupport(`git checkout ${targetBranch}`, isDryRun);\n\n logger.info('Publish process complete.');\n};\n"],"names":["scanNpmrcForEnvVars","storage","logger","getLogger","npmrcPath","path","join","process","cwd","envVars","exists","npmrcContent","readFile","envVarMatches","match","varName","replace","includes","push","error","warn","message","verbose","debug","validateEnvironmentVariables","requiredEnvVars","isDryRun","getDryRunLogger","missingEnvVars","envVar","env","length","Error","runPrechecks","runConfig","dryRun","createStorage","log","info","run","originalMessage","toString","stdout","trim","targetBranch","publish","currentBranch","GitHub","packageJsonPath","packageJson","packageJsonContents","parsed","safeJsonParse","validatePackageJson","scripts","prepublishOnly","coreRequiredEnvVars","npmrcEnvVars","allRequiredEnvVars","Set","execute","pr","branchName","html_url","newVersion","currentVersion","version","targetVersionInput","targetVersion","proposedVersion","calculateTargetVersion","targetTagName","tagExists","checkIfTagExists","interactive","confirmVersionInteractively","confirmedTagName","confirmedTagExists","writeFile","JSON","stringify","updatePatterns","dependencyUpdatePatterns","patternsArg","runWithDryRunSupport","Commit","Diff","releaseConfig","from","release","releaseSummary","Release","outputDirectory","DEFAULT_OUTPUT_DIRECTORY","ensureDirectory","releaseNotesPath","getOutputPath","releaseTitlePath","body","title","number","labels","commitTitle","timeout","checksTimeout","senditMode","sendit","skipUserConfirmation","mergeMethod","tagName","parse","tagWasPushed","pushError","Promise","resolve","setTimeout","releaseNotesContent","releaseTitle","retries","isTagNotFoundError","waitForWorkflows","waitForReleaseWorkflows","workflowTimeout","releaseWorkflowsTimeout","workflowNames","releaseWorkflowNames","undefined"],"mappings":"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"}
|
package/dist/commands/release.js
CHANGED
|
@@ -1,18 +1,134 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { Formatter } from '@riotprompt/riotprompt';
|
|
3
3
|
import 'dotenv/config';
|
|
4
|
-
import { DEFAULT_TO_COMMIT_ALIAS, DEFAULT_FROM_COMMIT_ALIAS, DEFAULT_EXCLUDED_PATTERNS, DEFAULT_OUTPUT_DIRECTORY } from '../constants.js';
|
|
4
|
+
import { DEFAULT_TO_COMMIT_ALIAS, DEFAULT_FROM_COMMIT_ALIAS, DEFAULT_MAX_DIFF_BYTES, DEFAULT_EXCLUDED_PATTERNS, DEFAULT_OUTPUT_DIRECTORY } from '../constants.js';
|
|
5
5
|
import { create } from '../content/log.js';
|
|
6
|
-
import { create as create$1 } from '../content/diff.js';
|
|
6
|
+
import { create as create$1, truncateDiffByFiles } from '../content/diff.js';
|
|
7
7
|
import { createPrompt } from '../prompt/release.js';
|
|
8
|
-
import {
|
|
8
|
+
import { getModelForCommand, createCompletionWithRetry } from '../util/openai.js';
|
|
9
9
|
import { getDryRunLogger } from '../logging.js';
|
|
10
10
|
import { getOutputPath, getTimestampedResponseFilename, getTimestampedRequestFilename, getTimestampedReleaseNotesFilename } from '../util/general.js';
|
|
11
11
|
import { create as create$2 } from '../util/storage.js';
|
|
12
12
|
import { validateReleaseSummary } from '../util/validation.js';
|
|
13
|
+
import { requireTTY, getUserChoice, STANDARD_CHOICES, getLLMFeedbackInEditor, improveContentWithLLM, editContentInEditor } from '../util/interactive.js';
|
|
13
14
|
|
|
15
|
+
// Helper function to edit release notes using editor
|
|
16
|
+
async function editReleaseNotesInteractively(releaseSummary) {
|
|
17
|
+
const templateLines = [
|
|
18
|
+
'# Edit your release notes below. Lines starting with "#" will be ignored.',
|
|
19
|
+
'# The first line is the title, everything else is the body.',
|
|
20
|
+
'# Save and close the editor when you are done.'
|
|
21
|
+
];
|
|
22
|
+
const content = `${releaseSummary.title}\n\n${releaseSummary.body}`;
|
|
23
|
+
const result = await editContentInEditor(content, templateLines, '.md');
|
|
24
|
+
const lines = result.content.split('\n');
|
|
25
|
+
const title = lines[0].trim();
|
|
26
|
+
const body = lines.slice(1).join('\n').trim();
|
|
27
|
+
return {
|
|
28
|
+
title,
|
|
29
|
+
body
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
// Helper function to improve release notes using LLM
|
|
33
|
+
async function improveReleaseNotesWithLLM(releaseSummary, runConfig, promptConfig, promptContext, outputDirectory, logContent, diffContent) {
|
|
34
|
+
// Get user feedback on what to improve using the editor
|
|
35
|
+
const releaseNotesContent = `${releaseSummary.title}\n\n${releaseSummary.body}`;
|
|
36
|
+
const userFeedback = await getLLMFeedbackInEditor('release notes', releaseNotesContent);
|
|
37
|
+
const improvementConfig = {
|
|
38
|
+
contentType: 'release notes',
|
|
39
|
+
createImprovedPrompt: async (promptConfig, currentSummary, promptContext)=>{
|
|
40
|
+
const improvementPromptContent = {
|
|
41
|
+
logContent: logContent,
|
|
42
|
+
diffContent: diffContent,
|
|
43
|
+
releaseFocus: `Please improve these release notes based on the user's feedback: "${userFeedback}".
|
|
44
|
+
|
|
45
|
+
Current release notes:
|
|
46
|
+
Title: "${currentSummary.title}"
|
|
47
|
+
Body: "${currentSummary.body}"
|
|
48
|
+
|
|
49
|
+
Please revise the release notes according to the user's feedback while maintaining accuracy and following good release note practices.`
|
|
50
|
+
};
|
|
51
|
+
const promptResult = await createPrompt(promptConfig, improvementPromptContent, promptContext);
|
|
52
|
+
// Format the prompt into a proper request with messages
|
|
53
|
+
const modelToUse = getModelForCommand(runConfig, 'release');
|
|
54
|
+
return Formatter.create({
|
|
55
|
+
logger: getDryRunLogger(false)
|
|
56
|
+
}).formatPrompt(modelToUse, promptResult.prompt);
|
|
57
|
+
},
|
|
58
|
+
callLLM: async (request, runConfig, outputDirectory)=>{
|
|
59
|
+
const modelToUse = getModelForCommand(runConfig, 'release');
|
|
60
|
+
return await createCompletionWithRetry(request.messages, {
|
|
61
|
+
model: modelToUse,
|
|
62
|
+
responseFormat: {
|
|
63
|
+
type: 'json_object'
|
|
64
|
+
},
|
|
65
|
+
debug: runConfig.debug,
|
|
66
|
+
debugRequestFile: getOutputPath(outputDirectory, getTimestampedRequestFilename('release-improve')),
|
|
67
|
+
debugResponseFile: getOutputPath(outputDirectory, getTimestampedResponseFilename('release-improve'))
|
|
68
|
+
});
|
|
69
|
+
},
|
|
70
|
+
processResponse: (response)=>{
|
|
71
|
+
return validateReleaseSummary(response);
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
return await improveContentWithLLM(releaseSummary, runConfig, promptConfig, promptContext, outputDirectory, improvementConfig);
|
|
75
|
+
}
|
|
76
|
+
// Interactive feedback loop for release notes
|
|
77
|
+
async function handleInteractiveReleaseFeedback(releaseSummary, runConfig, promptConfig, promptContext, outputDirectory, storage, logContent, diffContent) {
|
|
78
|
+
const logger = getDryRunLogger(false);
|
|
79
|
+
let currentSummary = releaseSummary;
|
|
80
|
+
while(true){
|
|
81
|
+
// Display the current release notes
|
|
82
|
+
logger.info('\n📋 Generated Release Notes:');
|
|
83
|
+
logger.info('─'.repeat(50));
|
|
84
|
+
logger.info('Title: %s', currentSummary.title);
|
|
85
|
+
logger.info('');
|
|
86
|
+
logger.info('Body:');
|
|
87
|
+
logger.info(currentSummary.body);
|
|
88
|
+
logger.info('─'.repeat(50));
|
|
89
|
+
// Get user choice
|
|
90
|
+
const userChoice = await getUserChoice('\nWhat would you like to do with these release notes?', [
|
|
91
|
+
STANDARD_CHOICES.CONFIRM,
|
|
92
|
+
STANDARD_CHOICES.EDIT,
|
|
93
|
+
STANDARD_CHOICES.SKIP,
|
|
94
|
+
STANDARD_CHOICES.IMPROVE
|
|
95
|
+
], {
|
|
96
|
+
nonTtyErrorSuggestions: [
|
|
97
|
+
'Use --dry-run to see the generated content without interaction'
|
|
98
|
+
]
|
|
99
|
+
});
|
|
100
|
+
switch(userChoice){
|
|
101
|
+
case 'c':
|
|
102
|
+
return {
|
|
103
|
+
action: 'confirm',
|
|
104
|
+
finalSummary: currentSummary
|
|
105
|
+
};
|
|
106
|
+
case 'e':
|
|
107
|
+
try {
|
|
108
|
+
currentSummary = await editReleaseNotesInteractively(currentSummary);
|
|
109
|
+
} catch (error) {
|
|
110
|
+
logger.error(`Failed to edit release notes: ${error.message}`);
|
|
111
|
+
// Continue the loop to show options again
|
|
112
|
+
}
|
|
113
|
+
break;
|
|
114
|
+
case 's':
|
|
115
|
+
return {
|
|
116
|
+
action: 'skip',
|
|
117
|
+
finalSummary: currentSummary
|
|
118
|
+
};
|
|
119
|
+
case 'i':
|
|
120
|
+
try {
|
|
121
|
+
currentSummary = await improveReleaseNotesWithLLM(currentSummary, runConfig, promptConfig, promptContext, outputDirectory, logContent, diffContent);
|
|
122
|
+
} catch (error) {
|
|
123
|
+
logger.error(`Failed to improve release notes: ${error.message}`);
|
|
124
|
+
// Continue the loop to show options again
|
|
125
|
+
}
|
|
126
|
+
break;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
14
130
|
const execute = async (runConfig)=>{
|
|
15
|
-
var _runConfig_release, _runConfig_release1, _runConfig_release2, _runConfig_release3, _runConfig_release4, _runConfig_release5, _runConfig_release6;
|
|
131
|
+
var _runConfig_release, _runConfig_release1, _runConfig_release2, _runConfig_release3, _runConfig_release4, _runConfig_release5, _runConfig_release6, _runConfig_release7, _runConfig_release8;
|
|
16
132
|
const isDryRun = runConfig.dryRun || false;
|
|
17
133
|
const logger = getDryRunLogger(isDryRun);
|
|
18
134
|
var _runConfig_release_from, _runConfig_release_to;
|
|
@@ -22,11 +138,14 @@ const execute = async (runConfig)=>{
|
|
|
22
138
|
limit: (_runConfig_release2 = runConfig.release) === null || _runConfig_release2 === void 0 ? void 0 : _runConfig_release2.messageLimit
|
|
23
139
|
});
|
|
24
140
|
let logContent = '';
|
|
141
|
+
var _runConfig_release_maxDiffBytes;
|
|
142
|
+
const maxDiffBytes = (_runConfig_release_maxDiffBytes = (_runConfig_release3 = runConfig.release) === null || _runConfig_release3 === void 0 ? void 0 : _runConfig_release3.maxDiffBytes) !== null && _runConfig_release_maxDiffBytes !== void 0 ? _runConfig_release_maxDiffBytes : DEFAULT_MAX_DIFF_BYTES;
|
|
25
143
|
var _runConfig_release_from1, _runConfig_release_to1, _runConfig_excludedPatterns;
|
|
26
144
|
const diff = await create$1({
|
|
27
|
-
from: (_runConfig_release_from1 = (
|
|
28
|
-
to: (_runConfig_release_to1 = (
|
|
29
|
-
excludedPatterns: (_runConfig_excludedPatterns = runConfig.excludedPatterns) !== null && _runConfig_excludedPatterns !== void 0 ? _runConfig_excludedPatterns : DEFAULT_EXCLUDED_PATTERNS
|
|
145
|
+
from: (_runConfig_release_from1 = (_runConfig_release4 = runConfig.release) === null || _runConfig_release4 === void 0 ? void 0 : _runConfig_release4.from) !== null && _runConfig_release_from1 !== void 0 ? _runConfig_release_from1 : DEFAULT_FROM_COMMIT_ALIAS,
|
|
146
|
+
to: (_runConfig_release_to1 = (_runConfig_release5 = runConfig.release) === null || _runConfig_release5 === void 0 ? void 0 : _runConfig_release5.to) !== null && _runConfig_release_to1 !== void 0 ? _runConfig_release_to1 : DEFAULT_TO_COMMIT_ALIAS,
|
|
147
|
+
excludedPatterns: (_runConfig_excludedPatterns = runConfig.excludedPatterns) !== null && _runConfig_excludedPatterns !== void 0 ? _runConfig_excludedPatterns : DEFAULT_EXCLUDED_PATTERNS,
|
|
148
|
+
maxDiffBytes
|
|
30
149
|
});
|
|
31
150
|
let diffContent = '';
|
|
32
151
|
diffContent = await diff.get();
|
|
@@ -38,16 +157,17 @@ const execute = async (runConfig)=>{
|
|
|
38
157
|
const promptContent = {
|
|
39
158
|
logContent,
|
|
40
159
|
diffContent,
|
|
41
|
-
releaseFocus: (
|
|
160
|
+
releaseFocus: (_runConfig_release6 = runConfig.release) === null || _runConfig_release6 === void 0 ? void 0 : _runConfig_release6.focus
|
|
42
161
|
};
|
|
43
162
|
const promptContext = {
|
|
44
|
-
context: (
|
|
163
|
+
context: (_runConfig_release7 = runConfig.release) === null || _runConfig_release7 === void 0 ? void 0 : _runConfig_release7.context,
|
|
45
164
|
directories: runConfig.contextDirectories
|
|
46
165
|
};
|
|
47
166
|
const promptResult = await createPrompt(promptConfig, promptContent, promptContext);
|
|
167
|
+
const modelToUse = getModelForCommand(runConfig, 'release');
|
|
48
168
|
const request = Formatter.create({
|
|
49
169
|
logger
|
|
50
|
-
}).formatPrompt(
|
|
170
|
+
}).formatPrompt(modelToUse, promptResult.prompt);
|
|
51
171
|
// Always ensure output directory exists for request/response files
|
|
52
172
|
const outputDirectory = runConfig.outputDirectory || DEFAULT_OUTPUT_DIRECTORY;
|
|
53
173
|
const storage = create$2({
|
|
@@ -55,8 +175,34 @@ const execute = async (runConfig)=>{
|
|
|
55
175
|
});
|
|
56
176
|
await storage.ensureDirectory(outputDirectory);
|
|
57
177
|
logger.debug('Release analysis: isLargeRelease=%s, maxTokens=%d', promptResult.isLargeRelease, promptResult.maxTokens);
|
|
58
|
-
|
|
59
|
-
|
|
178
|
+
// Create retry callback that reduces diff size on token limit errors
|
|
179
|
+
const createRetryCallback = (originalDiffContent, originalLogContent)=>async (attempt)=>{
|
|
180
|
+
var _runConfig_release, _runConfig_release1;
|
|
181
|
+
logger.info('Retrying release generation with reduced diff size (attempt %d)', attempt);
|
|
182
|
+
// Progressively reduce the diff size on retries
|
|
183
|
+
const reductionFactor = Math.pow(0.5, attempt - 1); // 50% reduction per retry
|
|
184
|
+
const reducedMaxDiffBytes = Math.max(512, Math.floor(maxDiffBytes * reductionFactor));
|
|
185
|
+
logger.debug('Reducing maxDiffBytes from %d to %d for retry', maxDiffBytes, reducedMaxDiffBytes);
|
|
186
|
+
// Re-truncate the diff with smaller limits
|
|
187
|
+
const reducedDiffContent = originalDiffContent.length > reducedMaxDiffBytes ? truncateDiffByFiles(originalDiffContent, reducedMaxDiffBytes) : originalDiffContent;
|
|
188
|
+
// Rebuild the prompt with the reduced diff
|
|
189
|
+
const reducedPromptContent = {
|
|
190
|
+
logContent: originalLogContent,
|
|
191
|
+
diffContent: reducedDiffContent,
|
|
192
|
+
releaseFocus: (_runConfig_release = runConfig.release) === null || _runConfig_release === void 0 ? void 0 : _runConfig_release.focus
|
|
193
|
+
};
|
|
194
|
+
const reducedPromptContext = {
|
|
195
|
+
context: (_runConfig_release1 = runConfig.release) === null || _runConfig_release1 === void 0 ? void 0 : _runConfig_release1.context,
|
|
196
|
+
directories: runConfig.contextDirectories
|
|
197
|
+
};
|
|
198
|
+
const retryPromptResult = await createPrompt(promptConfig, reducedPromptContent, reducedPromptContext);
|
|
199
|
+
const retryRequest = Formatter.create({
|
|
200
|
+
logger
|
|
201
|
+
}).formatPrompt(modelToUse, retryPromptResult.prompt);
|
|
202
|
+
return retryRequest.messages;
|
|
203
|
+
};
|
|
204
|
+
const summary = await createCompletionWithRetry(request.messages, {
|
|
205
|
+
model: modelToUse,
|
|
60
206
|
responseFormat: {
|
|
61
207
|
type: 'json_object'
|
|
62
208
|
},
|
|
@@ -64,9 +210,20 @@ const execute = async (runConfig)=>{
|
|
|
64
210
|
debugRequestFile: getOutputPath(outputDirectory, getTimestampedRequestFilename('release')),
|
|
65
211
|
debugResponseFile: getOutputPath(outputDirectory, getTimestampedResponseFilename('release')),
|
|
66
212
|
maxTokens: promptResult.maxTokens
|
|
67
|
-
});
|
|
213
|
+
}, createRetryCallback(diffContent, logContent));
|
|
68
214
|
// Validate and safely cast the response
|
|
69
|
-
|
|
215
|
+
let releaseSummary = validateReleaseSummary(summary);
|
|
216
|
+
// Handle interactive mode
|
|
217
|
+
if (((_runConfig_release8 = runConfig.release) === null || _runConfig_release8 === void 0 ? void 0 : _runConfig_release8.interactive) && !isDryRun) {
|
|
218
|
+
requireTTY('Interactive mode requires a terminal. Use --dry-run instead.');
|
|
219
|
+
const interactiveResult = await handleInteractiveReleaseFeedback(releaseSummary, runConfig, promptConfig, promptContext, outputDirectory, storage, logContent, diffContent);
|
|
220
|
+
if (interactiveResult.action === 'skip') {
|
|
221
|
+
logger.info('❌ Release notes generation aborted by user');
|
|
222
|
+
} else {
|
|
223
|
+
logger.info('✅ Release notes finalized');
|
|
224
|
+
}
|
|
225
|
+
releaseSummary = interactiveResult.finalSummary;
|
|
226
|
+
}
|
|
70
227
|
// Save timestamped copy of release notes to output directory
|
|
71
228
|
try {
|
|
72
229
|
const timestampedFilename = getTimestampedReleaseNotesFilename();
|