@eldrforge/kodrdriv 1.2.8 → 1.2.11
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 +1 -0
- package/dist/commands/publish.js +101 -2
- package/dist/commands/publish.js.map +1 -1
- package/dist/constants.js +1 -1
- package/dist/util/github.js +23 -1
- package/dist/util/github.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -100,3 +100,4 @@ Apache-2.0 - see [LICENSE](LICENSE) file for details.
|
|
|
100
100
|
## About the Name
|
|
101
101
|
|
|
102
102
|
Like Thor's hammer, this tool smashes through your repetitive coding tasks. But unlike Mjölnir, it won't make you worthy — it'll just make you faster. Strike through commits, forge releases, and channel the lightning of AI to automate your workflow. Because sometimes you need a hammer, and sometimes you need a tool that actually works. Pirate.
|
|
103
|
+
TEST
|
package/dist/commands/publish.js
CHANGED
|
@@ -476,7 +476,106 @@ const execute = async (runConfig)=>{
|
|
|
476
476
|
logger.verbose('No dependency changes to commit, skipping commit.');
|
|
477
477
|
}
|
|
478
478
|
}
|
|
479
|
-
// STEP 3:
|
|
479
|
+
// STEP 3: Merge target branch into working branch to avoid conflicts
|
|
480
|
+
logger.info(`Merging target branch '${targetBranch}' into current branch to avoid version conflicts...`);
|
|
481
|
+
if (isDryRun) {
|
|
482
|
+
logger.info(`Would merge ${targetBranch} into current branch`);
|
|
483
|
+
} else {
|
|
484
|
+
// Fetch the latest target branch
|
|
485
|
+
try {
|
|
486
|
+
await run(`git fetch origin ${targetBranch}:${targetBranch}`);
|
|
487
|
+
logger.info(`✅ Fetched latest ${targetBranch}`);
|
|
488
|
+
} catch (fetchError) {
|
|
489
|
+
logger.warn(`⚠️ Could not fetch ${targetBranch}: ${fetchError.message}`);
|
|
490
|
+
logger.warn('Continuing without merge - PR may have conflicts...');
|
|
491
|
+
}
|
|
492
|
+
// Check if merge is needed (avoid unnecessary merge commits)
|
|
493
|
+
try {
|
|
494
|
+
const { stdout: mergeBase } = await run(`git merge-base HEAD ${targetBranch}`);
|
|
495
|
+
const { stdout: targetCommit } = await run(`git rev-parse ${targetBranch}`);
|
|
496
|
+
if (mergeBase.trim() === targetCommit.trim()) {
|
|
497
|
+
logger.info(`ℹ️ Already up-to-date with ${targetBranch}, no merge needed`);
|
|
498
|
+
} else {
|
|
499
|
+
// Try to merge target branch into current branch
|
|
500
|
+
let mergeSucceeded = false;
|
|
501
|
+
try {
|
|
502
|
+
await run(`git merge ${targetBranch} --no-edit -m "Merge ${targetBranch} to sync before version bump"`);
|
|
503
|
+
logger.info(`✅ Merged ${targetBranch} into current branch`);
|
|
504
|
+
mergeSucceeded = true;
|
|
505
|
+
} catch (mergeError) {
|
|
506
|
+
// If merge conflicts occur, check if they're only in version-related files
|
|
507
|
+
const errorText = [
|
|
508
|
+
mergeError.message || '',
|
|
509
|
+
mergeError.stdout || '',
|
|
510
|
+
mergeError.stderr || ''
|
|
511
|
+
].join(' ');
|
|
512
|
+
if (errorText.includes('CONFLICT')) {
|
|
513
|
+
logger.warn(`⚠️ Merge conflicts detected, attempting automatic resolution...`);
|
|
514
|
+
// Get list of conflicted files
|
|
515
|
+
const { stdout: conflictedFiles } = await run('git diff --name-only --diff-filter=U');
|
|
516
|
+
const conflicts = conflictedFiles.trim().split('\n').filter(Boolean);
|
|
517
|
+
logger.verbose(`Conflicted files: ${conflicts.join(', ')}`);
|
|
518
|
+
// Check if conflicts are only in package.json and package-lock.json
|
|
519
|
+
const versionFiles = [
|
|
520
|
+
'package.json',
|
|
521
|
+
'package-lock.json'
|
|
522
|
+
];
|
|
523
|
+
const nonVersionConflicts = conflicts.filter((f)=>!versionFiles.includes(f));
|
|
524
|
+
if (nonVersionConflicts.length > 0) {
|
|
525
|
+
logger.error(`❌ Cannot auto-resolve: conflicts in non-version files: ${nonVersionConflicts.join(', ')}`);
|
|
526
|
+
logger.error('');
|
|
527
|
+
logger.error('Please resolve conflicts manually:');
|
|
528
|
+
logger.error(' 1. Resolve conflicts in the files listed above');
|
|
529
|
+
logger.error(' 2. git add <resolved-files>');
|
|
530
|
+
logger.error(' 3. git commit');
|
|
531
|
+
logger.error(' 4. kodrdriv publish (to continue)');
|
|
532
|
+
logger.error('');
|
|
533
|
+
throw new Error(`Merge conflicts in non-version files. Please resolve manually.`);
|
|
534
|
+
}
|
|
535
|
+
// Auto-resolve version conflicts by accepting current branch versions
|
|
536
|
+
// (keep our working branch's version, which is likely already updated)
|
|
537
|
+
logger.info(`Auto-resolving version conflicts by keeping current branch versions...`);
|
|
538
|
+
for (const file of conflicts){
|
|
539
|
+
if (versionFiles.includes(file)) {
|
|
540
|
+
await run(`git checkout --ours ${file}`);
|
|
541
|
+
await run(`git add ${file}`);
|
|
542
|
+
logger.verbose(`Resolved ${file} using current branch version`);
|
|
543
|
+
}
|
|
544
|
+
}
|
|
545
|
+
// Complete the merge
|
|
546
|
+
await run(`git commit --no-edit -m "Merge ${targetBranch} to sync before version bump (auto-resolved version conflicts)"`);
|
|
547
|
+
logger.info(`✅ Auto-resolved version conflicts and completed merge`);
|
|
548
|
+
mergeSucceeded = true;
|
|
549
|
+
} else {
|
|
550
|
+
// Not a conflict error, re-throw
|
|
551
|
+
throw mergeError;
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
// Only run npm install if merge actually happened
|
|
555
|
+
if (mergeSucceeded) {
|
|
556
|
+
// Run npm install to update package-lock.json based on merged package.json
|
|
557
|
+
logger.info('Running npm install after merge...');
|
|
558
|
+
await run('npm install');
|
|
559
|
+
logger.info('✅ npm install completed');
|
|
560
|
+
// Commit any changes from npm install (e.g., package-lock.json updates)
|
|
561
|
+
const { stdout: mergeChangesStatus } = await run('git status --porcelain');
|
|
562
|
+
if (mergeChangesStatus.trim()) {
|
|
563
|
+
logger.verbose('Staging post-merge changes for commit');
|
|
564
|
+
await run('git add package.json package-lock.json');
|
|
565
|
+
if (await hasStagedChanges()) {
|
|
566
|
+
logger.verbose('Committing post-merge changes...');
|
|
567
|
+
await execute$1(runConfig);
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
}
|
|
571
|
+
}
|
|
572
|
+
} catch (error) {
|
|
573
|
+
// Only catch truly unexpected errors here
|
|
574
|
+
logger.error(`❌ Unexpected error during merge: ${error.message}`);
|
|
575
|
+
throw error;
|
|
576
|
+
}
|
|
577
|
+
}
|
|
578
|
+
// STEP 4: Determine and set target version AFTER checks, dependency commit, and target branch merge
|
|
480
579
|
logger.info('Determining target version...');
|
|
481
580
|
let newVersion;
|
|
482
581
|
if (isDryRun) {
|
|
@@ -526,7 +625,7 @@ const execute = async (runConfig)=>{
|
|
|
526
625
|
await storage.writeFile('package.json', JSON.stringify(packageJson, null, 2) + '\n', 'utf-8');
|
|
527
626
|
logger.info(`Version updated in package.json: ${newVersion}`);
|
|
528
627
|
}
|
|
529
|
-
// STEP
|
|
628
|
+
// STEP 5: Commit version bump as a separate commit
|
|
530
629
|
logger.verbose('Staging version bump for commit');
|
|
531
630
|
await runWithDryRunSupport('git add package.json package-lock.json', isDryRun);
|
|
532
631
|
if (isDryRun) {
|
|
@@ -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';\n\nimport { getLogger, getDryRunLogger } from '../logging';\nimport { Config, PullRequest } from '../types';\nimport { run, runWithDryRunSupport, runSecure, validateGitRef } from '../util/child';\nimport * as GitHub from '../util/github';\nimport { create as createStorage } from '../util/storage';\nimport { incrementPatchVersion, getOutputPath, calculateTargetVersion, checkIfTagExists, confirmVersionInteractively, calculateBranchDependentVersion } from '../util/general';\nimport { DEFAULT_OUTPUT_DIRECTORY, KODRDRIV_DEFAULTS } from '../constants';\nimport { safeJsonParse, validatePackageJson } from '../util/validation';\nimport { isBranchInSyncWithRemote, safeSyncBranchWithRemote, localBranchExists } from '../util/git';\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, targetBranch?: string): 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 // Use the passed target branch or fallback to config/default\n const effectiveTargetBranch = targetBranch || runConfig.publish?.targetBranch || 'main';\n\n // Check that we're not running from the target branch\n logger.info('Checking current branch...');\n if (isDryRun) {\n logger.info(`Would verify current branch is not the target branch (${effectiveTargetBranch})`);\n } else {\n const currentBranch = await GitHub.getCurrentBranchName();\n if (currentBranch === effectiveTargetBranch) {\n throw new Error(`Cannot run publish from the target branch '${effectiveTargetBranch}'. Please switch to a different branch before running publish.`);\n }\n }\n\n // Check target branch sync with remote\n logger.info(`Checking target branch '${effectiveTargetBranch}' sync with remote...`);\n if (isDryRun) {\n logger.info(`Would verify target branch '${effectiveTargetBranch}' is in sync with remote origin`);\n } else {\n // Only check if local target branch exists (it's okay if it doesn't exist locally)\n const targetBranchExists = await localBranchExists(effectiveTargetBranch);\n if (targetBranchExists) {\n const syncStatus = await isBranchInSyncWithRemote(effectiveTargetBranch);\n\n if (!syncStatus.inSync) {\n logger.error(`❌ Target branch '${effectiveTargetBranch}' is not in sync with remote.`);\n logger.error('');\n\n if (syncStatus.error) {\n logger.error(` Error: ${syncStatus.error}`);\n } else if (syncStatus.localSha && syncStatus.remoteSha) {\n logger.error(` Local: ${syncStatus.localSha.substring(0, 8)}`);\n logger.error(` Remote: ${syncStatus.remoteSha.substring(0, 8)}`);\n }\n\n logger.error('');\n logger.error('📋 To resolve this issue:');\n logger.error(` 1. Switch to the target branch: git checkout ${effectiveTargetBranch}`);\n logger.error(` 2. Pull the latest changes: git pull origin ${effectiveTargetBranch}`);\n logger.error(' 3. Resolve any merge conflicts if they occur');\n logger.error(' 4. Switch back to your feature branch and re-run publish');\n logger.error('');\n logger.error('💡 Alternatively, run \"kodrdriv publish --sync-target\" to attempt automatic sync.');\n\n throw new Error(`Target branch '${effectiveTargetBranch}' is not in sync with remote. Please sync the branch before running publish.`);\n } else {\n logger.info(`✅ Target branch '${effectiveTargetBranch}' is in sync with remote.`);\n }\n } else {\n logger.info(`ℹ️ Target branch '${effectiveTargetBranch}' does not exist locally - will be created when needed.`);\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\n// Helper: deep-sort object keys for stable comparison\nconst sortObjectKeys = (value: any): any => {\n if (Array.isArray(value)) {\n return value.map(sortObjectKeys);\n }\n if (value && typeof value === 'object') {\n const sorted: any = {};\n Object.keys(value).sort().forEach((key) => {\n sorted[key] = sortObjectKeys(value[key]);\n });\n return sorted;\n }\n return value;\n};\n\n// Determine if there are substantive changes compared to the target branch (beyond just version bump)\nconst isReleaseNecessaryComparedToTarget = async (targetBranch: string, isDryRun: boolean): Promise<{ necessary: boolean; reason: string }> => {\n const logger = getDryRunLogger(isDryRun);\n\n // We compare current HEAD branch to the provided target branch\n const currentBranch = await GitHub.getCurrentBranchName();\n\n // Check if target branch exists before trying to compare\n try {\n // Validate target branch exists and is accessible\n await runSecure('git', ['rev-parse', '--verify', targetBranch]);\n } catch (error: any) {\n // Target branch doesn't exist or isn't accessible\n logger.verbose(`Target branch '${targetBranch}' does not exist or is not accessible. Proceeding with publish.`);\n return { necessary: true, reason: `Target branch '${targetBranch}' does not exist; first release to this branch` };\n }\n\n // If branches are identical, nothing to release\n const { stdout: namesStdout } = await runSecure('git', ['diff', '--name-only', `${targetBranch}..${currentBranch}`]);\n const changedFiles = namesStdout.split('\\n').map(s => s.trim()).filter(Boolean);\n\n if (changedFiles.length === 0) {\n // No definitive signal; proceed with publish rather than skipping\n return { necessary: true, reason: 'No detectable changes via diff; proceeding conservatively' };\n }\n\n // If any files changed other than package.json or package-lock.json, a release is necessary\n const nonVersionFiles = changedFiles.filter(f => f !== 'package.json' && f !== 'package-lock.json');\n if (nonVersionFiles.length > 0) {\n return { necessary: true, reason: `Changed files beyond version bump: ${nonVersionFiles.join(', ')}` };\n }\n\n // Only package.json and/or package-lock.json changed. Verify package.json change is only the version field\n try {\n // Read package.json content from both branches\n const { stdout: basePkgStdout } = await runSecure('git', ['show', `${targetBranch}:package.json`]);\n const { stdout: headPkgStdout } = await runSecure('git', ['show', `${currentBranch}:package.json`]);\n\n const basePkg = validatePackageJson(safeJsonParse(basePkgStdout, `${targetBranch}:package.json`), `${targetBranch}:package.json`);\n const headPkg = validatePackageJson(safeJsonParse(headPkgStdout, `${currentBranch}:package.json`), `${currentBranch}:package.json`);\n\n const { version: _baseVersion, ...baseWithoutVersion } = basePkg;\n const { version: _headVersion, ...headWithoutVersion } = headPkg;\n\n const baseSorted = sortObjectKeys(baseWithoutVersion);\n const headSorted = sortObjectKeys(headWithoutVersion);\n\n const equalExceptVersion = JSON.stringify(baseSorted) === JSON.stringify(headSorted);\n if (equalExceptVersion) {\n return { necessary: false, reason: 'Only version changed in package.json (plus lockfile)' };\n }\n\n // Other fields changed inside package.json\n return { necessary: true, reason: 'package.json changes beyond version field' };\n } catch (error: any) {\n // Conservative: if we cannot prove it is only a version change, proceed with release\n logger.verbose(`Could not conclusively compare package.json changes: ${error.message}`);\n return { necessary: true, reason: 'Could not compare package.json safely' };\n }\n};\n\nconst handleTargetBranchSyncRecovery = async (runConfig: Config, targetBranch: string): Promise<void> => {\n const isDryRun = runConfig.dryRun || false;\n const logger = getDryRunLogger(isDryRun);\n\n logger.info(`🔄 Attempting to sync target branch '${targetBranch}' with remote...`);\n\n if (isDryRun) {\n logger.info(`Would attempt to sync '${targetBranch}' with remote`);\n return;\n }\n\n const syncResult = await safeSyncBranchWithRemote(targetBranch);\n\n if (syncResult.success) {\n logger.info(`✅ Successfully synced '${targetBranch}' with remote.`);\n logger.info('You can now re-run the publish command.');\n } else if (syncResult.conflictResolutionRequired) {\n logger.error(`❌ Failed to sync '${targetBranch}': conflicts detected.`);\n logger.error('');\n logger.error('📋 Manual conflict resolution required:');\n logger.error(` 1. Switch to the target branch: git checkout ${targetBranch}`);\n logger.error(` 2. Pull and resolve conflicts: git pull origin ${targetBranch}`);\n logger.error(' 3. Commit the resolved changes');\n logger.error(' 4. Switch back to your feature branch and re-run publish');\n logger.error('');\n throw new Error(`Target branch '${targetBranch}' has conflicts that require manual resolution.`);\n } else {\n logger.error(`❌ Failed to sync '${targetBranch}': ${syncResult.error}`);\n throw new Error(`Failed to sync target branch: ${syncResult.error}`);\n }\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 // Get current branch for branch-dependent targeting\n let currentBranch: string;\n if (isDryRun) {\n currentBranch = 'mock-branch';\n } else {\n currentBranch = await GitHub.getCurrentBranchName();\n\n // Fetch latest remote information to avoid conflicts\n logger.info('📡 Fetching latest remote information to avoid conflicts...');\n try {\n await run('git fetch origin');\n logger.info('✅ Fetched latest remote information');\n } catch (error: any) {\n logger.warn(`⚠️ Could not fetch from remote: ${error.message}`);\n }\n\n // Sync current branch with remote to avoid conflicts\n logger.info(`🔄 Syncing ${currentBranch} with remote to avoid conflicts...`);\n try {\n const remoteExists = await run(`git ls-remote --exit-code --heads origin ${currentBranch}`).then(() => true).catch(() => false);\n\n if (remoteExists) {\n await run(`git pull origin ${currentBranch} --no-edit`);\n logger.info(`✅ Synced ${currentBranch} with remote`);\n } else {\n logger.info(`ℹ️ No remote ${currentBranch} branch found, will be created on first push`);\n }\n } catch (error: any) {\n if (error.message && error.message.includes('CONFLICT')) {\n logger.error(`❌ Merge conflicts detected when syncing ${currentBranch} with remote`);\n logger.error(` Please resolve the conflicts manually and then run:`);\n logger.error(` 1. Resolve conflicts in the files`);\n logger.error(` 2. git add <resolved-files>`);\n logger.error(` 3. git commit`);\n logger.error(` 4. kodrdriv publish (to continue)`);\n throw new Error(`Merge conflicts detected when syncing ${currentBranch} with remote. Please resolve conflicts manually.`);\n } else {\n logger.warn(`⚠️ Could not sync with remote ${currentBranch}: ${error.message}`);\n }\n }\n }\n\n // Determine target branch and version strategy based on branch configuration\n let targetBranch = runConfig.publish?.targetBranch || 'main';\n let branchDependentVersioning = false;\n\n // Check for branches configuration\n if (runConfig.branches && runConfig.branches[currentBranch]) {\n branchDependentVersioning = true;\n\n const branchConfig = runConfig.branches[currentBranch];\n\n if (branchConfig.targetBranch) {\n targetBranch = branchConfig.targetBranch;\n }\n\n logger.info(`🎯 Branch-dependent targeting enabled:`);\n logger.info(` Source branch: ${currentBranch}`);\n logger.info(` Target branch: ${targetBranch}`);\n\n // Look at target branch config to show version strategy\n const targetBranchConfig = runConfig.branches[targetBranch];\n if (targetBranchConfig?.version) {\n const versionType = targetBranchConfig.version.type;\n const versionTag = targetBranchConfig.version.tag;\n const versionIncrement = targetBranchConfig.version.increment;\n\n logger.info(` Target branch version strategy: ${versionType}${versionTag ? ` (tag: ${versionTag})` : ''}${versionIncrement ? ' with increment' : ''}`);\n }\n } else {\n logger.debug(`No branch-specific targeting configured for '${currentBranch}', using default target: ${targetBranch}`);\n }\n\n // Handle --sync-target flag\n if (runConfig.publish?.syncTarget) {\n await handleTargetBranchSyncRecovery(runConfig, targetBranch);\n return; // Exit after sync operation\n }\n\n // Check if target branch exists and create it if needed\n logger.info(`Checking if target branch '${targetBranch}' exists...`);\n if (isDryRun) {\n logger.info(`Would check if target branch '${targetBranch}' exists and create if needed`);\n } else {\n const targetBranchExists = await localBranchExists(targetBranch);\n if (!targetBranchExists) {\n logger.info(`🌟 Target branch '${targetBranch}' does not exist, creating it from current branch...`);\n try {\n // Create the target branch from the current HEAD\n await runSecure('git', ['branch', targetBranch, 'HEAD']);\n logger.info(`✅ Created target branch: ${targetBranch}`);\n\n // Push the new branch to origin\n await runSecure('git', ['push', 'origin', targetBranch]);\n logger.info(`✅ Pushed new target branch to origin: ${targetBranch}`);\n } catch (error: any) {\n throw new Error(`Failed to create target branch '${targetBranch}': ${error.message}`);\n }\n } else {\n logger.info(`✅ Target branch '${targetBranch}' already exists`);\n }\n }\n\n // Run prechecks before starting any work\n await runPrechecks(runConfig, targetBranch);\n\n // Early check: determine if a release is necessary compared to target branch\n logger.info('Evaluating if a release is necessary compared to target branch...');\n try {\n const necessity = await isReleaseNecessaryComparedToTarget(targetBranch, isDryRun);\n if (!necessity.necessary) {\n logger.info(`Skipping publish: ${necessity.reason}.`);\n // Emit a machine-readable marker so tree mode can detect skip and avoid propagating versions\n logger.info('KODRDRIV_PUBLISH_SKIPPED');\n return;\n } else {\n logger.verbose(`Proceeding with publish: ${necessity.reason}.`);\n }\n } catch (error: any) {\n // On unexpected errors, proceed with publish to avoid false negatives blocking releases\n logger.verbose(`Release necessity check encountered an issue (${error.message}). Proceeding with publish.`);\n }\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: Prepare for release (update dependencies and run prepublish checks) with NO version bump yet\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 2: Commit dependency updates if any (still no version bump)\n logger.verbose('Staging dependency updates for commit');\n await runWithDryRunSupport('git add package.json package-lock.json', isDryRun);\n\n logger.verbose('Checking for staged dependency updates...');\n if (isDryRun) {\n logger.verbose('Would create dependency update commit if changes are staged');\n } else {\n if (await Diff.hasStagedChanges()) {\n logger.verbose('Staged dependency changes found, creating commit...');\n await Commit.execute(runConfig);\n } else {\n logger.verbose('No dependency changes to commit, skipping commit.');\n }\n }\n\n // STEP 3: Determine and set target version AFTER checks and dependency commit\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 let proposedVersion: string;\n let finalTargetBranch = targetBranch;\n\n if (branchDependentVersioning && runConfig.branches) {\n // Use branch-dependent versioning logic\n const branchDependentResult = await calculateBranchDependentVersion(\n currentVersion,\n currentBranch,\n runConfig.branches,\n targetBranch\n );\n proposedVersion = branchDependentResult.version;\n finalTargetBranch = branchDependentResult.targetBranch;\n\n logger.info(`🎯 Branch-dependent version calculated: ${currentVersion} → ${proposedVersion}`);\n logger.info(`🎯 Final target branch: ${finalTargetBranch}`);\n\n // Update targetBranch for the rest of the function\n targetBranch = finalTargetBranch;\n } else {\n // Use existing logic for backward compatibility\n const targetVersionInput = runConfig.publish?.targetVersion || 'patch';\n proposedVersion = calculateTargetVersion(currentVersion, targetVersionInput);\n }\n\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 if (runConfig.publish?.interactive) {\n newVersion = await confirmVersionInteractively(currentVersion, proposedVersion, runConfig.publish?.targetVersion);\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 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 4: Commit version bump as a separate commit\n logger.verbose('Staging version bump for commit');\n await runWithDryRunSupport('git add package.json package-lock.json', isDryRun);\n\n if (isDryRun) {\n logger.verbose('Would create version bump commit');\n } else {\n if (await Diff.hasStagedChanges()) {\n logger.verbose('Creating version bump commit...');\n await Commit.execute(runConfig);\n } else {\n logger.verbose('No version changes to commit.');\n }\n }\n\n logger.info('Generating release notes...');\n // Create a modified config for release notes generation that includes the publish --from, --interactive, and --from-main options\n const releaseConfig = { ...runConfig };\n if (runConfig.publish?.from || runConfig.publish?.interactive || runConfig.publish?.fromMain) {\n // Pass the publish 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 ...(runConfig.publish.fromMain && { fromMain: runConfig.publish.fromMain })\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 if (runConfig.publish.fromMain) {\n logger.verbose('Forcing comparison against main branch for release notes');\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 branchName = await GitHub.getCurrentBranchName();\n await runWithDryRunSupport(`git push origin ${branchName}`, 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.', branchName, targetBranch);\n if (!pr) {\n throw new Error('Failed to create pull request.');\n }\n logger.info(`Pull request created: ${pr.html_url} (${branchName} → ${targetBranch})`);\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 || KODRDRIV_DEFAULTS.publish.checksTimeout;\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\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 // Switch to target branch and pull latest changes\n logger.info(`Checking out target branch: ${targetBranch}...`);\n\n // Check for uncommitted changes and stash them if necessary\n let hasStashedChanges = false;\n if (!isDryRun) {\n const { stdout: statusOutput } = await runSecure('git', ['status', '--porcelain']);\n if (statusOutput.trim()) {\n logger.info('📦 Stashing uncommitted changes before checkout...');\n await runSecure('git', ['stash', 'push', '-m', 'kodrdriv: stash before checkout target branch']);\n hasStashedChanges = true;\n logger.info('✅ Successfully stashed uncommitted changes');\n }\n }\n\n try {\n await runWithDryRunSupport(`git checkout ${targetBranch}`, isDryRun);\n\n // Sync target branch with remote to avoid conflicts during PR creation\n if (!isDryRun) {\n logger.info(`🔄 Syncing ${targetBranch} with remote to avoid PR conflicts...`);\n try {\n const remoteExists = await run(`git ls-remote --exit-code --heads origin ${targetBranch}`).then(() => true).catch(() => false);\n\n if (remoteExists) {\n await run(`git pull origin ${targetBranch} --no-edit`);\n logger.info(`✅ Synced ${targetBranch} with remote`);\n } else {\n logger.info(`ℹ️ No remote ${targetBranch} branch found, will be created on first push`);\n }\n } catch (syncError: any) {\n if (syncError.message && syncError.message.includes('CONFLICT')) {\n logger.error(`❌ Merge conflicts detected when syncing ${targetBranch} with remote`);\n logger.error(` Please resolve the conflicts manually:`);\n logger.error(` 1. git checkout ${targetBranch}`);\n logger.error(` 2. git pull origin ${targetBranch}`);\n logger.error(` 3. Resolve conflicts in the files`);\n logger.error(` 4. git add <resolved-files>`);\n logger.error(` 5. git commit`);\n logger.error(` 6. git checkout ${currentBranch}`);\n logger.error(` 7. kodrdriv publish (to continue)`);\n throw syncError;\n } else {\n logger.warn(`⚠️ Could not sync ${targetBranch} with remote: ${syncError.message}`);\n // Continue with publish process, but log the warning\n }\n }\n } else {\n logger.info(`Would sync ${targetBranch} with remote to avoid PR conflicts`);\n }\n } catch (error: any) {\n // Check if this is a merge conflict or sync issue\n if (!isDryRun && (error.message.includes('conflict') ||\n error.message.includes('CONFLICT') ||\n error.message.includes('diverged') ||\n error.message.includes('non-fast-forward'))) {\n\n logger.error(`❌ Failed to sync target branch '${targetBranch}' with remote.`);\n logger.error('');\n logger.error('📋 Recovery options:');\n logger.error(` 1. Run 'kodrdriv publish --sync-target' to attempt automatic resolution`);\n logger.error(` 2. Manually resolve conflicts:`);\n logger.error(` - git checkout ${targetBranch}`);\n logger.error(` - git pull origin ${targetBranch}`);\n logger.error(` - Resolve any conflicts and commit`);\n logger.error(` - Re-run your original publish command`);\n logger.error('');\n logger.error('💡 The publish process has been stopped to prevent data loss.');\n\n throw new Error(`Target branch '${targetBranch}' sync failed. Use recovery options above to resolve.`);\n } else {\n // Re-throw other errors\n throw error;\n }\n }\n\n // Restore stashed changes if we stashed them\n if (hasStashedChanges) {\n logger.info('📦 Restoring previously stashed changes...');\n try {\n await runSecure('git', ['stash', 'pop']);\n logger.info('✅ Successfully restored stashed changes');\n } catch (stashError: any) {\n logger.warn(`⚠️ Warning: Could not restore stashed changes: ${stashError.message}`);\n logger.warn(' Your changes are still available in the git stash. Run \"git stash list\" to see them.');\n }\n }\n\n // Now create and push the tag on the target 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 } = safeJsonParse(packageJsonContents, 'package.json');\n tagName = `v${version}`;\n\n // Check if tag already exists locally\n try {\n // Validate tag name to prevent injection\n if (!validateGitRef(tagName)) {\n throw new Error(`Invalid tag name: ${tagName}`);\n }\n const { stdout } = await runSecure('git', ['tag', '-l', tagName]);\n if (stdout.trim() === tagName) {\n logger.info(`Tag ${tagName} already exists locally, skipping tag creation`);\n } else {\n await runSecure('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 runSecure('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 runSecure('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 runSecure('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 runSecure('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 const milestonesEnabled = !runConfig.publish?.noMilestones;\n if (milestonesEnabled) {\n logger.info('Would close milestone for released version');\n } else {\n logger.info('Would skip milestone closure (--no-milestones)');\n }\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\n // Close milestone for this version if enabled\n const milestonesEnabled = !runConfig.publish?.noMilestones;\n if (milestonesEnabled) {\n logger.info('🏁 Closing milestone for released version...');\n const version = tagName.replace(/^v/, ''); // Remove 'v' prefix if present\n await GitHub.closeMilestoneForVersion(version);\n } else {\n logger.debug('Milestone integration disabled via --no-milestones');\n }\n\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 || KODRDRIV_DEFAULTS.publish.releaseWorkflowsTimeout;\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 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","targetBranch","dryRun","createStorage","log","info","run","originalMessage","toString","stdout","trim","effectiveTargetBranch","publish","currentBranch","GitHub","targetBranchExists","localBranchExists","syncStatus","isBranchInSyncWithRemote","inSync","localSha","remoteSha","substring","packageJsonPath","packageJson","packageJsonContents","parsed","safeJsonParse","validatePackageJson","scripts","prepublishOnly","coreRequiredEnvVars","npmrcEnvVars","allRequiredEnvVars","Set","sortObjectKeys","value","Array","isArray","map","sorted","Object","keys","sort","forEach","key","isReleaseNecessaryComparedToTarget","runSecure","necessary","reason","namesStdout","changedFiles","split","s","filter","Boolean","nonVersionFiles","f","basePkgStdout","headPkgStdout","basePkg","headPkg","version","_baseVersion","baseWithoutVersion","_headVersion","headWithoutVersion","baseSorted","headSorted","equalExceptVersion","JSON","stringify","handleTargetBranchSyncRecovery","syncResult","safeSyncBranchWithRemote","success","conflictResolutionRequired","execute","remoteExists","then","catch","branchDependentVersioning","branches","branchConfig","targetBranchConfig","versionType","type","versionTag","tag","versionIncrement","increment","syncTarget","necessity","pr","branchName","html_url","updatePatterns","dependencyUpdatePatterns","patternsArg","runWithDryRunSupport","Diff","Commit","newVersion","currentVersion","proposedVersion","finalTargetBranch","branchDependentResult","calculateBranchDependentVersion","targetVersionInput","targetVersion","calculateTargetVersion","targetTagName","tagExists","checkIfTagExists","interactive","confirmVersionInteractively","confirmedTagName","confirmedTagExists","writeFile","releaseConfig","from","fromMain","release","releaseSummary","Release","outputDirectory","DEFAULT_OUTPUT_DIRECTORY","ensureDirectory","releaseNotesPath","getOutputPath","releaseTitlePath","body","title","number","labels","commitTitle","timeout","checksTimeout","KODRDRIV_DEFAULTS","senditMode","sendit","skipUserConfirmation","mergeMethod","hasStashedChanges","statusOutput","syncError","stashError","tagName","validateGitRef","tagWasPushed","pushError","Promise","resolve","setTimeout","milestonesEnabled","noMilestones","releaseNotesContent","releaseTitle","retries","isTagNotFoundError","waitForWorkflows","waitForReleaseWorkflows","workflowTimeout","releaseWorkflowsTimeout","workflowNames","releaseWorkflowNames","undefined"],"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, runSecure, validateGitRef } from '../util/child';\nimport * as GitHub from '../util/github';\nimport { create as createStorage } from '../util/storage';\nimport { incrementPatchVersion, getOutputPath, calculateTargetVersion, checkIfTagExists, confirmVersionInteractively, calculateBranchDependentVersion } from '../util/general';\nimport { DEFAULT_OUTPUT_DIRECTORY, KODRDRIV_DEFAULTS } from '../constants';\nimport { safeJsonParse, validatePackageJson } from '../util/validation';\nimport { isBranchInSyncWithRemote, safeSyncBranchWithRemote, localBranchExists } from '../util/git';\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, targetBranch?: string): 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 // Use the passed target branch or fallback to config/default\n const effectiveTargetBranch = targetBranch || runConfig.publish?.targetBranch || 'main';\n\n // Check that we're not running from the target branch\n logger.info('Checking current branch...');\n if (isDryRun) {\n logger.info(`Would verify current branch is not the target branch (${effectiveTargetBranch})`);\n } else {\n const currentBranch = await GitHub.getCurrentBranchName();\n if (currentBranch === effectiveTargetBranch) {\n throw new Error(`Cannot run publish from the target branch '${effectiveTargetBranch}'. Please switch to a different branch before running publish.`);\n }\n }\n\n // Check target branch sync with remote\n logger.info(`Checking target branch '${effectiveTargetBranch}' sync with remote...`);\n if (isDryRun) {\n logger.info(`Would verify target branch '${effectiveTargetBranch}' is in sync with remote origin`);\n } else {\n // Only check if local target branch exists (it's okay if it doesn't exist locally)\n const targetBranchExists = await localBranchExists(effectiveTargetBranch);\n if (targetBranchExists) {\n const syncStatus = await isBranchInSyncWithRemote(effectiveTargetBranch);\n\n if (!syncStatus.inSync) {\n logger.error(`❌ Target branch '${effectiveTargetBranch}' is not in sync with remote.`);\n logger.error('');\n\n if (syncStatus.error) {\n logger.error(` Error: ${syncStatus.error}`);\n } else if (syncStatus.localSha && syncStatus.remoteSha) {\n logger.error(` Local: ${syncStatus.localSha.substring(0, 8)}`);\n logger.error(` Remote: ${syncStatus.remoteSha.substring(0, 8)}`);\n }\n\n logger.error('');\n logger.error('📋 To resolve this issue:');\n logger.error(` 1. Switch to the target branch: git checkout ${effectiveTargetBranch}`);\n logger.error(` 2. Pull the latest changes: git pull origin ${effectiveTargetBranch}`);\n logger.error(' 3. Resolve any merge conflicts if they occur');\n logger.error(' 4. Switch back to your feature branch and re-run publish');\n logger.error('');\n logger.error('💡 Alternatively, run \"kodrdriv publish --sync-target\" to attempt automatic sync.');\n\n throw new Error(`Target branch '${effectiveTargetBranch}' is not in sync with remote. Please sync the branch before running publish.`);\n } else {\n logger.info(`✅ Target branch '${effectiveTargetBranch}' is in sync with remote.`);\n }\n } else {\n logger.info(`ℹ️ Target branch '${effectiveTargetBranch}' does not exist locally - will be created when needed.`);\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\n// Helper: deep-sort object keys for stable comparison\nconst sortObjectKeys = (value: any): any => {\n if (Array.isArray(value)) {\n return value.map(sortObjectKeys);\n }\n if (value && typeof value === 'object') {\n const sorted: any = {};\n Object.keys(value).sort().forEach((key) => {\n sorted[key] = sortObjectKeys(value[key]);\n });\n return sorted;\n }\n return value;\n};\n\n// Determine if there are substantive changes compared to the target branch (beyond just version bump)\nconst isReleaseNecessaryComparedToTarget = async (targetBranch: string, isDryRun: boolean): Promise<{ necessary: boolean; reason: string }> => {\n const logger = getDryRunLogger(isDryRun);\n\n // We compare current HEAD branch to the provided target branch\n const currentBranch = await GitHub.getCurrentBranchName();\n\n // Check if target branch exists before trying to compare\n try {\n // Validate target branch exists and is accessible\n await runSecure('git', ['rev-parse', '--verify', targetBranch]);\n } catch (error: any) {\n // Target branch doesn't exist or isn't accessible\n logger.verbose(`Target branch '${targetBranch}' does not exist or is not accessible. Proceeding with publish.`);\n return { necessary: true, reason: `Target branch '${targetBranch}' does not exist; first release to this branch` };\n }\n\n // If branches are identical, nothing to release\n const { stdout: namesStdout } = await runSecure('git', ['diff', '--name-only', `${targetBranch}..${currentBranch}`]);\n const changedFiles = namesStdout.split('\\n').map(s => s.trim()).filter(Boolean);\n\n if (changedFiles.length === 0) {\n // No definitive signal; proceed with publish rather than skipping\n return { necessary: true, reason: 'No detectable changes via diff; proceeding conservatively' };\n }\n\n // If any files changed other than package.json or package-lock.json, a release is necessary\n const nonVersionFiles = changedFiles.filter(f => f !== 'package.json' && f !== 'package-lock.json');\n if (nonVersionFiles.length > 0) {\n return { necessary: true, reason: `Changed files beyond version bump: ${nonVersionFiles.join(', ')}` };\n }\n\n // Only package.json and/or package-lock.json changed. Verify package.json change is only the version field\n try {\n // Read package.json content from both branches\n const { stdout: basePkgStdout } = await runSecure('git', ['show', `${targetBranch}:package.json`]);\n const { stdout: headPkgStdout } = await runSecure('git', ['show', `${currentBranch}:package.json`]);\n\n const basePkg = validatePackageJson(safeJsonParse(basePkgStdout, `${targetBranch}:package.json`), `${targetBranch}:package.json`);\n const headPkg = validatePackageJson(safeJsonParse(headPkgStdout, `${currentBranch}:package.json`), `${currentBranch}:package.json`);\n\n const { version: _baseVersion, ...baseWithoutVersion } = basePkg;\n const { version: _headVersion, ...headWithoutVersion } = headPkg;\n\n const baseSorted = sortObjectKeys(baseWithoutVersion);\n const headSorted = sortObjectKeys(headWithoutVersion);\n\n const equalExceptVersion = JSON.stringify(baseSorted) === JSON.stringify(headSorted);\n if (equalExceptVersion) {\n return { necessary: false, reason: 'Only version changed in package.json (plus lockfile)' };\n }\n\n // Other fields changed inside package.json\n return { necessary: true, reason: 'package.json changes beyond version field' };\n } catch (error: any) {\n // Conservative: if we cannot prove it is only a version change, proceed with release\n logger.verbose(`Could not conclusively compare package.json changes: ${error.message}`);\n return { necessary: true, reason: 'Could not compare package.json safely' };\n }\n};\n\nconst handleTargetBranchSyncRecovery = async (runConfig: Config, targetBranch: string): Promise<void> => {\n const isDryRun = runConfig.dryRun || false;\n const logger = getDryRunLogger(isDryRun);\n\n logger.info(`🔄 Attempting to sync target branch '${targetBranch}' with remote...`);\n\n if (isDryRun) {\n logger.info(`Would attempt to sync '${targetBranch}' with remote`);\n return;\n }\n\n const syncResult = await safeSyncBranchWithRemote(targetBranch);\n\n if (syncResult.success) {\n logger.info(`✅ Successfully synced '${targetBranch}' with remote.`);\n logger.info('You can now re-run the publish command.');\n } else if (syncResult.conflictResolutionRequired) {\n logger.error(`❌ Failed to sync '${targetBranch}': conflicts detected.`);\n logger.error('');\n logger.error('📋 Manual conflict resolution required:');\n logger.error(` 1. Switch to the target branch: git checkout ${targetBranch}`);\n logger.error(` 2. Pull and resolve conflicts: git pull origin ${targetBranch}`);\n logger.error(' 3. Commit the resolved changes');\n logger.error(' 4. Switch back to your feature branch and re-run publish');\n logger.error('');\n throw new Error(`Target branch '${targetBranch}' has conflicts that require manual resolution.`);\n } else {\n logger.error(`❌ Failed to sync '${targetBranch}': ${syncResult.error}`);\n throw new Error(`Failed to sync target branch: ${syncResult.error}`);\n }\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 // Get current branch for branch-dependent targeting\n let currentBranch: string;\n if (isDryRun) {\n currentBranch = 'mock-branch';\n } else {\n currentBranch = await GitHub.getCurrentBranchName();\n\n // Fetch latest remote information to avoid conflicts\n logger.info('📡 Fetching latest remote information to avoid conflicts...');\n try {\n await run('git fetch origin');\n logger.info('✅ Fetched latest remote information');\n } catch (error: any) {\n logger.warn(`⚠️ Could not fetch from remote: ${error.message}`);\n }\n\n // Sync current branch with remote to avoid conflicts\n logger.info(`🔄 Syncing ${currentBranch} with remote to avoid conflicts...`);\n try {\n const remoteExists = await run(`git ls-remote --exit-code --heads origin ${currentBranch}`).then(() => true).catch(() => false);\n\n if (remoteExists) {\n await run(`git pull origin ${currentBranch} --no-edit`);\n logger.info(`✅ Synced ${currentBranch} with remote`);\n } else {\n logger.info(`ℹ️ No remote ${currentBranch} branch found, will be created on first push`);\n }\n } catch (error: any) {\n if (error.message && error.message.includes('CONFLICT')) {\n logger.error(`❌ Merge conflicts detected when syncing ${currentBranch} with remote`);\n logger.error(` Please resolve the conflicts manually and then run:`);\n logger.error(` 1. Resolve conflicts in the files`);\n logger.error(` 2. git add <resolved-files>`);\n logger.error(` 3. git commit`);\n logger.error(` 4. kodrdriv publish (to continue)`);\n throw new Error(`Merge conflicts detected when syncing ${currentBranch} with remote. Please resolve conflicts manually.`);\n } else {\n logger.warn(`⚠️ Could not sync with remote ${currentBranch}: ${error.message}`);\n }\n }\n }\n\n // Determine target branch and version strategy based on branch configuration\n let targetBranch = runConfig.publish?.targetBranch || 'main';\n let branchDependentVersioning = false;\n\n // Check for branches configuration\n if (runConfig.branches && runConfig.branches[currentBranch]) {\n branchDependentVersioning = true;\n\n const branchConfig = runConfig.branches[currentBranch];\n\n if (branchConfig.targetBranch) {\n targetBranch = branchConfig.targetBranch;\n }\n\n logger.info(`🎯 Branch-dependent targeting enabled:`);\n logger.info(` Source branch: ${currentBranch}`);\n logger.info(` Target branch: ${targetBranch}`);\n\n // Look at target branch config to show version strategy\n const targetBranchConfig = runConfig.branches[targetBranch];\n if (targetBranchConfig?.version) {\n const versionType = targetBranchConfig.version.type;\n const versionTag = targetBranchConfig.version.tag;\n const versionIncrement = targetBranchConfig.version.increment;\n\n logger.info(` Target branch version strategy: ${versionType}${versionTag ? ` (tag: ${versionTag})` : ''}${versionIncrement ? ' with increment' : ''}`);\n }\n } else {\n logger.debug(`No branch-specific targeting configured for '${currentBranch}', using default target: ${targetBranch}`);\n }\n\n // Handle --sync-target flag\n if (runConfig.publish?.syncTarget) {\n await handleTargetBranchSyncRecovery(runConfig, targetBranch);\n return; // Exit after sync operation\n }\n\n // Check if target branch exists and create it if needed\n logger.info(`Checking if target branch '${targetBranch}' exists...`);\n if (isDryRun) {\n logger.info(`Would check if target branch '${targetBranch}' exists and create if needed`);\n } else {\n const targetBranchExists = await localBranchExists(targetBranch);\n if (!targetBranchExists) {\n logger.info(`🌟 Target branch '${targetBranch}' does not exist, creating it from current branch...`);\n try {\n // Create the target branch from the current HEAD\n await runSecure('git', ['branch', targetBranch, 'HEAD']);\n logger.info(`✅ Created target branch: ${targetBranch}`);\n\n // Push the new branch to origin\n await runSecure('git', ['push', 'origin', targetBranch]);\n logger.info(`✅ Pushed new target branch to origin: ${targetBranch}`);\n } catch (error: any) {\n throw new Error(`Failed to create target branch '${targetBranch}': ${error.message}`);\n }\n } else {\n logger.info(`✅ Target branch '${targetBranch}' already exists`);\n }\n }\n\n // Run prechecks before starting any work\n await runPrechecks(runConfig, targetBranch);\n\n // Early check: determine if a release is necessary compared to target branch\n logger.info('Evaluating if a release is necessary compared to target branch...');\n try {\n const necessity = await isReleaseNecessaryComparedToTarget(targetBranch, isDryRun);\n if (!necessity.necessary) {\n logger.info(`Skipping publish: ${necessity.reason}.`);\n // Emit a machine-readable marker so tree mode can detect skip and avoid propagating versions\n logger.info('KODRDRIV_PUBLISH_SKIPPED');\n return;\n } else {\n logger.verbose(`Proceeding with publish: ${necessity.reason}.`);\n }\n } catch (error: any) {\n // On unexpected errors, proceed with publish to avoid false negatives blocking releases\n logger.verbose(`Release necessity check encountered an issue (${error.message}). Proceeding with publish.`);\n }\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: Prepare for release (update dependencies and run prepublish checks) with NO version bump yet\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 2: Commit dependency updates if any (still no version bump)\n logger.verbose('Staging dependency updates for commit');\n await runWithDryRunSupport('git add package.json package-lock.json', isDryRun);\n\n logger.verbose('Checking for staged dependency updates...');\n if (isDryRun) {\n logger.verbose('Would create dependency update commit if changes are staged');\n } else {\n if (await Diff.hasStagedChanges()) {\n logger.verbose('Staged dependency changes found, creating commit...');\n await Commit.execute(runConfig);\n } else {\n logger.verbose('No dependency changes to commit, skipping commit.');\n }\n }\n\n // STEP 3: Merge target branch into working branch to avoid conflicts\n logger.info(`Merging target branch '${targetBranch}' into current branch to avoid version conflicts...`);\n if (isDryRun) {\n logger.info(`Would merge ${targetBranch} into current branch`);\n } else {\n // Fetch the latest target branch\n try {\n await run(`git fetch origin ${targetBranch}:${targetBranch}`);\n logger.info(`✅ Fetched latest ${targetBranch}`);\n } catch (fetchError: any) {\n logger.warn(`⚠️ Could not fetch ${targetBranch}: ${fetchError.message}`);\n logger.warn('Continuing without merge - PR may have conflicts...');\n }\n\n // Check if merge is needed (avoid unnecessary merge commits)\n try {\n const { stdout: mergeBase } = await run(`git merge-base HEAD ${targetBranch}`);\n const { stdout: targetCommit } = await run(`git rev-parse ${targetBranch}`);\n\n if (mergeBase.trim() === targetCommit.trim()) {\n logger.info(`ℹ️ Already up-to-date with ${targetBranch}, no merge needed`);\n } else {\n // Try to merge target branch into current branch\n let mergeSucceeded = false;\n try {\n await run(`git merge ${targetBranch} --no-edit -m \"Merge ${targetBranch} to sync before version bump\"`);\n logger.info(`✅ Merged ${targetBranch} into current branch`);\n mergeSucceeded = true;\n } catch (mergeError: any) {\n // If merge conflicts occur, check if they're only in version-related files\n const errorText = [mergeError.message || '', mergeError.stdout || '', mergeError.stderr || ''].join(' ');\n if (errorText.includes('CONFLICT')) {\n logger.warn(`⚠️ Merge conflicts detected, attempting automatic resolution...`);\n\n // Get list of conflicted files\n const { stdout: conflictedFiles } = await run('git diff --name-only --diff-filter=U');\n const conflicts = conflictedFiles.trim().split('\\n').filter(Boolean);\n\n logger.verbose(`Conflicted files: ${conflicts.join(', ')}`);\n\n // Check if conflicts are only in package.json and package-lock.json\n const versionFiles = ['package.json', 'package-lock.json'];\n const nonVersionConflicts = conflicts.filter(f => !versionFiles.includes(f));\n\n if (nonVersionConflicts.length > 0) {\n logger.error(`❌ Cannot auto-resolve: conflicts in non-version files: ${nonVersionConflicts.join(', ')}`);\n logger.error('');\n logger.error('Please resolve conflicts manually:');\n logger.error(' 1. Resolve conflicts in the files listed above');\n logger.error(' 2. git add <resolved-files>');\n logger.error(' 3. git commit');\n logger.error(' 4. kodrdriv publish (to continue)');\n logger.error('');\n throw new Error(`Merge conflicts in non-version files. Please resolve manually.`);\n }\n\n // Auto-resolve version conflicts by accepting current branch versions\n // (keep our working branch's version, which is likely already updated)\n logger.info(`Auto-resolving version conflicts by keeping current branch versions...`);\n for (const file of conflicts) {\n if (versionFiles.includes(file)) {\n await run(`git checkout --ours ${file}`);\n await run(`git add ${file}`);\n logger.verbose(`Resolved ${file} using current branch version`);\n }\n }\n\n // Complete the merge\n await run(`git commit --no-edit -m \"Merge ${targetBranch} to sync before version bump (auto-resolved version conflicts)\"`);\n logger.info(`✅ Auto-resolved version conflicts and completed merge`);\n mergeSucceeded = true;\n } else {\n // Not a conflict error, re-throw\n throw mergeError;\n }\n }\n\n // Only run npm install if merge actually happened\n if (mergeSucceeded) {\n // Run npm install to update package-lock.json based on merged package.json\n logger.info('Running npm install after merge...');\n await run('npm install');\n logger.info('✅ npm install completed');\n\n // Commit any changes from npm install (e.g., package-lock.json updates)\n const { stdout: mergeChangesStatus } = await run('git status --porcelain');\n if (mergeChangesStatus.trim()) {\n logger.verbose('Staging post-merge changes for commit');\n await run('git add package.json package-lock.json');\n\n if (await Diff.hasStagedChanges()) {\n logger.verbose('Committing post-merge changes...');\n await Commit.execute(runConfig);\n }\n }\n }\n }\n } catch (error: any) {\n // Only catch truly unexpected errors here\n logger.error(`❌ Unexpected error during merge: ${error.message}`);\n throw error;\n }\n }\n\n // STEP 4: Determine and set target version AFTER checks, dependency commit, and target branch merge\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 let proposedVersion: string;\n let finalTargetBranch = targetBranch;\n\n if (branchDependentVersioning && runConfig.branches) {\n // Use branch-dependent versioning logic\n const branchDependentResult = await calculateBranchDependentVersion(\n currentVersion,\n currentBranch,\n runConfig.branches,\n targetBranch\n );\n proposedVersion = branchDependentResult.version;\n finalTargetBranch = branchDependentResult.targetBranch;\n\n logger.info(`🎯 Branch-dependent version calculated: ${currentVersion} → ${proposedVersion}`);\n logger.info(`🎯 Final target branch: ${finalTargetBranch}`);\n\n // Update targetBranch for the rest of the function\n targetBranch = finalTargetBranch;\n } else {\n // Use existing logic for backward compatibility\n const targetVersionInput = runConfig.publish?.targetVersion || 'patch';\n proposedVersion = calculateTargetVersion(currentVersion, targetVersionInput);\n }\n\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 if (runConfig.publish?.interactive) {\n newVersion = await confirmVersionInteractively(currentVersion, proposedVersion, runConfig.publish?.targetVersion);\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 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 5: Commit version bump as a separate commit\n logger.verbose('Staging version bump for commit');\n await runWithDryRunSupport('git add package.json package-lock.json', isDryRun);\n\n if (isDryRun) {\n logger.verbose('Would create version bump commit');\n } else {\n if (await Diff.hasStagedChanges()) {\n logger.verbose('Creating version bump commit...');\n await Commit.execute(runConfig);\n } else {\n logger.verbose('No version changes to commit.');\n }\n }\n\n logger.info('Generating release notes...');\n // Create a modified config for release notes generation that includes the publish --from, --interactive, and --from-main options\n const releaseConfig = { ...runConfig };\n if (runConfig.publish?.from || runConfig.publish?.interactive || runConfig.publish?.fromMain) {\n // Pass the publish 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 ...(runConfig.publish.fromMain && { fromMain: runConfig.publish.fromMain })\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 if (runConfig.publish.fromMain) {\n logger.verbose('Forcing comparison against main branch for release notes');\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 branchName = await GitHub.getCurrentBranchName();\n await runWithDryRunSupport(`git push origin ${branchName}`, 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.', branchName, targetBranch);\n if (!pr) {\n throw new Error('Failed to create pull request.');\n }\n logger.info(`Pull request created: ${pr.html_url} (${branchName} → ${targetBranch})`);\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 || KODRDRIV_DEFAULTS.publish.checksTimeout;\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\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 // Switch to target branch and pull latest changes\n logger.info(`Checking out target branch: ${targetBranch}...`);\n\n // Check for uncommitted changes and stash them if necessary\n let hasStashedChanges = false;\n if (!isDryRun) {\n const { stdout: statusOutput } = await runSecure('git', ['status', '--porcelain']);\n if (statusOutput.trim()) {\n logger.info('📦 Stashing uncommitted changes before checkout...');\n await runSecure('git', ['stash', 'push', '-m', 'kodrdriv: stash before checkout target branch']);\n hasStashedChanges = true;\n logger.info('✅ Successfully stashed uncommitted changes');\n }\n }\n\n try {\n await runWithDryRunSupport(`git checkout ${targetBranch}`, isDryRun);\n\n // Sync target branch with remote to avoid conflicts during PR creation\n if (!isDryRun) {\n logger.info(`🔄 Syncing ${targetBranch} with remote to avoid PR conflicts...`);\n try {\n const remoteExists = await run(`git ls-remote --exit-code --heads origin ${targetBranch}`).then(() => true).catch(() => false);\n\n if (remoteExists) {\n await run(`git pull origin ${targetBranch} --no-edit`);\n logger.info(`✅ Synced ${targetBranch} with remote`);\n } else {\n logger.info(`ℹ️ No remote ${targetBranch} branch found, will be created on first push`);\n }\n } catch (syncError: any) {\n if (syncError.message && syncError.message.includes('CONFLICT')) {\n logger.error(`❌ Merge conflicts detected when syncing ${targetBranch} with remote`);\n logger.error(` Please resolve the conflicts manually:`);\n logger.error(` 1. git checkout ${targetBranch}`);\n logger.error(` 2. git pull origin ${targetBranch}`);\n logger.error(` 3. Resolve conflicts in the files`);\n logger.error(` 4. git add <resolved-files>`);\n logger.error(` 5. git commit`);\n logger.error(` 6. git checkout ${currentBranch}`);\n logger.error(` 7. kodrdriv publish (to continue)`);\n throw syncError;\n } else {\n logger.warn(`⚠️ Could not sync ${targetBranch} with remote: ${syncError.message}`);\n // Continue with publish process, but log the warning\n }\n }\n } else {\n logger.info(`Would sync ${targetBranch} with remote to avoid PR conflicts`);\n }\n } catch (error: any) {\n // Check if this is a merge conflict or sync issue\n if (!isDryRun && (error.message.includes('conflict') ||\n error.message.includes('CONFLICT') ||\n error.message.includes('diverged') ||\n error.message.includes('non-fast-forward'))) {\n\n logger.error(`❌ Failed to sync target branch '${targetBranch}' with remote.`);\n logger.error('');\n logger.error('📋 Recovery options:');\n logger.error(` 1. Run 'kodrdriv publish --sync-target' to attempt automatic resolution`);\n logger.error(` 2. Manually resolve conflicts:`);\n logger.error(` - git checkout ${targetBranch}`);\n logger.error(` - git pull origin ${targetBranch}`);\n logger.error(` - Resolve any conflicts and commit`);\n logger.error(` - Re-run your original publish command`);\n logger.error('');\n logger.error('💡 The publish process has been stopped to prevent data loss.');\n\n throw new Error(`Target branch '${targetBranch}' sync failed. Use recovery options above to resolve.`);\n } else {\n // Re-throw other errors\n throw error;\n }\n }\n\n // Restore stashed changes if we stashed them\n if (hasStashedChanges) {\n logger.info('📦 Restoring previously stashed changes...');\n try {\n await runSecure('git', ['stash', 'pop']);\n logger.info('✅ Successfully restored stashed changes');\n } catch (stashError: any) {\n logger.warn(`⚠️ Warning: Could not restore stashed changes: ${stashError.message}`);\n logger.warn(' Your changes are still available in the git stash. Run \"git stash list\" to see them.');\n }\n }\n\n // Now create and push the tag on the target 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 } = safeJsonParse(packageJsonContents, 'package.json');\n tagName = `v${version}`;\n\n // Check if tag already exists locally\n try {\n // Validate tag name to prevent injection\n if (!validateGitRef(tagName)) {\n throw new Error(`Invalid tag name: ${tagName}`);\n }\n const { stdout } = await runSecure('git', ['tag', '-l', tagName]);\n if (stdout.trim() === tagName) {\n logger.info(`Tag ${tagName} already exists locally, skipping tag creation`);\n } else {\n await runSecure('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 runSecure('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 runSecure('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 runSecure('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 runSecure('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 const milestonesEnabled = !runConfig.publish?.noMilestones;\n if (milestonesEnabled) {\n logger.info('Would close milestone for released version');\n } else {\n logger.info('Would skip milestone closure (--no-milestones)');\n }\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\n // Close milestone for this version if enabled\n const milestonesEnabled = !runConfig.publish?.noMilestones;\n if (milestonesEnabled) {\n logger.info('🏁 Closing milestone for released version...');\n const version = tagName.replace(/^v/, ''); // Remove 'v' prefix if present\n await GitHub.closeMilestoneForVersion(version);\n } else {\n logger.debug('Milestone integration disabled via --no-milestones');\n }\n\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 || KODRDRIV_DEFAULTS.publish.releaseWorkflowsTimeout;\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 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","targetBranch","dryRun","createStorage","log","info","run","originalMessage","toString","stdout","trim","effectiveTargetBranch","publish","currentBranch","GitHub","targetBranchExists","localBranchExists","syncStatus","isBranchInSyncWithRemote","inSync","localSha","remoteSha","substring","packageJsonPath","packageJson","packageJsonContents","parsed","safeJsonParse","validatePackageJson","scripts","prepublishOnly","coreRequiredEnvVars","npmrcEnvVars","allRequiredEnvVars","Set","sortObjectKeys","value","Array","isArray","map","sorted","Object","keys","sort","forEach","key","isReleaseNecessaryComparedToTarget","runSecure","necessary","reason","namesStdout","changedFiles","split","s","filter","Boolean","nonVersionFiles","f","basePkgStdout","headPkgStdout","basePkg","headPkg","version","_baseVersion","baseWithoutVersion","_headVersion","headWithoutVersion","baseSorted","headSorted","equalExceptVersion","JSON","stringify","handleTargetBranchSyncRecovery","syncResult","safeSyncBranchWithRemote","success","conflictResolutionRequired","execute","remoteExists","then","catch","branchDependentVersioning","branches","branchConfig","targetBranchConfig","versionType","type","versionTag","tag","versionIncrement","increment","syncTarget","necessity","pr","branchName","html_url","updatePatterns","dependencyUpdatePatterns","patternsArg","runWithDryRunSupport","Diff","Commit","fetchError","mergeBase","targetCommit","mergeSucceeded","mergeError","errorText","stderr","conflictedFiles","conflicts","versionFiles","nonVersionConflicts","file","mergeChangesStatus","newVersion","currentVersion","proposedVersion","finalTargetBranch","branchDependentResult","calculateBranchDependentVersion","targetVersionInput","targetVersion","calculateTargetVersion","targetTagName","tagExists","checkIfTagExists","interactive","confirmVersionInteractively","confirmedTagName","confirmedTagExists","writeFile","releaseConfig","from","fromMain","release","releaseSummary","Release","outputDirectory","DEFAULT_OUTPUT_DIRECTORY","ensureDirectory","releaseNotesPath","getOutputPath","releaseTitlePath","body","title","number","labels","commitTitle","timeout","checksTimeout","KODRDRIV_DEFAULTS","senditMode","sendit","skipUserConfirmation","mergeMethod","hasStashedChanges","statusOutput","syncError","stashError","tagName","validateGitRef","tagWasPushed","pushError","Promise","resolve","setTimeout","milestonesEnabled","noMilestones","releaseNotesContent","releaseTitle","retries","isTagNotFoundError","waitForWorkflows","waitForReleaseWorkflows","workflowTimeout","releaseWorkflowsTimeout","workflowNames","releaseWorkflowNames","undefined"],"mappings":"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"}
|
package/dist/constants.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import os__default from 'os';
|
|
2
2
|
import path__default from 'path';
|
|
3
3
|
|
|
4
|
-
const VERSION = '1.2.
|
|
4
|
+
const VERSION = '1.2.11 (HEAD/6a77a06 T:v1.2.11 2025-10-13 06:17:37 -0700) linux x64 v22.20.0';
|
|
5
5
|
const PROGRAM_NAME = 'kodrdriv';
|
|
6
6
|
const DEFAULT_OVERRIDES = false;
|
|
7
7
|
const DATE_FORMAT_YEAR_MONTH_DAY_HOURS_MINUTES_SECONDS_MILLISECONDS = 'YYYY-MM-DD-HHmmss.SSS';
|
package/dist/util/github.js
CHANGED
|
@@ -31,13 +31,35 @@ const getRepoDetails = async ()=>{
|
|
|
31
31
|
repo: match[2]
|
|
32
32
|
};
|
|
33
33
|
};
|
|
34
|
+
// GitHub API limit for pull request titles
|
|
35
|
+
const GITHUB_PR_TITLE_LIMIT = 256;
|
|
36
|
+
const truncatePullRequestTitle = (title)=>{
|
|
37
|
+
if (title.length <= GITHUB_PR_TITLE_LIMIT) {
|
|
38
|
+
return title;
|
|
39
|
+
}
|
|
40
|
+
// Reserve space for "..." suffix
|
|
41
|
+
const maxLength = GITHUB_PR_TITLE_LIMIT - 3;
|
|
42
|
+
let truncated = title.substring(0, maxLength);
|
|
43
|
+
// Try to break at word boundary to avoid cutting words in half
|
|
44
|
+
const lastSpaceIndex = truncated.lastIndexOf(' ');
|
|
45
|
+
if (lastSpaceIndex > maxLength * 0.8) {
|
|
46
|
+
truncated = truncated.substring(0, lastSpaceIndex);
|
|
47
|
+
}
|
|
48
|
+
return truncated + '...';
|
|
49
|
+
};
|
|
34
50
|
const createPullRequest = async (title, body, head, base = 'main')=>{
|
|
35
51
|
const octokit = getOctokit();
|
|
36
52
|
const { owner, repo } = await getRepoDetails();
|
|
53
|
+
const logger = getLogger();
|
|
54
|
+
// Truncate title if it exceeds GitHub's limit
|
|
55
|
+
const truncatedTitle = truncatePullRequestTitle(title.trim());
|
|
56
|
+
if (truncatedTitle !== title.trim()) {
|
|
57
|
+
logger.debug(`Pull request title truncated from ${title.trim().length} to ${truncatedTitle.length} characters to meet GitHub's 256-character limit`);
|
|
58
|
+
}
|
|
37
59
|
const response = await octokit.pulls.create({
|
|
38
60
|
owner,
|
|
39
61
|
repo,
|
|
40
|
-
title,
|
|
62
|
+
title: truncatedTitle,
|
|
41
63
|
body,
|
|
42
64
|
head,
|
|
43
65
|
base
|
package/dist/util/github.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github.js","sources":["../../src/util/github.ts"],"sourcesContent":["import { Octokit } from '@octokit/rest';\nimport { getLogger } from '../logging';\nimport { PullRequest, MergeMethod } from '../types';\nimport { run } from './child';\nimport { promptConfirmation } from './stdin';\n\nexport const getOctokit = (): Octokit => {\n const logger = getLogger();\n const token = process.env.GITHUB_TOKEN;\n\n if (!token) {\n logger.error('GITHUB_TOKEN environment variable is not set.');\n throw new Error('GITHUB_TOKEN is not set.');\n }\n\n return new Octokit({\n auth: token,\n });\n};\n\nexport const getCurrentBranchName = async (): Promise<string> => {\n const { stdout } = await run('git rev-parse --abbrev-ref HEAD');\n return stdout.trim();\n};\n\nexport const getRepoDetails = async (): Promise<{ owner: string; repo: string }> => {\n const { stdout } = await run('git remote get-url origin');\n const url = stdout.trim();\n // git@github.com:owner/repo.git or https://github.com/owner/repo.git\n const match = url.match(/github\\.com[/:]([\\w-]+)\\/([\\w.-]+)\\.git/);\n if (!match) {\n throw new Error(`Could not parse repository owner and name from origin URL: \"${url}\". Expected format: git@github.com:owner/repo.git or https://github.com/owner/repo.git`);\n }\n return { owner: match[1], repo: match[2] };\n};\n\nexport const createPullRequest = async (\n title: string,\n body: string,\n head: string,\n base: string = 'main'\n): Promise<PullRequest> => {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoDetails();\n\n const response = await octokit.pulls.create({\n owner,\n repo,\n title,\n body,\n head,\n base,\n });\n\n return response.data;\n};\n\nexport const findOpenPullRequestByHeadRef = async (head: string): Promise<PullRequest | null> => {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoDetails();\n const logger = getLogger();\n\n try {\n logger.debug(`Searching for open pull requests with head: ${owner}:${head} in ${owner}/${repo}`);\n\n const response = await octokit.pulls.list({\n owner,\n repo,\n state: 'open',\n head: `${owner}:${head}`,\n });\n\n logger.debug(`Found ${response.data.length} open pull requests`);\n return response.data[0] ?? null;\n } catch (error: any) {\n logger.error(`Failed to find open pull requests: ${error.message}`);\n if (error.status === 404) {\n logger.error(`Repository ${owner}/${repo} not found or access denied. Please check your GITHUB_TOKEN permissions.`);\n }\n throw error;\n }\n};\n\nconst delay = (ms: number) => new Promise(resolve => setTimeout(resolve, ms));\n\n// Check if repository has GitHub Actions workflows configured\nconst hasWorkflowsConfigured = async (): Promise<boolean> => {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoDetails();\n\n try {\n const response = await octokit.actions.listRepoWorkflows({\n owner,\n repo,\n });\n\n return response.data.workflows.length > 0;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (error: any) {\n // If we can't check workflows (e.g., no Actions permission), assume they might exist\n return true;\n }\n};\n\n/**\n * Check if any workflow runs have been triggered for a specific PR\n * This is more specific than hasWorkflowsConfigured as it checks for actual runs\n */\nconst hasWorkflowRunsForPR = async (prNumber: number): Promise<boolean> => {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoDetails();\n const logger = getLogger();\n\n try {\n // Get the PR to find the head SHA\n const pr = await octokit.pulls.get({\n owner,\n repo,\n pull_number: prNumber,\n });\n\n const headSha = pr.data.head.sha;\n const headRef = pr.data.head.ref;\n\n // Check for workflow runs triggered by this PR\n const workflowRuns = await octokit.actions.listWorkflowRunsForRepo({\n owner,\n repo,\n head_sha: headSha,\n per_page: 50, // Check recent runs\n });\n\n // Also check for runs on the branch\n const branchRuns = await octokit.actions.listWorkflowRunsForRepo({\n owner,\n repo,\n branch: headRef,\n per_page: 50,\n });\n\n const allRuns = [...workflowRuns.data.workflow_runs, ...branchRuns.data.workflow_runs];\n\n // Filter to runs that match our PR's head SHA or are very recent on the branch\n const relevantRuns = allRuns.filter(run =>\n run.head_sha === headSha ||\n (run.head_branch === headRef && new Date(run.created_at).getTime() > Date.now() - 300000) // Last 5 minutes\n );\n\n if (relevantRuns.length > 0) {\n logger.debug(`Found ${relevantRuns.length} workflow runs for PR #${prNumber} (SHA: ${headSha})`);\n return true;\n }\n\n logger.debug(`No workflow runs found for PR #${prNumber} (SHA: ${headSha}, branch: ${headRef})`);\n return false;\n\n\n } catch (error: any) {\n logger.debug(`Error checking workflow runs for PR #${prNumber}: ${error.message}`);\n // If we can't check workflow runs, assume they might exist\n return true;\n }\n};\n\nexport const waitForPullRequestChecks = async (prNumber: number, options: { timeout?: number; skipUserConfirmation?: boolean } = {}): Promise<void> => {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoDetails();\n const logger = getLogger();\n const timeout = options.timeout || 3600000; // 1 hour default timeout\n const skipUserConfirmation = options.skipUserConfirmation || false;\n\n const startTime = Date.now();\n let consecutiveNoChecksCount = 0;\n const maxConsecutiveNoChecks = 6; // 6 consecutive checks (1 minute) with no checks before asking user\n let checkedWorkflowRuns = false; // Track if we've already checked for workflow runs to avoid repeated checks\n\n while (true) {\n const elapsedTime = Date.now() - startTime;\n\n // Check for timeout\n if (elapsedTime > timeout) {\n logger.warn(`Timeout reached (${timeout / 1000}s) while waiting for PR #${prNumber} checks.`);\n\n if (!skipUserConfirmation) {\n const proceedWithoutChecks = await promptConfirmation(\n `⚠️ Timeout reached while waiting for PR #${prNumber} checks.\\n` +\n `This might indicate that no checks are configured for this repository.\\n` +\n `Do you want to proceed with merging the PR without waiting for checks?`\n );\n\n if (proceedWithoutChecks) {\n logger.info('User chose to proceed without waiting for checks.');\n return;\n } else {\n throw new Error(`Timeout waiting for PR #${prNumber} checks. User chose not to proceed.`);\n }\n } else {\n throw new Error(`Timeout waiting for PR #${prNumber} checks (${timeout / 1000}s)`);\n }\n }\n\n const pr = await octokit.pulls.get({\n owner,\n repo,\n pull_number: prNumber,\n });\n\n const checkRunsResponse = await octokit.checks.listForRef({\n owner,\n repo,\n ref: pr.data.head.sha,\n });\n\n const checkRuns = checkRunsResponse.data.check_runs;\n\n if (checkRuns.length === 0) {\n consecutiveNoChecksCount++;\n logger.info(`PR #${prNumber}: No checks found (${consecutiveNoChecksCount}/${maxConsecutiveNoChecks}). Waiting...`);\n\n // After several consecutive \"no checks\" responses, check if workflows are configured\n if (consecutiveNoChecksCount >= maxConsecutiveNoChecks) {\n logger.info(`No checks detected for ${maxConsecutiveNoChecks} consecutive attempts. Checking repository configuration...`);\n\n const hasWorkflows = await hasWorkflowsConfigured();\n\n if (!hasWorkflows) {\n logger.warn(`No GitHub Actions workflows found in repository ${owner}/${repo}.`);\n\n if (!skipUserConfirmation) {\n const proceedWithoutChecks = await promptConfirmation(\n `⚠️ No GitHub Actions workflows or checks are configured for this repository.\\n` +\n `PR #${prNumber} will never have status checks to wait for.\\n` +\n `Do you want to proceed with merging the PR without checks?`\n );\n\n if (proceedWithoutChecks) {\n logger.info('User chose to proceed without checks (no workflows configured).');\n return;\n } else {\n throw new Error(`No checks configured for PR #${prNumber}. User chose not to proceed.`);\n }\n } else {\n // In non-interactive mode, proceed if no workflows are configured\n logger.info('No workflows configured, proceeding without checks.');\n return;\n }\n } else {\n // Workflows exist, but check if any are actually running for this PR\n if (!checkedWorkflowRuns) {\n logger.info('GitHub Actions workflows are configured. Checking if any workflows are triggered for this PR...');\n\n const hasRunsForPR = await hasWorkflowRunsForPR(prNumber);\n checkedWorkflowRuns = true; // Mark that we've checked\n\n if (!hasRunsForPR) {\n logger.warn(`No workflow runs detected for PR #${prNumber}. This may indicate that the configured workflows don't match this branch pattern.`);\n\n if (!skipUserConfirmation) {\n const proceedWithoutChecks = await promptConfirmation(\n `⚠️ GitHub Actions workflows are configured in this repository, but none appear to be triggered by PR #${prNumber}.\\n` +\n `This usually means the workflow trigger patterns (branches, paths) don't match this PR.\\n` +\n `PR #${prNumber} will likely never have status checks to wait for.\\n` +\n `Do you want to proceed with merging the PR without waiting for checks?`\n );\n\n if (proceedWithoutChecks) {\n logger.info('User chose to proceed without checks (no matching workflow triggers).');\n return;\n } else {\n throw new Error(`No matching workflow triggers for PR #${prNumber}. User chose not to proceed.`);\n }\n } else {\n // In non-interactive mode, proceed if no workflow runs are detected\n logger.info('No workflow runs detected for this PR, proceeding without checks.');\n return;\n }\n } else {\n logger.info('Workflow runs detected for this PR. Continuing to wait for checks...');\n consecutiveNoChecksCount = 0; // Reset counter since workflow runs exist\n }\n } else {\n // We've already checked workflow runs and found none that match this PR\n // At this point, we should give up to avoid infinite loops\n logger.warn(`Still no checks after ${consecutiveNoChecksCount} attempts. No workflow runs match this PR.`);\n\n if (!skipUserConfirmation) {\n const proceedWithoutChecks = await promptConfirmation(\n `⚠️ After waiting ${Math.round(elapsedTime / 1000)}s, no checks have appeared for PR #${prNumber}.\\n` +\n `The configured workflows don't appear to trigger for this branch.\\n` +\n `Do you want to proceed with merging the PR without checks?`\n );\n\n if (proceedWithoutChecks) {\n logger.info('User chose to proceed without checks (timeout waiting for workflow triggers).');\n return;\n } else {\n throw new Error(`No workflow triggers matched PR #${prNumber} after waiting. User chose not to proceed.`);\n }\n } else {\n // In non-interactive mode, proceed after reasonable waiting\n logger.info('No workflow runs detected after waiting, proceeding without checks.');\n return;\n }\n }\n }\n }\n\n await delay(10000);\n continue;\n }\n\n // Reset the no-checks counter since we found some checks\n consecutiveNoChecksCount = 0;\n\n const failingChecks = checkRuns.filter(\n (cr) => cr.conclusion && ['failure', 'timed_out', 'cancelled'].includes(cr.conclusion)\n );\n\n if (failingChecks.length > 0) {\n const { owner, repo } = await getRepoDetails();\n const prUrl = `https://github.com/${owner}/${repo}/pull/${prNumber}`;\n\n // Get current branch name for better guidance\n let currentBranch: string | undefined;\n try {\n currentBranch = await getCurrentBranchName();\n } catch {\n // Fallback to generic branch reference if we can't get the current branch\n currentBranch = undefined;\n }\n\n // Collect detailed information about each failed check\n const detailedFailedChecks = await Promise.all(\n failingChecks.map(async (check) => {\n try {\n // Get additional details from the check run\n const checkDetails = await octokit.checks.get({\n owner,\n repo,\n check_run_id: check.id,\n });\n\n return {\n name: check.name,\n conclusion: check.conclusion || 'unknown',\n detailsUrl: check.details_url || undefined,\n summary: checkDetails.data.output?.summary || undefined,\n output: {\n title: checkDetails.data.output?.title || undefined,\n summary: checkDetails.data.output?.summary || undefined,\n text: checkDetails.data.output?.text || undefined,\n },\n };\n } catch {\n // Fallback to basic information if we can't get details\n return {\n name: check.name,\n conclusion: check.conclusion || 'unknown',\n detailsUrl: check.details_url || undefined,\n };\n }\n })\n );\n\n logger.error(`❌ PR #${prNumber} has ${failingChecks.length} failing check${failingChecks.length > 1 ? 's' : ''}:`);\n logger.error('');\n\n for (const check of detailedFailedChecks) {\n const statusIcon = check.conclusion === 'failure' ? '❌' :\n check.conclusion === 'timed_out' ? '⏰' : '🚫';\n logger.error(`${statusIcon} ${check.name}: ${check.conclusion}`);\n\n // Show more detailed error information if available\n if (check.output?.title && check.output.title !== check.name) {\n logger.error(` Issue: ${check.output.title}`);\n }\n\n if (check.output?.summary) {\n // Truncate very long summaries\n const summary = check.output.summary.length > 200\n ? check.output.summary.substring(0, 200) + '...'\n : check.output.summary;\n logger.error(` Summary: ${summary}`);\n }\n\n // Include direct link to check details\n if (check.detailsUrl) {\n logger.error(` Details: ${check.detailsUrl}`);\n }\n logger.error('');\n }\n\n // Import the new error class\n const { PullRequestCheckError } = await import('../error/CommandErrors');\n\n // Create and throw the enhanced error with detailed recovery instructions\n const prError = new PullRequestCheckError(\n `PR #${prNumber} checks failed. ${failingChecks.length} check${failingChecks.length > 1 ? 's' : ''} failed.`,\n prNumber,\n detailedFailedChecks,\n prUrl,\n currentBranch\n );\n\n // Display recovery instructions\n const instructions = prError.getRecoveryInstructions();\n for (const instruction of instructions) {\n logger.error(instruction);\n }\n logger.error('');\n\n throw prError;\n }\n\n const allChecksCompleted = checkRuns.every((cr) => cr.status === 'completed');\n\n if (allChecksCompleted) {\n logger.info(`All checks for PR #${prNumber} have completed successfully.`);\n return;\n }\n\n const completedCount = checkRuns.filter(cr => cr.status === 'completed').length;\n logger.info(`PR #${prNumber} checks: ${completedCount}/${checkRuns.length} completed. Waiting...`);\n\n await delay(10000); // wait 10 seconds\n }\n};\n\nexport const mergePullRequest = async (\n prNumber: number,\n mergeMethod: MergeMethod = 'squash',\n deleteBranch: boolean = true\n): Promise<void> => {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoDetails();\n const logger = getLogger();\n\n logger.info(`Merging PR #${prNumber} using ${mergeMethod} method...`);\n const pr = await octokit.pulls.get({\n owner,\n repo,\n pull_number: prNumber,\n });\n const headBranch = pr.data.head.ref;\n\n await octokit.pulls.merge({\n owner,\n repo,\n pull_number: prNumber,\n merge_method: mergeMethod,\n });\n logger.info(`PR #${prNumber} merged using ${mergeMethod} method.`);\n\n if (deleteBranch) {\n logger.info(`Deleting branch ${headBranch}...`);\n await octokit.git.deleteRef({\n owner,\n repo,\n ref: `heads/${headBranch}`,\n });\n logger.info(`Branch ${headBranch} deleted.`);\n } else {\n logger.info(`Preserving branch ${headBranch} (deletion skipped).`);\n }\n};\n\nexport const createRelease = async (tagName: string, title: string, notes: string): Promise<void> => {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoDetails();\n const logger = getLogger();\n\n logger.info(`Creating release for tag ${tagName}...`);\n await octokit.repos.createRelease({\n owner,\n repo,\n tag_name: tagName,\n name: title,\n body: notes,\n });\n logger.info(`Release ${tagName} created.`);\n};\n\nexport const getReleaseByTagName = async (tagName: string): Promise<any> => {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoDetails();\n const logger = getLogger();\n\n try {\n const response = await octokit.repos.getReleaseByTag({\n owner,\n repo,\n tag: tagName,\n });\n\n logger.debug(`Found release for tag ${tagName}: created at ${response.data.created_at}`);\n return response.data;\n } catch (error: any) {\n logger.debug(`Failed to get release for tag ${tagName}: ${error.message}`);\n throw error;\n }\n};\n\nexport const getOpenIssues = async (limit: number = 20): Promise<string> => {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoDetails();\n const logger = getLogger();\n\n try {\n logger.debug(`Fetching up to ${limit} open GitHub issues...`);\n\n const response = await octokit.issues.listForRepo({\n owner,\n repo,\n state: 'open',\n per_page: Math.min(limit, 100), // GitHub API limit\n sort: 'updated',\n direction: 'desc',\n });\n\n const issues = response.data.filter(issue => !issue.pull_request); // Filter out PRs\n\n if (issues.length === 0) {\n logger.debug('No open issues found');\n return '';\n }\n\n const issueStrings = issues.slice(0, limit).map(issue => {\n const labels = issue.labels.map(label =>\n typeof label === 'string' ? label : label.name\n ).join(', ');\n\n return [\n `Issue #${issue.number}: ${issue.title}`,\n `Labels: ${labels || 'none'}`,\n `Created: ${issue.created_at}`,\n `Updated: ${issue.updated_at}`,\n `Body: ${issue.body?.substring(0, 500) || 'No description'}${issue.body && issue.body.length > 500 ? '...' : ''}`,\n '---'\n ].join('\\n');\n });\n\n logger.debug(`Fetched ${issues.length} open issues`);\n return issueStrings.join('\\n\\n');\n } catch (error: any) {\n logger.warn('Failed to fetch GitHub issues: %s', error.message);\n return '';\n }\n};\n\nexport const createIssue = async (\n title: string,\n body: string,\n labels?: string[]\n): Promise<{ number: number; html_url: string }> => {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoDetails();\n\n const response = await octokit.issues.create({\n owner,\n repo,\n title,\n body,\n labels: labels || [],\n });\n\n return {\n number: response.data.number,\n html_url: response.data.html_url,\n };\n};\n\nexport const getWorkflowRunsTriggeredByRelease = async (tagName: string, workflowNames?: string[]): Promise<any[]> => {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoDetails();\n const logger = getLogger();\n\n try {\n logger.debug(`Fetching workflow runs triggered by release ${tagName}...`);\n\n // Get release information to filter by creation time and commit SHA\n let releaseInfo: any;\n let releaseCreatedAt: string | undefined;\n let releaseCommitSha: string | undefined;\n\n try {\n releaseInfo = await getReleaseByTagName(tagName);\n releaseCreatedAt = releaseInfo?.created_at;\n releaseCommitSha = releaseInfo?.target_commitish;\n } catch (error: any) {\n logger.debug(`Could not get release info for ${tagName}: ${error.message}. Using more permissive filtering.`);\n }\n\n if (releaseCreatedAt) {\n logger.debug(`Release ${tagName} was created at ${releaseCreatedAt}, filtering workflows created after this time`);\n } else {\n logger.debug(`No release creation time available for ${tagName}, using more permissive time filtering`);\n }\n\n if (releaseCommitSha) {\n logger.debug(`Release ${tagName} targets commit ${releaseCommitSha}`);\n }\n\n // Get all workflows\n const workflowsResponse = await octokit.actions.listRepoWorkflows({\n owner,\n repo,\n });\n\n const relevantWorkflows = workflowsResponse.data.workflows.filter(workflow => {\n // If specific workflow names are provided, only include those\n if (workflowNames && workflowNames.length > 0) {\n return workflowNames.includes(workflow.name);\n }\n // Otherwise, find workflows that trigger on releases\n return true; // We'll filter by event later when we get the runs\n });\n\n logger.debug(`Found ${relevantWorkflows.length} workflows to check`);\n\n const allRuns: any[] = [];\n\n // Get recent workflow runs for each workflow\n for (const workflow of relevantWorkflows) {\n try {\n const runsResponse = await octokit.actions.listWorkflowRuns({\n owner,\n repo,\n workflow_id: workflow.id,\n per_page: 30, // Check more runs to account for filtering\n });\n\n logger.debug(`Checking ${runsResponse.data.workflow_runs.length} recent runs for workflow \"${workflow.name}\"`);\n\n // Filter runs that were triggered by our specific release\n const releaseRuns = runsResponse.data.workflow_runs.filter(run => {\n logger.debug(`Evaluating run ${run.id} for workflow \"${workflow.name}\": event=${run.event}, created_at=${run.created_at}`);\n\n // Must have required data\n if (!run.created_at) {\n logger.debug(`Excluding workflow run ${run.id}: missing created_at`);\n return false;\n }\n\n // Simple logic: if we have release info, just check that the run was created after the release\n if (releaseCreatedAt) {\n const runCreatedAt = new Date(run.created_at).getTime();\n const releaseCreatedAtTime = new Date(releaseCreatedAt).getTime();\n\n // Include any run that started after the release (with 1 minute buffer for timing)\n if (runCreatedAt < releaseCreatedAtTime - 60000) {\n logger.debug(`Excluding workflow run ${run.id}: created before release (run: ${run.created_at}, release: ${releaseCreatedAt})`);\n return false;\n }\n } else {\n // No release info - just look for recent runs (within last 30 minutes)\n const runAge = Date.now() - new Date(run.created_at).getTime();\n if (runAge > 1800000) { // 30 minutes\n logger.debug(`Excluding old workflow run ${run.id}: created ${run.created_at}`);\n return false;\n }\n }\n\n logger.debug(`Including workflow run ${run.id}: ${workflow.name} (${run.status}/${run.conclusion || 'pending'}) created ${run.created_at}`);\n return true;\n });\n\n allRuns.push(...releaseRuns);\n\n if (releaseRuns.length > 0) {\n logger.debug(`Found ${releaseRuns.length} relevant workflow runs for ${workflow.name}`);\n } else {\n logger.debug(`No relevant workflow runs found for ${workflow.name}`);\n }\n } catch (error: any) {\n logger.warn(`Failed to get runs for workflow ${workflow.name}: ${error.message}`);\n }\n }\n\n // Sort by creation time (newest first)\n allRuns.sort((a, b) => {\n return new Date(b.created_at).getTime() - new Date(a.created_at).getTime();\n });\n\n logger.debug(`Found ${allRuns.length} workflow runs triggered by release ${tagName}`);\n return allRuns;\n } catch (error: any) {\n logger.error(`Failed to get workflow runs for release ${tagName}: ${error.message}`);\n return [];\n }\n};\n\nexport const waitForReleaseWorkflows = async (\n tagName: string,\n options: {\n timeout?: number;\n workflowNames?: string[];\n skipUserConfirmation?: boolean;\n } = {}\n): Promise<void> => {\n const logger = getLogger();\n const timeout = options.timeout || 1800000; // 30 minutes default\n const skipUserConfirmation = options.skipUserConfirmation || false;\n\n logger.info(`Waiting for workflows triggered by release ${tagName}...`);\n\n // Wait for workflows to start (GitHub can take time to process the release and trigger workflows)\n logger.debug('Waiting 20 seconds for workflows to start...');\n await delay(20000);\n\n const startTime = Date.now();\n let workflowRuns: any[] = [];\n let consecutiveNoWorkflowsCount = 0;\n const maxConsecutiveNoWorkflows = 20;\n\n while (true) {\n const elapsedTime = Date.now() - startTime;\n\n // Check for timeout\n if (elapsedTime > timeout) {\n logger.warn(`Timeout reached (${timeout / 1000}s) while waiting for release workflows.`);\n\n if (!skipUserConfirmation) {\n const proceedWithoutWorkflows = await promptConfirmation(\n `⚠️ Timeout reached while waiting for release workflows for ${tagName}.\\n` +\n `This might indicate that no workflows are configured to trigger on releases.\\n` +\n `Do you want to proceed anyway?`\n );\n\n if (proceedWithoutWorkflows) {\n logger.info('User chose to proceed without waiting for release workflows.');\n return;\n } else {\n throw new Error(`Timeout waiting for release workflows for ${tagName}. User chose not to proceed.`);\n }\n } else {\n throw new Error(`Timeout waiting for release workflows for ${tagName} (${timeout / 1000}s)`);\n }\n }\n\n // Get current workflow runs\n workflowRuns = await getWorkflowRunsTriggeredByRelease(tagName, options.workflowNames);\n\n if (workflowRuns.length === 0) {\n consecutiveNoWorkflowsCount++;\n logger.info(`No release workflows found (${consecutiveNoWorkflowsCount}/${maxConsecutiveNoWorkflows}). Waiting...`);\n\n // Add debug info about what we're looking for\n if (consecutiveNoWorkflowsCount === 1) {\n logger.debug(`Looking for workflows triggered by release ${tagName}`);\n if (options.workflowNames && options.workflowNames.length > 0) {\n logger.debug(`Specific workflows to monitor: ${options.workflowNames.join(', ')}`);\n } else {\n logger.debug('Monitoring all workflows that might be triggered by releases');\n }\n }\n\n // After several attempts with no workflows, ask user if they want to continue\n if (consecutiveNoWorkflowsCount >= maxConsecutiveNoWorkflows) {\n logger.warn(`No workflows triggered by release ${tagName} after ${maxConsecutiveNoWorkflows} attempts.`);\n\n if (!skipUserConfirmation) {\n const proceedWithoutWorkflows = await promptConfirmation(\n `⚠️ No GitHub Actions workflows appear to be triggered by the release ${tagName}.\\n` +\n `This might be expected if no workflows are configured for release events.\\n` +\n `Do you want to proceed without waiting for workflows?`\n );\n\n if (proceedWithoutWorkflows) {\n logger.info('User chose to proceed without release workflows.');\n return;\n } else {\n throw new Error(`No release workflows found for ${tagName}. User chose not to proceed.`);\n }\n } else {\n // In non-interactive mode, proceed if no workflows are found\n logger.info('No release workflows found, proceeding.');\n return;\n }\n }\n\n await delay(10000);\n continue;\n }\n\n // Reset counter since we found workflows\n consecutiveNoWorkflowsCount = 0;\n\n // Check status of all workflow runs\n const failingRuns = workflowRuns.filter(run =>\n run.conclusion && ['failure', 'timed_out', 'cancelled'].includes(run.conclusion)\n );\n\n if (failingRuns.length > 0) {\n logger.error(`Release workflows for ${tagName} have failures:`);\n for (const run of failingRuns) {\n logger.error(`- ${run.name}: ${run.conclusion} (${run.html_url})`);\n }\n throw new Error(`Release workflows for ${tagName} failed.`);\n }\n\n const allWorkflowsCompleted = workflowRuns.every(run => run.status === 'completed');\n\n if (allWorkflowsCompleted) {\n const successfulRuns = workflowRuns.filter(run => run.conclusion === 'success');\n logger.info(`All ${workflowRuns.length} release workflows for ${tagName} completed successfully.`);\n for (const run of successfulRuns) {\n logger.info(`✓ ${run.name}: ${run.conclusion}`);\n }\n return;\n }\n\n const completedCount = workflowRuns.filter(run => run.status === 'completed').length;\n const runningCount = workflowRuns.filter(run => run.status === 'in_progress').length;\n const queuedCount = workflowRuns.filter(run => run.status === 'queued').length;\n\n // Log detailed information about each workflow run being tracked\n if (workflowRuns.length > 0) {\n logger.debug(`Tracking ${workflowRuns.length} workflow runs for release ${tagName}:`);\n workflowRuns.forEach(run => {\n const statusIcon = run.status === 'completed' ?\n (run.conclusion === 'success' ? '✅' : run.conclusion === 'failure' ? '❌' : '⚠️') :\n run.status === 'in_progress' ? '🔄' : '⏳';\n logger.debug(` ${statusIcon} ${run.name} (${run.status}${run.conclusion ? `/${run.conclusion}` : ''}) - created ${run.created_at}`);\n });\n }\n\n logger.info(\n `Release workflows for ${tagName}: ${completedCount} completed, ${runningCount} running, ${queuedCount} queued (${workflowRuns.length} total)`\n );\n\n await delay(15000); // wait 15 seconds\n }\n};\n\nexport const getWorkflowsTriggeredByRelease = async (): Promise<string[]> => {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoDetails();\n const logger = getLogger();\n\n try {\n logger.debug('Analyzing workflows to find those triggered by release events...');\n\n // Get all workflows\n const workflowsResponse = await octokit.actions.listRepoWorkflows({\n owner,\n repo,\n });\n\n const releaseWorkflows: string[] = [];\n\n // Check each workflow's configuration\n for (const workflow of workflowsResponse.data.workflows) {\n try {\n // Get the workflow file content\n const workflowPath = workflow.path;\n logger.debug(`Analyzing workflow: ${workflow.name} (${workflowPath})`);\n\n const contentResponse = await octokit.repos.getContent({\n owner,\n repo,\n path: workflowPath,\n });\n\n // Handle the response - it could be a file or directory\n if ('content' in contentResponse.data && contentResponse.data.type === 'file') {\n // Decode the base64 content\n const content = Buffer.from(contentResponse.data.content, 'base64').toString('utf-8');\n\n // Parse the YAML to check trigger conditions\n if (isTriggeredByRelease(content, workflow.name)) {\n logger.debug(`✓ Workflow \"${workflow.name}\" will be triggered by release events`);\n releaseWorkflows.push(workflow.name);\n } else {\n logger.debug(`✗ Workflow \"${workflow.name}\" will not be triggered by release events`);\n }\n } else {\n logger.warn(`Could not read content for workflow ${workflow.name}`);\n }\n } catch (error: any) {\n logger.warn(`Failed to analyze workflow ${workflow.name}: ${error.message}`);\n }\n }\n\n logger.info(`Found ${releaseWorkflows.length} workflows that will be triggered by release events: ${releaseWorkflows.join(', ')}`);\n return releaseWorkflows;\n } catch (error: any) {\n logger.error(`Failed to analyze workflows: ${error.message}`);\n return [];\n }\n};\n\nconst isTriggeredByRelease = (workflowContent: string, workflowName: string): boolean => {\n const logger = getLogger();\n\n try {\n // Simple regex-based parsing since we don't want to add a YAML dependency\n // Look for common release trigger patterns\n\n // Pattern 1: on.release (with or without types)\n // on:\n // release:\n // types: [published, created, ...]\n const releaseEventPattern = /(?:^|\\n)\\s*on\\s*:\\s*(?:\\n|\\r\\n)(?:\\s+[^\\S\\r\\n]+)*(?:\\s+release\\s*:)/m;\n\n // Pattern 2: on: [push, release] or on: release\n const onReleasePattern = /(?:^|\\n)\\s*on\\s*:\\s*(?:\\[.*release.*\\]|release)\\s*(?:\\n|$)/m;\n\n // Pattern 3: push with tag patterns that look like releases\n // on:\n // push:\n // tags:\n // - 'v*'\n // - 'release/*'\n const tagPushPattern = /(?:^|\\r?\\n)[^\\S\\r\\n]*on\\s*:\\s*\\r?\\n(?:[^\\S\\r\\n]*[^\\r\\n]+(?:\\r?\\n))*?[^\\S\\r\\n]*push\\s*:\\s*\\r?\\n(?:[^\\S\\r\\n]*tags\\s*:\\s*(?:\\r?\\n|\\[)[^\\]\\r\\n]*(?:v\\*|release|tag)[^\\]\\r\\n]*)/mi;\n\n const isTriggered = releaseEventPattern.test(workflowContent) ||\n onReleasePattern.test(workflowContent) ||\n tagPushPattern.test(workflowContent);\n\n if (isTriggered) {\n logger.debug(`Workflow \"${workflowName}\" trigger patterns detected in content`);\n }\n\n return isTriggered;\n } catch (error: any) {\n logger.warn(`Failed to parse workflow content for ${workflowName}: ${error.message}`);\n return false;\n }\n};\n\n// Milestone Management Functions\n\nexport const findMilestoneByTitle = async (title: string): Promise<any | null> => {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoDetails();\n const logger = getLogger();\n\n try {\n logger.debug(`Searching for milestone: ${title}`);\n\n const response = await octokit.issues.listMilestones({\n owner,\n repo,\n state: 'all',\n per_page: 100,\n });\n\n const milestone = response.data.find(m => m.title === title);\n\n if (milestone) {\n logger.debug(`Found milestone: ${milestone.title} (${milestone.state})`);\n } else {\n logger.debug(`Milestone not found: ${title}`);\n }\n\n return milestone || null;\n } catch (error: any) {\n logger.error(`Failed to search for milestone ${title}: ${error.message}`);\n throw error;\n }\n};\n\nexport const createMilestone = async (title: string, description?: string): Promise<any> => {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoDetails();\n const logger = getLogger();\n\n try {\n logger.info(`Creating milestone: ${title}`);\n\n const response = await octokit.issues.createMilestone({\n owner,\n repo,\n title,\n description,\n });\n\n logger.info(`✅ Milestone created: ${title} (#${response.data.number})`);\n return response.data;\n } catch (error: any) {\n logger.error(`Failed to create milestone ${title}: ${error.message}`);\n throw error;\n }\n};\n\nexport const closeMilestone = async (milestoneNumber: number): Promise<void> => {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoDetails();\n const logger = getLogger();\n\n try {\n logger.info(`Closing milestone #${milestoneNumber}...`);\n\n await octokit.issues.updateMilestone({\n owner,\n repo,\n milestone_number: milestoneNumber,\n state: 'closed',\n });\n\n logger.info(`✅ Milestone #${milestoneNumber} closed`);\n } catch (error: any) {\n logger.error(`Failed to close milestone #${milestoneNumber}: ${error.message}`);\n throw error;\n }\n};\n\nexport const getOpenIssuesForMilestone = async (milestoneNumber: number): Promise<any[]> => {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoDetails();\n const logger = getLogger();\n\n try {\n logger.debug(`Getting open issues for milestone #${milestoneNumber}`);\n\n const response = await octokit.issues.listForRepo({\n owner,\n repo,\n state: 'open',\n milestone: milestoneNumber.toString(),\n per_page: 100,\n });\n\n const issues = response.data.filter(issue => !issue.pull_request); // Filter out PRs\n\n logger.debug(`Found ${issues.length} open issues for milestone #${milestoneNumber}`);\n return issues;\n } catch (error: any) {\n logger.error(`Failed to get issues for milestone #${milestoneNumber}: ${error.message}`);\n throw error;\n }\n};\n\nexport const moveIssueToMilestone = async (issueNumber: number, milestoneNumber: number): Promise<void> => {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoDetails();\n const logger = getLogger();\n\n try {\n logger.debug(`Moving issue #${issueNumber} to milestone #${milestoneNumber}`);\n\n await octokit.issues.update({\n owner,\n repo,\n issue_number: issueNumber,\n milestone: milestoneNumber,\n });\n\n logger.debug(`✅ Issue #${issueNumber} moved to milestone #${milestoneNumber}`);\n } catch (error: any) {\n logger.error(`Failed to move issue #${issueNumber} to milestone #${milestoneNumber}: ${error.message}`);\n throw error;\n }\n};\n\nexport const moveOpenIssuesToNewMilestone = async (fromMilestoneNumber: number, toMilestoneNumber: number): Promise<number> => {\n const logger = getLogger();\n\n try {\n const openIssues = await getOpenIssuesForMilestone(fromMilestoneNumber);\n\n if (openIssues.length === 0) {\n logger.debug(`No open issues to move from milestone #${fromMilestoneNumber}`);\n return 0;\n }\n\n logger.info(`Moving ${openIssues.length} open issues from milestone #${fromMilestoneNumber} to #${toMilestoneNumber}`);\n\n for (const issue of openIssues) {\n await moveIssueToMilestone(issue.number, toMilestoneNumber);\n }\n\n logger.info(`✅ Moved ${openIssues.length} issues to new milestone`);\n return openIssues.length;\n } catch (error: any) {\n logger.error(`Failed to move issues between milestones: ${error.message}`);\n throw error;\n }\n};\n\nexport const ensureMilestoneForVersion = async (version: string, fromVersion?: string): Promise<void> => {\n const logger = getLogger();\n\n try {\n const milestoneTitle = `release/${version}`;\n logger.debug(`Ensuring milestone exists: ${milestoneTitle}`);\n\n // Check if milestone already exists\n let milestone = await findMilestoneByTitle(milestoneTitle);\n\n if (milestone) {\n logger.info(`✅ Milestone already exists: ${milestoneTitle}`);\n return;\n }\n\n // Create new milestone\n milestone = await createMilestone(milestoneTitle, `Release ${version}`);\n\n // If we have a previous version, move open issues from its milestone\n if (fromVersion) {\n const previousMilestoneTitle = `release/${fromVersion}`;\n const previousMilestone = await findMilestoneByTitle(previousMilestoneTitle);\n\n if (previousMilestone && previousMilestone.state === 'closed') {\n const movedCount = await moveOpenIssuesToNewMilestone(previousMilestone.number, milestone.number);\n if (movedCount > 0) {\n logger.info(`📋 Moved ${movedCount} open issues from ${previousMilestoneTitle} to ${milestoneTitle}`);\n }\n }\n }\n } catch (error: any) {\n // Don't fail the whole operation if milestone management fails\n logger.warn(`⚠️ Milestone management failed (continuing): ${error.message}`);\n }\n};\n\nexport const closeMilestoneForVersion = async (version: string): Promise<void> => {\n const logger = getLogger();\n\n try {\n const milestoneTitle = `release/${version}`;\n logger.debug(`Closing milestone: ${milestoneTitle}`);\n\n const milestone = await findMilestoneByTitle(milestoneTitle);\n\n if (!milestone) {\n logger.debug(`Milestone not found: ${milestoneTitle}`);\n return;\n }\n\n if (milestone.state === 'closed') {\n logger.debug(`Milestone already closed: ${milestoneTitle}`);\n return;\n }\n\n await closeMilestone(milestone.number);\n logger.info(`🏁 Closed milestone: ${milestoneTitle}`);\n } catch (error: any) {\n // Don't fail the whole operation if milestone management fails\n logger.warn(`⚠️ Failed to close milestone (continuing): ${error.message}`);\n }\n};\n\nexport const getClosedIssuesForMilestone = async (milestoneNumber: number, limit: number = 50): Promise<any[]> => {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoDetails();\n const logger = getLogger();\n\n try {\n logger.debug(`Getting closed issues for milestone #${milestoneNumber}`);\n\n const response = await octokit.issues.listForRepo({\n owner,\n repo,\n state: 'closed',\n milestone: milestoneNumber.toString(),\n per_page: Math.min(limit, 100),\n sort: 'updated',\n direction: 'desc',\n });\n\n // Filter out PRs and only include issues closed as completed\n const issues = response.data.filter(issue =>\n !issue.pull_request &&\n issue.state_reason === 'completed'\n );\n\n logger.debug(`Found ${issues.length} closed issues for milestone #${milestoneNumber}`);\n return issues;\n } catch (error: any) {\n logger.error(`Failed to get closed issues for milestone #${milestoneNumber}: ${error.message}`);\n throw error;\n }\n};\n\nexport const getIssueDetails = async (issueNumber: number, maxTokens: number = 20000): Promise<any> => {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoDetails();\n const logger = getLogger();\n\n try {\n logger.debug(`Getting details for issue #${issueNumber}`);\n\n // Get the issue\n const issueResponse = await octokit.issues.get({\n owner,\n repo,\n issue_number: issueNumber,\n });\n\n const issue = issueResponse.data;\n const content = {\n title: issue.title,\n body: issue.body || '',\n comments: [] as any[],\n totalTokens: 0\n };\n\n // Estimate tokens (rough approximation: 1 token ≈ 4 characters)\n const estimateTokens = (text: string) => Math.ceil(text.length / 4);\n\n let currentTokens = estimateTokens(content.title + content.body);\n content.totalTokens = currentTokens;\n\n // If we're already at or near the limit with just title and body, return now\n if (currentTokens >= maxTokens * 0.9) {\n logger.debug(`Issue #${issueNumber} title/body already uses ${currentTokens} tokens, skipping comments`);\n return content;\n }\n\n // Get comments\n try {\n const commentsResponse = await octokit.issues.listComments({\n owner,\n repo,\n issue_number: issueNumber,\n per_page: 100,\n });\n\n for (const comment of commentsResponse.data) {\n const commentTokens = estimateTokens(comment.body || '');\n\n if (currentTokens + commentTokens > maxTokens) {\n logger.debug(`Stopping at comment to stay under ${maxTokens} token limit for issue #${issueNumber}`);\n break;\n }\n\n content.comments.push({\n author: comment.user?.login,\n body: comment.body,\n created_at: comment.created_at,\n });\n\n currentTokens += commentTokens;\n }\n } catch (error: any) {\n logger.debug(`Failed to get comments for issue #${issueNumber}: ${error.message}`);\n }\n\n content.totalTokens = currentTokens;\n logger.debug(`Issue #${issueNumber} details: ${currentTokens} tokens`);\n\n return content;\n } catch (error: any) {\n logger.error(`Failed to get details for issue #${issueNumber}: ${error.message}`);\n throw error;\n }\n};\n\nexport const getMilestoneIssuesForRelease = async (versions: string[], maxTotalTokens: number = 50000): Promise<string> => {\n const logger = getLogger();\n\n try {\n const allIssues: any[] = [];\n const processedVersions: string[] = [];\n\n for (const version of versions) {\n const milestoneTitle = `release/${version}`;\n logger.debug(`Looking for milestone: ${milestoneTitle}`);\n\n const milestone = await findMilestoneByTitle(milestoneTitle);\n\n if (!milestone) {\n logger.debug(`Milestone not found: ${milestoneTitle}`);\n continue;\n }\n\n const issues = await getClosedIssuesForMilestone(milestone.number);\n if (issues.length > 0) {\n allIssues.push(...issues.map(issue => ({ ...issue, version })));\n processedVersions.push(version);\n logger.info(`📋 Found ${issues.length} closed issues in milestone ${milestoneTitle}`);\n }\n }\n\n if (allIssues.length === 0) {\n logger.debug('No closed issues found in any milestones');\n return '';\n }\n\n // Sort issues by updated date (most recent first)\n allIssues.sort((a, b) => new Date(b.updated_at).getTime() - new Date(a.updated_at).getTime());\n\n logger.info(`📋 Processing ${allIssues.length} issues for release notes (max ${maxTotalTokens} tokens)`);\n\n let releaseNotesContent = '';\n let totalTokens = 0;\n const estimateTokens = (text: string) => Math.ceil(text.length / 4);\n\n // Add header\n const header = `## Issues Resolved\\n\\nThe following issues were resolved in this release:\\n\\n`;\n releaseNotesContent += header;\n totalTokens += estimateTokens(header);\n\n for (const issue of allIssues) {\n // Get detailed issue content with individual token limit\n const issueDetails = await getIssueDetails(issue.number, 20000);\n\n // Create issue section\n let issueSection = `### #${issue.number}: ${issueDetails.title}\\n\\n`;\n\n if (issueDetails.body) {\n issueSection += `**Description:**\\n${issueDetails.body}\\n\\n`;\n }\n\n if (issueDetails.comments.length > 0) {\n issueSection += `**Key Discussion Points:**\\n`;\n for (const comment of issueDetails.comments) {\n issueSection += `- **${comment.author}**: ${comment.body}\\n`;\n }\n issueSection += '\\n';\n }\n\n // Add labels if present\n if (issue.labels && issue.labels.length > 0) {\n const labelNames = issue.labels.map((label: any) =>\n typeof label === 'string' ? label : label.name\n ).join(', ');\n issueSection += `**Labels:** ${labelNames}\\n\\n`;\n }\n\n issueSection += '---\\n\\n';\n\n const sectionTokens = estimateTokens(issueSection);\n\n // Check if adding this issue would exceed the total limit\n if (totalTokens + sectionTokens > maxTotalTokens) {\n logger.info(`Stopping at issue #${issue.number} to stay under ${maxTotalTokens} token limit`);\n break;\n }\n\n releaseNotesContent += issueSection;\n totalTokens += sectionTokens;\n\n logger.debug(`Added issue #${issue.number} (${sectionTokens} tokens, total: ${totalTokens})`);\n }\n\n logger.info(`📋 Generated release notes from milestone issues (${totalTokens} tokens)`);\n return releaseNotesContent;\n\n } catch (error: any) {\n // Don't fail the whole operation if milestone content fails\n logger.warn(`⚠️ Failed to get milestone issues for release notes (continuing): ${error.message}`);\n return '';\n }\n};\n\n/**\n * Get recently closed GitHub issues for commit message context.\n * Prioritizes issues from milestones that match the current version.\n */\nexport const getRecentClosedIssuesForCommit = async (currentVersion?: string, limit: number = 10): Promise<string> => {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoDetails();\n const logger = getLogger();\n\n try {\n logger.debug(`Fetching up to ${limit} recently closed GitHub issues for commit context...`);\n\n // Get recently closed issues\n const response = await octokit.issues.listForRepo({\n owner,\n repo,\n state: 'closed',\n per_page: Math.min(limit, 100), // GitHub API limit\n sort: 'updated',\n direction: 'desc',\n });\n\n const issues = response.data.filter(issue =>\n !issue.pull_request && // Filter out PRs\n issue.state_reason === 'completed' // Only issues closed as completed\n );\n\n if (issues.length === 0) {\n logger.debug('No recently closed issues found');\n return '';\n }\n\n // Determine relevant milestone if we have a current version\n let relevantMilestone: any = null;\n if (currentVersion) {\n // Extract base version for milestone matching (e.g., \"0.1.1\" from \"0.1.1-dev.0\")\n const baseVersion = currentVersion.includes('-dev.')\n ? currentVersion.split('-')[0]\n : currentVersion;\n\n const milestoneTitle = `release/${baseVersion}`;\n relevantMilestone = await findMilestoneByTitle(milestoneTitle);\n\n if (relevantMilestone) {\n logger.debug(`Found relevant milestone: ${milestoneTitle}`);\n } else {\n logger.debug(`No milestone found for version: ${baseVersion}`);\n }\n }\n\n // Categorize issues by relevance\n const milestoneIssues: any[] = [];\n const otherIssues: any[] = [];\n\n for (const issue of issues.slice(0, limit)) {\n if (relevantMilestone && issue.milestone?.number === relevantMilestone.number) {\n milestoneIssues.push(issue);\n } else {\n otherIssues.push(issue);\n }\n }\n\n // Build the content, prioritizing milestone issues\n const issueStrings: string[] = [];\n\n // Add milestone issues first (these are most relevant)\n if (milestoneIssues.length > 0) {\n issueStrings.push(`## Recent Issues from Current Milestone (${relevantMilestone.title}):`);\n milestoneIssues.forEach(issue => {\n const labels = issue.labels.map((label: any) =>\n typeof label === 'string' ? label : label.name\n ).join(', ');\n\n issueStrings.push([\n `Issue #${issue.number}: ${issue.title}`,\n `Labels: ${labels || 'none'}`,\n `Closed: ${issue.closed_at}`,\n `Body: ${issue.body?.substring(0, 300) || 'No description'}${issue.body && issue.body.length > 300 ? '...' : ''}`,\n '---'\n ].join('\\n'));\n });\n }\n\n // Add other recent issues if we have space\n const remainingLimit = limit - milestoneIssues.length;\n if (otherIssues.length > 0 && remainingLimit > 0) {\n if (milestoneIssues.length > 0) {\n issueStrings.push('\\n## Other Recent Closed Issues:');\n }\n\n otherIssues.slice(0, remainingLimit).forEach(issue => {\n const labels = issue.labels.map((label: any) =>\n typeof label === 'string' ? label : label.name\n ).join(', ');\n\n const milestoneInfo = issue.milestone\n ? `Milestone: ${issue.milestone.title}`\n : 'Milestone: none';\n\n issueStrings.push([\n `Issue #${issue.number}: ${issue.title}`,\n `Labels: ${labels || 'none'}`,\n milestoneInfo,\n `Closed: ${issue.closed_at}`,\n `Body: ${issue.body?.substring(0, 300) || 'No description'}${issue.body && issue.body.length > 300 ? '...' : ''}`,\n '---'\n ].join('\\n'));\n });\n }\n\n const totalRelevantIssues = milestoneIssues.length;\n const totalOtherIssues = Math.min(otherIssues.length, remainingLimit);\n\n logger.debug(`Fetched ${totalRelevantIssues + totalOtherIssues} closed issues (${totalRelevantIssues} from relevant milestone, ${totalOtherIssues} others)`);\n\n return issueStrings.join('\\n\\n');\n } catch (error: any) {\n logger.warn('Failed to fetch recent closed GitHub issues: %s', error.message);\n return '';\n }\n};\n"],"names":["getOctokit","logger","getLogger","token","process","env","GITHUB_TOKEN","error","Error","Octokit","auth","getCurrentBranchName","stdout","run","trim","getRepoDetails","url","match","owner","repo","createPullRequest","title","body","head","base","octokit","response","pulls","create","data","findOpenPullRequestByHeadRef","debug","list","state","length","message","status","delay","ms","Promise","resolve","setTimeout","hasWorkflowsConfigured","actions","listRepoWorkflows","workflows","hasWorkflowRunsForPR","prNumber","pr","get","pull_number","headSha","sha","headRef","ref","workflowRuns","listWorkflowRunsForRepo","head_sha","per_page","branchRuns","branch","allRuns","workflow_runs","relevantRuns","filter","head_branch","Date","created_at","getTime","now","waitForPullRequestChecks","options","timeout","skipUserConfirmation","startTime","consecutiveNoChecksCount","maxConsecutiveNoChecks","checkedWorkflowRuns","elapsedTime","warn","proceedWithoutChecks","promptConfirmation","info","checkRunsResponse","checks","listForRef","checkRuns","check_runs","hasWorkflows","hasRunsForPR","Math","round","failingChecks","cr","conclusion","includes","prUrl","currentBranch","undefined","detailedFailedChecks","all","map","check","checkDetails","check_run_id","id","name","detailsUrl","details_url","summary","output","text","statusIcon","substring","PullRequestCheckError","prError","instructions","getRecoveryInstructions","instruction","allChecksCompleted","every","completedCount","mergePullRequest","mergeMethod","deleteBranch","headBranch","merge","merge_method","git","deleteRef","createRelease","tagName","notes","repos","tag_name","getReleaseByTagName","getReleaseByTag","tag","getOpenIssues","limit","issues","listForRepo","min","sort","direction","issue","pull_request","issueStrings","slice","labels","label","join","number","updated_at","createIssue","html_url","getWorkflowRunsTriggeredByRelease","workflowNames","releaseInfo","releaseCreatedAt","releaseCommitSha","target_commitish","workflowsResponse","relevantWorkflows","workflow","runsResponse","listWorkflowRuns","workflow_id","releaseRuns","event","runCreatedAt","releaseCreatedAtTime","runAge","push","a","b","waitForReleaseWorkflows","consecutiveNoWorkflowsCount","maxConsecutiveNoWorkflows","proceedWithoutWorkflows","failingRuns","allWorkflowsCompleted","successfulRuns","runningCount","queuedCount","forEach","getWorkflowsTriggeredByRelease","releaseWorkflows","workflowPath","path","contentResponse","getContent","type","content","Buffer","from","toString","isTriggeredByRelease","workflowContent","workflowName","releaseEventPattern","onReleasePattern","tagPushPattern","isTriggered","test","findMilestoneByTitle","listMilestones","milestone","find","m","closeMilestone","milestoneNumber","updateMilestone","milestone_number","closeMilestoneForVersion","version","milestoneTitle","getClosedIssuesForMilestone","state_reason","getIssueDetails","issueNumber","maxTokens","issueResponse","issue_number","comments","totalTokens","estimateTokens","ceil","currentTokens","commentsResponse","listComments","comment","commentTokens","author","user","login","getMilestoneIssuesForRelease","versions","maxTotalTokens","allIssues","processedVersions","releaseNotesContent","header","issueDetails","issueSection","labelNames","sectionTokens","getRecentClosedIssuesForCommit","currentVersion","relevantMilestone","baseVersion","split","milestoneIssues","otherIssues","closed_at","remainingLimit","milestoneInfo","totalRelevantIssues","totalOtherIssues"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"github.js","sources":["../../src/util/github.ts"],"sourcesContent":["import { Octokit } from '@octokit/rest';\nimport { getLogger } from '../logging';\nimport { PullRequest, MergeMethod } from '../types';\nimport { run } from './child';\nimport { promptConfirmation } from './stdin';\n\nexport const getOctokit = (): Octokit => {\n const logger = getLogger();\n const token = process.env.GITHUB_TOKEN;\n\n if (!token) {\n logger.error('GITHUB_TOKEN environment variable is not set.');\n throw new Error('GITHUB_TOKEN is not set.');\n }\n\n return new Octokit({\n auth: token,\n });\n};\n\nexport const getCurrentBranchName = async (): Promise<string> => {\n const { stdout } = await run('git rev-parse --abbrev-ref HEAD');\n return stdout.trim();\n};\n\nexport const getRepoDetails = async (): Promise<{ owner: string; repo: string }> => {\n const { stdout } = await run('git remote get-url origin');\n const url = stdout.trim();\n // git@github.com:owner/repo.git or https://github.com/owner/repo.git\n const match = url.match(/github\\.com[/:]([\\w-]+)\\/([\\w.-]+)\\.git/);\n if (!match) {\n throw new Error(`Could not parse repository owner and name from origin URL: \"${url}\". Expected format: git@github.com:owner/repo.git or https://github.com/owner/repo.git`);\n }\n return { owner: match[1], repo: match[2] };\n};\n\n// GitHub API limit for pull request titles\nconst GITHUB_PR_TITLE_LIMIT = 256;\n\nconst truncatePullRequestTitle = (title: string): string => {\n if (title.length <= GITHUB_PR_TITLE_LIMIT) {\n return title;\n }\n\n // Reserve space for \"...\" suffix\n const maxLength = GITHUB_PR_TITLE_LIMIT - 3;\n let truncated = title.substring(0, maxLength);\n\n // Try to break at word boundary to avoid cutting words in half\n const lastSpaceIndex = truncated.lastIndexOf(' ');\n if (lastSpaceIndex > maxLength * 0.8) { // Only use word boundary if it's not too far back\n truncated = truncated.substring(0, lastSpaceIndex);\n }\n\n return truncated + '...';\n};\n\nexport const createPullRequest = async (\n title: string,\n body: string,\n head: string,\n base: string = 'main'\n): Promise<PullRequest> => {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoDetails();\n const logger = getLogger();\n\n // Truncate title if it exceeds GitHub's limit\n const truncatedTitle = truncatePullRequestTitle(title.trim());\n\n if (truncatedTitle !== title.trim()) {\n logger.debug(`Pull request title truncated from ${title.trim().length} to ${truncatedTitle.length} characters to meet GitHub's 256-character limit`);\n }\n\n const response = await octokit.pulls.create({\n owner,\n repo,\n title: truncatedTitle,\n body,\n head,\n base,\n });\n\n return response.data;\n};\n\nexport const findOpenPullRequestByHeadRef = async (head: string): Promise<PullRequest | null> => {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoDetails();\n const logger = getLogger();\n\n try {\n logger.debug(`Searching for open pull requests with head: ${owner}:${head} in ${owner}/${repo}`);\n\n const response = await octokit.pulls.list({\n owner,\n repo,\n state: 'open',\n head: `${owner}:${head}`,\n });\n\n logger.debug(`Found ${response.data.length} open pull requests`);\n return response.data[0] ?? null;\n } catch (error: any) {\n logger.error(`Failed to find open pull requests: ${error.message}`);\n if (error.status === 404) {\n logger.error(`Repository ${owner}/${repo} not found or access denied. Please check your GITHUB_TOKEN permissions.`);\n }\n throw error;\n }\n};\n\nconst delay = (ms: number) => new Promise(resolve => setTimeout(resolve, ms));\n\n// Check if repository has GitHub Actions workflows configured\nconst hasWorkflowsConfigured = async (): Promise<boolean> => {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoDetails();\n\n try {\n const response = await octokit.actions.listRepoWorkflows({\n owner,\n repo,\n });\n\n return response.data.workflows.length > 0;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (error: any) {\n // If we can't check workflows (e.g., no Actions permission), assume they might exist\n return true;\n }\n};\n\n/**\n * Check if any workflow runs have been triggered for a specific PR\n * This is more specific than hasWorkflowsConfigured as it checks for actual runs\n */\nconst hasWorkflowRunsForPR = async (prNumber: number): Promise<boolean> => {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoDetails();\n const logger = getLogger();\n\n try {\n // Get the PR to find the head SHA\n const pr = await octokit.pulls.get({\n owner,\n repo,\n pull_number: prNumber,\n });\n\n const headSha = pr.data.head.sha;\n const headRef = pr.data.head.ref;\n\n // Check for workflow runs triggered by this PR\n const workflowRuns = await octokit.actions.listWorkflowRunsForRepo({\n owner,\n repo,\n head_sha: headSha,\n per_page: 50, // Check recent runs\n });\n\n // Also check for runs on the branch\n const branchRuns = await octokit.actions.listWorkflowRunsForRepo({\n owner,\n repo,\n branch: headRef,\n per_page: 50,\n });\n\n const allRuns = [...workflowRuns.data.workflow_runs, ...branchRuns.data.workflow_runs];\n\n // Filter to runs that match our PR's head SHA or are very recent on the branch\n const relevantRuns = allRuns.filter(run =>\n run.head_sha === headSha ||\n (run.head_branch === headRef && new Date(run.created_at).getTime() > Date.now() - 300000) // Last 5 minutes\n );\n\n if (relevantRuns.length > 0) {\n logger.debug(`Found ${relevantRuns.length} workflow runs for PR #${prNumber} (SHA: ${headSha})`);\n return true;\n }\n\n logger.debug(`No workflow runs found for PR #${prNumber} (SHA: ${headSha}, branch: ${headRef})`);\n return false;\n\n\n } catch (error: any) {\n logger.debug(`Error checking workflow runs for PR #${prNumber}: ${error.message}`);\n // If we can't check workflow runs, assume they might exist\n return true;\n }\n};\n\nexport const waitForPullRequestChecks = async (prNumber: number, options: { timeout?: number; skipUserConfirmation?: boolean } = {}): Promise<void> => {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoDetails();\n const logger = getLogger();\n const timeout = options.timeout || 3600000; // 1 hour default timeout\n const skipUserConfirmation = options.skipUserConfirmation || false;\n\n const startTime = Date.now();\n let consecutiveNoChecksCount = 0;\n const maxConsecutiveNoChecks = 6; // 6 consecutive checks (1 minute) with no checks before asking user\n let checkedWorkflowRuns = false; // Track if we've already checked for workflow runs to avoid repeated checks\n\n while (true) {\n const elapsedTime = Date.now() - startTime;\n\n // Check for timeout\n if (elapsedTime > timeout) {\n logger.warn(`Timeout reached (${timeout / 1000}s) while waiting for PR #${prNumber} checks.`);\n\n if (!skipUserConfirmation) {\n const proceedWithoutChecks = await promptConfirmation(\n `⚠️ Timeout reached while waiting for PR #${prNumber} checks.\\n` +\n `This might indicate that no checks are configured for this repository.\\n` +\n `Do you want to proceed with merging the PR without waiting for checks?`\n );\n\n if (proceedWithoutChecks) {\n logger.info('User chose to proceed without waiting for checks.');\n return;\n } else {\n throw new Error(`Timeout waiting for PR #${prNumber} checks. User chose not to proceed.`);\n }\n } else {\n throw new Error(`Timeout waiting for PR #${prNumber} checks (${timeout / 1000}s)`);\n }\n }\n\n const pr = await octokit.pulls.get({\n owner,\n repo,\n pull_number: prNumber,\n });\n\n const checkRunsResponse = await octokit.checks.listForRef({\n owner,\n repo,\n ref: pr.data.head.sha,\n });\n\n const checkRuns = checkRunsResponse.data.check_runs;\n\n if (checkRuns.length === 0) {\n consecutiveNoChecksCount++;\n logger.info(`PR #${prNumber}: No checks found (${consecutiveNoChecksCount}/${maxConsecutiveNoChecks}). Waiting...`);\n\n // After several consecutive \"no checks\" responses, check if workflows are configured\n if (consecutiveNoChecksCount >= maxConsecutiveNoChecks) {\n logger.info(`No checks detected for ${maxConsecutiveNoChecks} consecutive attempts. Checking repository configuration...`);\n\n const hasWorkflows = await hasWorkflowsConfigured();\n\n if (!hasWorkflows) {\n logger.warn(`No GitHub Actions workflows found in repository ${owner}/${repo}.`);\n\n if (!skipUserConfirmation) {\n const proceedWithoutChecks = await promptConfirmation(\n `⚠️ No GitHub Actions workflows or checks are configured for this repository.\\n` +\n `PR #${prNumber} will never have status checks to wait for.\\n` +\n `Do you want to proceed with merging the PR without checks?`\n );\n\n if (proceedWithoutChecks) {\n logger.info('User chose to proceed without checks (no workflows configured).');\n return;\n } else {\n throw new Error(`No checks configured for PR #${prNumber}. User chose not to proceed.`);\n }\n } else {\n // In non-interactive mode, proceed if no workflows are configured\n logger.info('No workflows configured, proceeding without checks.');\n return;\n }\n } else {\n // Workflows exist, but check if any are actually running for this PR\n if (!checkedWorkflowRuns) {\n logger.info('GitHub Actions workflows are configured. Checking if any workflows are triggered for this PR...');\n\n const hasRunsForPR = await hasWorkflowRunsForPR(prNumber);\n checkedWorkflowRuns = true; // Mark that we've checked\n\n if (!hasRunsForPR) {\n logger.warn(`No workflow runs detected for PR #${prNumber}. This may indicate that the configured workflows don't match this branch pattern.`);\n\n if (!skipUserConfirmation) {\n const proceedWithoutChecks = await promptConfirmation(\n `⚠️ GitHub Actions workflows are configured in this repository, but none appear to be triggered by PR #${prNumber}.\\n` +\n `This usually means the workflow trigger patterns (branches, paths) don't match this PR.\\n` +\n `PR #${prNumber} will likely never have status checks to wait for.\\n` +\n `Do you want to proceed with merging the PR without waiting for checks?`\n );\n\n if (proceedWithoutChecks) {\n logger.info('User chose to proceed without checks (no matching workflow triggers).');\n return;\n } else {\n throw new Error(`No matching workflow triggers for PR #${prNumber}. User chose not to proceed.`);\n }\n } else {\n // In non-interactive mode, proceed if no workflow runs are detected\n logger.info('No workflow runs detected for this PR, proceeding without checks.');\n return;\n }\n } else {\n logger.info('Workflow runs detected for this PR. Continuing to wait for checks...');\n consecutiveNoChecksCount = 0; // Reset counter since workflow runs exist\n }\n } else {\n // We've already checked workflow runs and found none that match this PR\n // At this point, we should give up to avoid infinite loops\n logger.warn(`Still no checks after ${consecutiveNoChecksCount} attempts. No workflow runs match this PR.`);\n\n if (!skipUserConfirmation) {\n const proceedWithoutChecks = await promptConfirmation(\n `⚠️ After waiting ${Math.round(elapsedTime / 1000)}s, no checks have appeared for PR #${prNumber}.\\n` +\n `The configured workflows don't appear to trigger for this branch.\\n` +\n `Do you want to proceed with merging the PR without checks?`\n );\n\n if (proceedWithoutChecks) {\n logger.info('User chose to proceed without checks (timeout waiting for workflow triggers).');\n return;\n } else {\n throw new Error(`No workflow triggers matched PR #${prNumber} after waiting. User chose not to proceed.`);\n }\n } else {\n // In non-interactive mode, proceed after reasonable waiting\n logger.info('No workflow runs detected after waiting, proceeding without checks.');\n return;\n }\n }\n }\n }\n\n await delay(10000);\n continue;\n }\n\n // Reset the no-checks counter since we found some checks\n consecutiveNoChecksCount = 0;\n\n const failingChecks = checkRuns.filter(\n (cr) => cr.conclusion && ['failure', 'timed_out', 'cancelled'].includes(cr.conclusion)\n );\n\n if (failingChecks.length > 0) {\n const { owner, repo } = await getRepoDetails();\n const prUrl = `https://github.com/${owner}/${repo}/pull/${prNumber}`;\n\n // Get current branch name for better guidance\n let currentBranch: string | undefined;\n try {\n currentBranch = await getCurrentBranchName();\n } catch {\n // Fallback to generic branch reference if we can't get the current branch\n currentBranch = undefined;\n }\n\n // Collect detailed information about each failed check\n const detailedFailedChecks = await Promise.all(\n failingChecks.map(async (check) => {\n try {\n // Get additional details from the check run\n const checkDetails = await octokit.checks.get({\n owner,\n repo,\n check_run_id: check.id,\n });\n\n return {\n name: check.name,\n conclusion: check.conclusion || 'unknown',\n detailsUrl: check.details_url || undefined,\n summary: checkDetails.data.output?.summary || undefined,\n output: {\n title: checkDetails.data.output?.title || undefined,\n summary: checkDetails.data.output?.summary || undefined,\n text: checkDetails.data.output?.text || undefined,\n },\n };\n } catch {\n // Fallback to basic information if we can't get details\n return {\n name: check.name,\n conclusion: check.conclusion || 'unknown',\n detailsUrl: check.details_url || undefined,\n };\n }\n })\n );\n\n logger.error(`❌ PR #${prNumber} has ${failingChecks.length} failing check${failingChecks.length > 1 ? 's' : ''}:`);\n logger.error('');\n\n for (const check of detailedFailedChecks) {\n const statusIcon = check.conclusion === 'failure' ? '❌' :\n check.conclusion === 'timed_out' ? '⏰' : '🚫';\n logger.error(`${statusIcon} ${check.name}: ${check.conclusion}`);\n\n // Show more detailed error information if available\n if (check.output?.title && check.output.title !== check.name) {\n logger.error(` Issue: ${check.output.title}`);\n }\n\n if (check.output?.summary) {\n // Truncate very long summaries\n const summary = check.output.summary.length > 200\n ? check.output.summary.substring(0, 200) + '...'\n : check.output.summary;\n logger.error(` Summary: ${summary}`);\n }\n\n // Include direct link to check details\n if (check.detailsUrl) {\n logger.error(` Details: ${check.detailsUrl}`);\n }\n logger.error('');\n }\n\n // Import the new error class\n const { PullRequestCheckError } = await import('../error/CommandErrors');\n\n // Create and throw the enhanced error with detailed recovery instructions\n const prError = new PullRequestCheckError(\n `PR #${prNumber} checks failed. ${failingChecks.length} check${failingChecks.length > 1 ? 's' : ''} failed.`,\n prNumber,\n detailedFailedChecks,\n prUrl,\n currentBranch\n );\n\n // Display recovery instructions\n const instructions = prError.getRecoveryInstructions();\n for (const instruction of instructions) {\n logger.error(instruction);\n }\n logger.error('');\n\n throw prError;\n }\n\n const allChecksCompleted = checkRuns.every((cr) => cr.status === 'completed');\n\n if (allChecksCompleted) {\n logger.info(`All checks for PR #${prNumber} have completed successfully.`);\n return;\n }\n\n const completedCount = checkRuns.filter(cr => cr.status === 'completed').length;\n logger.info(`PR #${prNumber} checks: ${completedCount}/${checkRuns.length} completed. Waiting...`);\n\n await delay(10000); // wait 10 seconds\n }\n};\n\nexport const mergePullRequest = async (\n prNumber: number,\n mergeMethod: MergeMethod = 'squash',\n deleteBranch: boolean = true\n): Promise<void> => {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoDetails();\n const logger = getLogger();\n\n logger.info(`Merging PR #${prNumber} using ${mergeMethod} method...`);\n const pr = await octokit.pulls.get({\n owner,\n repo,\n pull_number: prNumber,\n });\n const headBranch = pr.data.head.ref;\n\n await octokit.pulls.merge({\n owner,\n repo,\n pull_number: prNumber,\n merge_method: mergeMethod,\n });\n logger.info(`PR #${prNumber} merged using ${mergeMethod} method.`);\n\n if (deleteBranch) {\n logger.info(`Deleting branch ${headBranch}...`);\n await octokit.git.deleteRef({\n owner,\n repo,\n ref: `heads/${headBranch}`,\n });\n logger.info(`Branch ${headBranch} deleted.`);\n } else {\n logger.info(`Preserving branch ${headBranch} (deletion skipped).`);\n }\n};\n\nexport const createRelease = async (tagName: string, title: string, notes: string): Promise<void> => {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoDetails();\n const logger = getLogger();\n\n logger.info(`Creating release for tag ${tagName}...`);\n await octokit.repos.createRelease({\n owner,\n repo,\n tag_name: tagName,\n name: title,\n body: notes,\n });\n logger.info(`Release ${tagName} created.`);\n};\n\nexport const getReleaseByTagName = async (tagName: string): Promise<any> => {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoDetails();\n const logger = getLogger();\n\n try {\n const response = await octokit.repos.getReleaseByTag({\n owner,\n repo,\n tag: tagName,\n });\n\n logger.debug(`Found release for tag ${tagName}: created at ${response.data.created_at}`);\n return response.data;\n } catch (error: any) {\n logger.debug(`Failed to get release for tag ${tagName}: ${error.message}`);\n throw error;\n }\n};\n\nexport const getOpenIssues = async (limit: number = 20): Promise<string> => {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoDetails();\n const logger = getLogger();\n\n try {\n logger.debug(`Fetching up to ${limit} open GitHub issues...`);\n\n const response = await octokit.issues.listForRepo({\n owner,\n repo,\n state: 'open',\n per_page: Math.min(limit, 100), // GitHub API limit\n sort: 'updated',\n direction: 'desc',\n });\n\n const issues = response.data.filter(issue => !issue.pull_request); // Filter out PRs\n\n if (issues.length === 0) {\n logger.debug('No open issues found');\n return '';\n }\n\n const issueStrings = issues.slice(0, limit).map(issue => {\n const labels = issue.labels.map(label =>\n typeof label === 'string' ? label : label.name\n ).join(', ');\n\n return [\n `Issue #${issue.number}: ${issue.title}`,\n `Labels: ${labels || 'none'}`,\n `Created: ${issue.created_at}`,\n `Updated: ${issue.updated_at}`,\n `Body: ${issue.body?.substring(0, 500) || 'No description'}${issue.body && issue.body.length > 500 ? '...' : ''}`,\n '---'\n ].join('\\n');\n });\n\n logger.debug(`Fetched ${issues.length} open issues`);\n return issueStrings.join('\\n\\n');\n } catch (error: any) {\n logger.warn('Failed to fetch GitHub issues: %s', error.message);\n return '';\n }\n};\n\nexport const createIssue = async (\n title: string,\n body: string,\n labels?: string[]\n): Promise<{ number: number; html_url: string }> => {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoDetails();\n\n const response = await octokit.issues.create({\n owner,\n repo,\n title,\n body,\n labels: labels || [],\n });\n\n return {\n number: response.data.number,\n html_url: response.data.html_url,\n };\n};\n\nexport const getWorkflowRunsTriggeredByRelease = async (tagName: string, workflowNames?: string[]): Promise<any[]> => {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoDetails();\n const logger = getLogger();\n\n try {\n logger.debug(`Fetching workflow runs triggered by release ${tagName}...`);\n\n // Get release information to filter by creation time and commit SHA\n let releaseInfo: any;\n let releaseCreatedAt: string | undefined;\n let releaseCommitSha: string | undefined;\n\n try {\n releaseInfo = await getReleaseByTagName(tagName);\n releaseCreatedAt = releaseInfo?.created_at;\n releaseCommitSha = releaseInfo?.target_commitish;\n } catch (error: any) {\n logger.debug(`Could not get release info for ${tagName}: ${error.message}. Using more permissive filtering.`);\n }\n\n if (releaseCreatedAt) {\n logger.debug(`Release ${tagName} was created at ${releaseCreatedAt}, filtering workflows created after this time`);\n } else {\n logger.debug(`No release creation time available for ${tagName}, using more permissive time filtering`);\n }\n\n if (releaseCommitSha) {\n logger.debug(`Release ${tagName} targets commit ${releaseCommitSha}`);\n }\n\n // Get all workflows\n const workflowsResponse = await octokit.actions.listRepoWorkflows({\n owner,\n repo,\n });\n\n const relevantWorkflows = workflowsResponse.data.workflows.filter(workflow => {\n // If specific workflow names are provided, only include those\n if (workflowNames && workflowNames.length > 0) {\n return workflowNames.includes(workflow.name);\n }\n // Otherwise, find workflows that trigger on releases\n return true; // We'll filter by event later when we get the runs\n });\n\n logger.debug(`Found ${relevantWorkflows.length} workflows to check`);\n\n const allRuns: any[] = [];\n\n // Get recent workflow runs for each workflow\n for (const workflow of relevantWorkflows) {\n try {\n const runsResponse = await octokit.actions.listWorkflowRuns({\n owner,\n repo,\n workflow_id: workflow.id,\n per_page: 30, // Check more runs to account for filtering\n });\n\n logger.debug(`Checking ${runsResponse.data.workflow_runs.length} recent runs for workflow \"${workflow.name}\"`);\n\n // Filter runs that were triggered by our specific release\n const releaseRuns = runsResponse.data.workflow_runs.filter(run => {\n logger.debug(`Evaluating run ${run.id} for workflow \"${workflow.name}\": event=${run.event}, created_at=${run.created_at}`);\n\n // Must have required data\n if (!run.created_at) {\n logger.debug(`Excluding workflow run ${run.id}: missing created_at`);\n return false;\n }\n\n // Simple logic: if we have release info, just check that the run was created after the release\n if (releaseCreatedAt) {\n const runCreatedAt = new Date(run.created_at).getTime();\n const releaseCreatedAtTime = new Date(releaseCreatedAt).getTime();\n\n // Include any run that started after the release (with 1 minute buffer for timing)\n if (runCreatedAt < releaseCreatedAtTime - 60000) {\n logger.debug(`Excluding workflow run ${run.id}: created before release (run: ${run.created_at}, release: ${releaseCreatedAt})`);\n return false;\n }\n } else {\n // No release info - just look for recent runs (within last 30 minutes)\n const runAge = Date.now() - new Date(run.created_at).getTime();\n if (runAge > 1800000) { // 30 minutes\n logger.debug(`Excluding old workflow run ${run.id}: created ${run.created_at}`);\n return false;\n }\n }\n\n logger.debug(`Including workflow run ${run.id}: ${workflow.name} (${run.status}/${run.conclusion || 'pending'}) created ${run.created_at}`);\n return true;\n });\n\n allRuns.push(...releaseRuns);\n\n if (releaseRuns.length > 0) {\n logger.debug(`Found ${releaseRuns.length} relevant workflow runs for ${workflow.name}`);\n } else {\n logger.debug(`No relevant workflow runs found for ${workflow.name}`);\n }\n } catch (error: any) {\n logger.warn(`Failed to get runs for workflow ${workflow.name}: ${error.message}`);\n }\n }\n\n // Sort by creation time (newest first)\n allRuns.sort((a, b) => {\n return new Date(b.created_at).getTime() - new Date(a.created_at).getTime();\n });\n\n logger.debug(`Found ${allRuns.length} workflow runs triggered by release ${tagName}`);\n return allRuns;\n } catch (error: any) {\n logger.error(`Failed to get workflow runs for release ${tagName}: ${error.message}`);\n return [];\n }\n};\n\nexport const waitForReleaseWorkflows = async (\n tagName: string,\n options: {\n timeout?: number;\n workflowNames?: string[];\n skipUserConfirmation?: boolean;\n } = {}\n): Promise<void> => {\n const logger = getLogger();\n const timeout = options.timeout || 1800000; // 30 minutes default\n const skipUserConfirmation = options.skipUserConfirmation || false;\n\n logger.info(`Waiting for workflows triggered by release ${tagName}...`);\n\n // Wait for workflows to start (GitHub can take time to process the release and trigger workflows)\n logger.debug('Waiting 20 seconds for workflows to start...');\n await delay(20000);\n\n const startTime = Date.now();\n let workflowRuns: any[] = [];\n let consecutiveNoWorkflowsCount = 0;\n const maxConsecutiveNoWorkflows = 20;\n\n while (true) {\n const elapsedTime = Date.now() - startTime;\n\n // Check for timeout\n if (elapsedTime > timeout) {\n logger.warn(`Timeout reached (${timeout / 1000}s) while waiting for release workflows.`);\n\n if (!skipUserConfirmation) {\n const proceedWithoutWorkflows = await promptConfirmation(\n `⚠️ Timeout reached while waiting for release workflows for ${tagName}.\\n` +\n `This might indicate that no workflows are configured to trigger on releases.\\n` +\n `Do you want to proceed anyway?`\n );\n\n if (proceedWithoutWorkflows) {\n logger.info('User chose to proceed without waiting for release workflows.');\n return;\n } else {\n throw new Error(`Timeout waiting for release workflows for ${tagName}. User chose not to proceed.`);\n }\n } else {\n throw new Error(`Timeout waiting for release workflows for ${tagName} (${timeout / 1000}s)`);\n }\n }\n\n // Get current workflow runs\n workflowRuns = await getWorkflowRunsTriggeredByRelease(tagName, options.workflowNames);\n\n if (workflowRuns.length === 0) {\n consecutiveNoWorkflowsCount++;\n logger.info(`No release workflows found (${consecutiveNoWorkflowsCount}/${maxConsecutiveNoWorkflows}). Waiting...`);\n\n // Add debug info about what we're looking for\n if (consecutiveNoWorkflowsCount === 1) {\n logger.debug(`Looking for workflows triggered by release ${tagName}`);\n if (options.workflowNames && options.workflowNames.length > 0) {\n logger.debug(`Specific workflows to monitor: ${options.workflowNames.join(', ')}`);\n } else {\n logger.debug('Monitoring all workflows that might be triggered by releases');\n }\n }\n\n // After several attempts with no workflows, ask user if they want to continue\n if (consecutiveNoWorkflowsCount >= maxConsecutiveNoWorkflows) {\n logger.warn(`No workflows triggered by release ${tagName} after ${maxConsecutiveNoWorkflows} attempts.`);\n\n if (!skipUserConfirmation) {\n const proceedWithoutWorkflows = await promptConfirmation(\n `⚠️ No GitHub Actions workflows appear to be triggered by the release ${tagName}.\\n` +\n `This might be expected if no workflows are configured for release events.\\n` +\n `Do you want to proceed without waiting for workflows?`\n );\n\n if (proceedWithoutWorkflows) {\n logger.info('User chose to proceed without release workflows.');\n return;\n } else {\n throw new Error(`No release workflows found for ${tagName}. User chose not to proceed.`);\n }\n } else {\n // In non-interactive mode, proceed if no workflows are found\n logger.info('No release workflows found, proceeding.');\n return;\n }\n }\n\n await delay(10000);\n continue;\n }\n\n // Reset counter since we found workflows\n consecutiveNoWorkflowsCount = 0;\n\n // Check status of all workflow runs\n const failingRuns = workflowRuns.filter(run =>\n run.conclusion && ['failure', 'timed_out', 'cancelled'].includes(run.conclusion)\n );\n\n if (failingRuns.length > 0) {\n logger.error(`Release workflows for ${tagName} have failures:`);\n for (const run of failingRuns) {\n logger.error(`- ${run.name}: ${run.conclusion} (${run.html_url})`);\n }\n throw new Error(`Release workflows for ${tagName} failed.`);\n }\n\n const allWorkflowsCompleted = workflowRuns.every(run => run.status === 'completed');\n\n if (allWorkflowsCompleted) {\n const successfulRuns = workflowRuns.filter(run => run.conclusion === 'success');\n logger.info(`All ${workflowRuns.length} release workflows for ${tagName} completed successfully.`);\n for (const run of successfulRuns) {\n logger.info(`✓ ${run.name}: ${run.conclusion}`);\n }\n return;\n }\n\n const completedCount = workflowRuns.filter(run => run.status === 'completed').length;\n const runningCount = workflowRuns.filter(run => run.status === 'in_progress').length;\n const queuedCount = workflowRuns.filter(run => run.status === 'queued').length;\n\n // Log detailed information about each workflow run being tracked\n if (workflowRuns.length > 0) {\n logger.debug(`Tracking ${workflowRuns.length} workflow runs for release ${tagName}:`);\n workflowRuns.forEach(run => {\n const statusIcon = run.status === 'completed' ?\n (run.conclusion === 'success' ? '✅' : run.conclusion === 'failure' ? '❌' : '⚠️') :\n run.status === 'in_progress' ? '🔄' : '⏳';\n logger.debug(` ${statusIcon} ${run.name} (${run.status}${run.conclusion ? `/${run.conclusion}` : ''}) - created ${run.created_at}`);\n });\n }\n\n logger.info(\n `Release workflows for ${tagName}: ${completedCount} completed, ${runningCount} running, ${queuedCount} queued (${workflowRuns.length} total)`\n );\n\n await delay(15000); // wait 15 seconds\n }\n};\n\nexport const getWorkflowsTriggeredByRelease = async (): Promise<string[]> => {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoDetails();\n const logger = getLogger();\n\n try {\n logger.debug('Analyzing workflows to find those triggered by release events...');\n\n // Get all workflows\n const workflowsResponse = await octokit.actions.listRepoWorkflows({\n owner,\n repo,\n });\n\n const releaseWorkflows: string[] = [];\n\n // Check each workflow's configuration\n for (const workflow of workflowsResponse.data.workflows) {\n try {\n // Get the workflow file content\n const workflowPath = workflow.path;\n logger.debug(`Analyzing workflow: ${workflow.name} (${workflowPath})`);\n\n const contentResponse = await octokit.repos.getContent({\n owner,\n repo,\n path: workflowPath,\n });\n\n // Handle the response - it could be a file or directory\n if ('content' in contentResponse.data && contentResponse.data.type === 'file') {\n // Decode the base64 content\n const content = Buffer.from(contentResponse.data.content, 'base64').toString('utf-8');\n\n // Parse the YAML to check trigger conditions\n if (isTriggeredByRelease(content, workflow.name)) {\n logger.debug(`✓ Workflow \"${workflow.name}\" will be triggered by release events`);\n releaseWorkflows.push(workflow.name);\n } else {\n logger.debug(`✗ Workflow \"${workflow.name}\" will not be triggered by release events`);\n }\n } else {\n logger.warn(`Could not read content for workflow ${workflow.name}`);\n }\n } catch (error: any) {\n logger.warn(`Failed to analyze workflow ${workflow.name}: ${error.message}`);\n }\n }\n\n logger.info(`Found ${releaseWorkflows.length} workflows that will be triggered by release events: ${releaseWorkflows.join(', ')}`);\n return releaseWorkflows;\n } catch (error: any) {\n logger.error(`Failed to analyze workflows: ${error.message}`);\n return [];\n }\n};\n\nconst isTriggeredByRelease = (workflowContent: string, workflowName: string): boolean => {\n const logger = getLogger();\n\n try {\n // Simple regex-based parsing since we don't want to add a YAML dependency\n // Look for common release trigger patterns\n\n // Pattern 1: on.release (with or without types)\n // on:\n // release:\n // types: [published, created, ...]\n const releaseEventPattern = /(?:^|\\n)\\s*on\\s*:\\s*(?:\\n|\\r\\n)(?:\\s+[^\\S\\r\\n]+)*(?:\\s+release\\s*:)/m;\n\n // Pattern 2: on: [push, release] or on: release\n const onReleasePattern = /(?:^|\\n)\\s*on\\s*:\\s*(?:\\[.*release.*\\]|release)\\s*(?:\\n|$)/m;\n\n // Pattern 3: push with tag patterns that look like releases\n // on:\n // push:\n // tags:\n // - 'v*'\n // - 'release/*'\n const tagPushPattern = /(?:^|\\r?\\n)[^\\S\\r\\n]*on\\s*:\\s*\\r?\\n(?:[^\\S\\r\\n]*[^\\r\\n]+(?:\\r?\\n))*?[^\\S\\r\\n]*push\\s*:\\s*\\r?\\n(?:[^\\S\\r\\n]*tags\\s*:\\s*(?:\\r?\\n|\\[)[^\\]\\r\\n]*(?:v\\*|release|tag)[^\\]\\r\\n]*)/mi;\n\n const isTriggered = releaseEventPattern.test(workflowContent) ||\n onReleasePattern.test(workflowContent) ||\n tagPushPattern.test(workflowContent);\n\n if (isTriggered) {\n logger.debug(`Workflow \"${workflowName}\" trigger patterns detected in content`);\n }\n\n return isTriggered;\n } catch (error: any) {\n logger.warn(`Failed to parse workflow content for ${workflowName}: ${error.message}`);\n return false;\n }\n};\n\n// Milestone Management Functions\n\nexport const findMilestoneByTitle = async (title: string): Promise<any | null> => {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoDetails();\n const logger = getLogger();\n\n try {\n logger.debug(`Searching for milestone: ${title}`);\n\n const response = await octokit.issues.listMilestones({\n owner,\n repo,\n state: 'all',\n per_page: 100,\n });\n\n const milestone = response.data.find(m => m.title === title);\n\n if (milestone) {\n logger.debug(`Found milestone: ${milestone.title} (${milestone.state})`);\n } else {\n logger.debug(`Milestone not found: ${title}`);\n }\n\n return milestone || null;\n } catch (error: any) {\n logger.error(`Failed to search for milestone ${title}: ${error.message}`);\n throw error;\n }\n};\n\nexport const createMilestone = async (title: string, description?: string): Promise<any> => {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoDetails();\n const logger = getLogger();\n\n try {\n logger.info(`Creating milestone: ${title}`);\n\n const response = await octokit.issues.createMilestone({\n owner,\n repo,\n title,\n description,\n });\n\n logger.info(`✅ Milestone created: ${title} (#${response.data.number})`);\n return response.data;\n } catch (error: any) {\n logger.error(`Failed to create milestone ${title}: ${error.message}`);\n throw error;\n }\n};\n\nexport const closeMilestone = async (milestoneNumber: number): Promise<void> => {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoDetails();\n const logger = getLogger();\n\n try {\n logger.info(`Closing milestone #${milestoneNumber}...`);\n\n await octokit.issues.updateMilestone({\n owner,\n repo,\n milestone_number: milestoneNumber,\n state: 'closed',\n });\n\n logger.info(`✅ Milestone #${milestoneNumber} closed`);\n } catch (error: any) {\n logger.error(`Failed to close milestone #${milestoneNumber}: ${error.message}`);\n throw error;\n }\n};\n\nexport const getOpenIssuesForMilestone = async (milestoneNumber: number): Promise<any[]> => {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoDetails();\n const logger = getLogger();\n\n try {\n logger.debug(`Getting open issues for milestone #${milestoneNumber}`);\n\n const response = await octokit.issues.listForRepo({\n owner,\n repo,\n state: 'open',\n milestone: milestoneNumber.toString(),\n per_page: 100,\n });\n\n const issues = response.data.filter(issue => !issue.pull_request); // Filter out PRs\n\n logger.debug(`Found ${issues.length} open issues for milestone #${milestoneNumber}`);\n return issues;\n } catch (error: any) {\n logger.error(`Failed to get issues for milestone #${milestoneNumber}: ${error.message}`);\n throw error;\n }\n};\n\nexport const moveIssueToMilestone = async (issueNumber: number, milestoneNumber: number): Promise<void> => {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoDetails();\n const logger = getLogger();\n\n try {\n logger.debug(`Moving issue #${issueNumber} to milestone #${milestoneNumber}`);\n\n await octokit.issues.update({\n owner,\n repo,\n issue_number: issueNumber,\n milestone: milestoneNumber,\n });\n\n logger.debug(`✅ Issue #${issueNumber} moved to milestone #${milestoneNumber}`);\n } catch (error: any) {\n logger.error(`Failed to move issue #${issueNumber} to milestone #${milestoneNumber}: ${error.message}`);\n throw error;\n }\n};\n\nexport const moveOpenIssuesToNewMilestone = async (fromMilestoneNumber: number, toMilestoneNumber: number): Promise<number> => {\n const logger = getLogger();\n\n try {\n const openIssues = await getOpenIssuesForMilestone(fromMilestoneNumber);\n\n if (openIssues.length === 0) {\n logger.debug(`No open issues to move from milestone #${fromMilestoneNumber}`);\n return 0;\n }\n\n logger.info(`Moving ${openIssues.length} open issues from milestone #${fromMilestoneNumber} to #${toMilestoneNumber}`);\n\n for (const issue of openIssues) {\n await moveIssueToMilestone(issue.number, toMilestoneNumber);\n }\n\n logger.info(`✅ Moved ${openIssues.length} issues to new milestone`);\n return openIssues.length;\n } catch (error: any) {\n logger.error(`Failed to move issues between milestones: ${error.message}`);\n throw error;\n }\n};\n\nexport const ensureMilestoneForVersion = async (version: string, fromVersion?: string): Promise<void> => {\n const logger = getLogger();\n\n try {\n const milestoneTitle = `release/${version}`;\n logger.debug(`Ensuring milestone exists: ${milestoneTitle}`);\n\n // Check if milestone already exists\n let milestone = await findMilestoneByTitle(milestoneTitle);\n\n if (milestone) {\n logger.info(`✅ Milestone already exists: ${milestoneTitle}`);\n return;\n }\n\n // Create new milestone\n milestone = await createMilestone(milestoneTitle, `Release ${version}`);\n\n // If we have a previous version, move open issues from its milestone\n if (fromVersion) {\n const previousMilestoneTitle = `release/${fromVersion}`;\n const previousMilestone = await findMilestoneByTitle(previousMilestoneTitle);\n\n if (previousMilestone && previousMilestone.state === 'closed') {\n const movedCount = await moveOpenIssuesToNewMilestone(previousMilestone.number, milestone.number);\n if (movedCount > 0) {\n logger.info(`📋 Moved ${movedCount} open issues from ${previousMilestoneTitle} to ${milestoneTitle}`);\n }\n }\n }\n } catch (error: any) {\n // Don't fail the whole operation if milestone management fails\n logger.warn(`⚠️ Milestone management failed (continuing): ${error.message}`);\n }\n};\n\nexport const closeMilestoneForVersion = async (version: string): Promise<void> => {\n const logger = getLogger();\n\n try {\n const milestoneTitle = `release/${version}`;\n logger.debug(`Closing milestone: ${milestoneTitle}`);\n\n const milestone = await findMilestoneByTitle(milestoneTitle);\n\n if (!milestone) {\n logger.debug(`Milestone not found: ${milestoneTitle}`);\n return;\n }\n\n if (milestone.state === 'closed') {\n logger.debug(`Milestone already closed: ${milestoneTitle}`);\n return;\n }\n\n await closeMilestone(milestone.number);\n logger.info(`🏁 Closed milestone: ${milestoneTitle}`);\n } catch (error: any) {\n // Don't fail the whole operation if milestone management fails\n logger.warn(`⚠️ Failed to close milestone (continuing): ${error.message}`);\n }\n};\n\nexport const getClosedIssuesForMilestone = async (milestoneNumber: number, limit: number = 50): Promise<any[]> => {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoDetails();\n const logger = getLogger();\n\n try {\n logger.debug(`Getting closed issues for milestone #${milestoneNumber}`);\n\n const response = await octokit.issues.listForRepo({\n owner,\n repo,\n state: 'closed',\n milestone: milestoneNumber.toString(),\n per_page: Math.min(limit, 100),\n sort: 'updated',\n direction: 'desc',\n });\n\n // Filter out PRs and only include issues closed as completed\n const issues = response.data.filter(issue =>\n !issue.pull_request &&\n issue.state_reason === 'completed'\n );\n\n logger.debug(`Found ${issues.length} closed issues for milestone #${milestoneNumber}`);\n return issues;\n } catch (error: any) {\n logger.error(`Failed to get closed issues for milestone #${milestoneNumber}: ${error.message}`);\n throw error;\n }\n};\n\nexport const getIssueDetails = async (issueNumber: number, maxTokens: number = 20000): Promise<any> => {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoDetails();\n const logger = getLogger();\n\n try {\n logger.debug(`Getting details for issue #${issueNumber}`);\n\n // Get the issue\n const issueResponse = await octokit.issues.get({\n owner,\n repo,\n issue_number: issueNumber,\n });\n\n const issue = issueResponse.data;\n const content = {\n title: issue.title,\n body: issue.body || '',\n comments: [] as any[],\n totalTokens: 0\n };\n\n // Estimate tokens (rough approximation: 1 token ≈ 4 characters)\n const estimateTokens = (text: string) => Math.ceil(text.length / 4);\n\n let currentTokens = estimateTokens(content.title + content.body);\n content.totalTokens = currentTokens;\n\n // If we're already at or near the limit with just title and body, return now\n if (currentTokens >= maxTokens * 0.9) {\n logger.debug(`Issue #${issueNumber} title/body already uses ${currentTokens} tokens, skipping comments`);\n return content;\n }\n\n // Get comments\n try {\n const commentsResponse = await octokit.issues.listComments({\n owner,\n repo,\n issue_number: issueNumber,\n per_page: 100,\n });\n\n for (const comment of commentsResponse.data) {\n const commentTokens = estimateTokens(comment.body || '');\n\n if (currentTokens + commentTokens > maxTokens) {\n logger.debug(`Stopping at comment to stay under ${maxTokens} token limit for issue #${issueNumber}`);\n break;\n }\n\n content.comments.push({\n author: comment.user?.login,\n body: comment.body,\n created_at: comment.created_at,\n });\n\n currentTokens += commentTokens;\n }\n } catch (error: any) {\n logger.debug(`Failed to get comments for issue #${issueNumber}: ${error.message}`);\n }\n\n content.totalTokens = currentTokens;\n logger.debug(`Issue #${issueNumber} details: ${currentTokens} tokens`);\n\n return content;\n } catch (error: any) {\n logger.error(`Failed to get details for issue #${issueNumber}: ${error.message}`);\n throw error;\n }\n};\n\nexport const getMilestoneIssuesForRelease = async (versions: string[], maxTotalTokens: number = 50000): Promise<string> => {\n const logger = getLogger();\n\n try {\n const allIssues: any[] = [];\n const processedVersions: string[] = [];\n\n for (const version of versions) {\n const milestoneTitle = `release/${version}`;\n logger.debug(`Looking for milestone: ${milestoneTitle}`);\n\n const milestone = await findMilestoneByTitle(milestoneTitle);\n\n if (!milestone) {\n logger.debug(`Milestone not found: ${milestoneTitle}`);\n continue;\n }\n\n const issues = await getClosedIssuesForMilestone(milestone.number);\n if (issues.length > 0) {\n allIssues.push(...issues.map(issue => ({ ...issue, version })));\n processedVersions.push(version);\n logger.info(`📋 Found ${issues.length} closed issues in milestone ${milestoneTitle}`);\n }\n }\n\n if (allIssues.length === 0) {\n logger.debug('No closed issues found in any milestones');\n return '';\n }\n\n // Sort issues by updated date (most recent first)\n allIssues.sort((a, b) => new Date(b.updated_at).getTime() - new Date(a.updated_at).getTime());\n\n logger.info(`📋 Processing ${allIssues.length} issues for release notes (max ${maxTotalTokens} tokens)`);\n\n let releaseNotesContent = '';\n let totalTokens = 0;\n const estimateTokens = (text: string) => Math.ceil(text.length / 4);\n\n // Add header\n const header = `## Issues Resolved\\n\\nThe following issues were resolved in this release:\\n\\n`;\n releaseNotesContent += header;\n totalTokens += estimateTokens(header);\n\n for (const issue of allIssues) {\n // Get detailed issue content with individual token limit\n const issueDetails = await getIssueDetails(issue.number, 20000);\n\n // Create issue section\n let issueSection = `### #${issue.number}: ${issueDetails.title}\\n\\n`;\n\n if (issueDetails.body) {\n issueSection += `**Description:**\\n${issueDetails.body}\\n\\n`;\n }\n\n if (issueDetails.comments.length > 0) {\n issueSection += `**Key Discussion Points:**\\n`;\n for (const comment of issueDetails.comments) {\n issueSection += `- **${comment.author}**: ${comment.body}\\n`;\n }\n issueSection += '\\n';\n }\n\n // Add labels if present\n if (issue.labels && issue.labels.length > 0) {\n const labelNames = issue.labels.map((label: any) =>\n typeof label === 'string' ? label : label.name\n ).join(', ');\n issueSection += `**Labels:** ${labelNames}\\n\\n`;\n }\n\n issueSection += '---\\n\\n';\n\n const sectionTokens = estimateTokens(issueSection);\n\n // Check if adding this issue would exceed the total limit\n if (totalTokens + sectionTokens > maxTotalTokens) {\n logger.info(`Stopping at issue #${issue.number} to stay under ${maxTotalTokens} token limit`);\n break;\n }\n\n releaseNotesContent += issueSection;\n totalTokens += sectionTokens;\n\n logger.debug(`Added issue #${issue.number} (${sectionTokens} tokens, total: ${totalTokens})`);\n }\n\n logger.info(`📋 Generated release notes from milestone issues (${totalTokens} tokens)`);\n return releaseNotesContent;\n\n } catch (error: any) {\n // Don't fail the whole operation if milestone content fails\n logger.warn(`⚠️ Failed to get milestone issues for release notes (continuing): ${error.message}`);\n return '';\n }\n};\n\n/**\n * Get recently closed GitHub issues for commit message context.\n * Prioritizes issues from milestones that match the current version.\n */\nexport const getRecentClosedIssuesForCommit = async (currentVersion?: string, limit: number = 10): Promise<string> => {\n const octokit = getOctokit();\n const { owner, repo } = await getRepoDetails();\n const logger = getLogger();\n\n try {\n logger.debug(`Fetching up to ${limit} recently closed GitHub issues for commit context...`);\n\n // Get recently closed issues\n const response = await octokit.issues.listForRepo({\n owner,\n repo,\n state: 'closed',\n per_page: Math.min(limit, 100), // GitHub API limit\n sort: 'updated',\n direction: 'desc',\n });\n\n const issues = response.data.filter(issue =>\n !issue.pull_request && // Filter out PRs\n issue.state_reason === 'completed' // Only issues closed as completed\n );\n\n if (issues.length === 0) {\n logger.debug('No recently closed issues found');\n return '';\n }\n\n // Determine relevant milestone if we have a current version\n let relevantMilestone: any = null;\n if (currentVersion) {\n // Extract base version for milestone matching (e.g., \"0.1.1\" from \"0.1.1-dev.0\")\n const baseVersion = currentVersion.includes('-dev.')\n ? currentVersion.split('-')[0]\n : currentVersion;\n\n const milestoneTitle = `release/${baseVersion}`;\n relevantMilestone = await findMilestoneByTitle(milestoneTitle);\n\n if (relevantMilestone) {\n logger.debug(`Found relevant milestone: ${milestoneTitle}`);\n } else {\n logger.debug(`No milestone found for version: ${baseVersion}`);\n }\n }\n\n // Categorize issues by relevance\n const milestoneIssues: any[] = [];\n const otherIssues: any[] = [];\n\n for (const issue of issues.slice(0, limit)) {\n if (relevantMilestone && issue.milestone?.number === relevantMilestone.number) {\n milestoneIssues.push(issue);\n } else {\n otherIssues.push(issue);\n }\n }\n\n // Build the content, prioritizing milestone issues\n const issueStrings: string[] = [];\n\n // Add milestone issues first (these are most relevant)\n if (milestoneIssues.length > 0) {\n issueStrings.push(`## Recent Issues from Current Milestone (${relevantMilestone.title}):`);\n milestoneIssues.forEach(issue => {\n const labels = issue.labels.map((label: any) =>\n typeof label === 'string' ? label : label.name\n ).join(', ');\n\n issueStrings.push([\n `Issue #${issue.number}: ${issue.title}`,\n `Labels: ${labels || 'none'}`,\n `Closed: ${issue.closed_at}`,\n `Body: ${issue.body?.substring(0, 300) || 'No description'}${issue.body && issue.body.length > 300 ? '...' : ''}`,\n '---'\n ].join('\\n'));\n });\n }\n\n // Add other recent issues if we have space\n const remainingLimit = limit - milestoneIssues.length;\n if (otherIssues.length > 0 && remainingLimit > 0) {\n if (milestoneIssues.length > 0) {\n issueStrings.push('\\n## Other Recent Closed Issues:');\n }\n\n otherIssues.slice(0, remainingLimit).forEach(issue => {\n const labels = issue.labels.map((label: any) =>\n typeof label === 'string' ? label : label.name\n ).join(', ');\n\n const milestoneInfo = issue.milestone\n ? `Milestone: ${issue.milestone.title}`\n : 'Milestone: none';\n\n issueStrings.push([\n `Issue #${issue.number}: ${issue.title}`,\n `Labels: ${labels || 'none'}`,\n milestoneInfo,\n `Closed: ${issue.closed_at}`,\n `Body: ${issue.body?.substring(0, 300) || 'No description'}${issue.body && issue.body.length > 300 ? '...' : ''}`,\n '---'\n ].join('\\n'));\n });\n }\n\n const totalRelevantIssues = milestoneIssues.length;\n const totalOtherIssues = Math.min(otherIssues.length, remainingLimit);\n\n logger.debug(`Fetched ${totalRelevantIssues + totalOtherIssues} closed issues (${totalRelevantIssues} from relevant milestone, ${totalOtherIssues} others)`);\n\n return issueStrings.join('\\n\\n');\n } catch (error: any) {\n logger.warn('Failed to fetch recent closed GitHub issues: %s', error.message);\n return '';\n }\n};\n"],"names":["getOctokit","logger","getLogger","token","process","env","GITHUB_TOKEN","error","Error","Octokit","auth","getCurrentBranchName","stdout","run","trim","getRepoDetails","url","match","owner","repo","GITHUB_PR_TITLE_LIMIT","truncatePullRequestTitle","title","length","maxLength","truncated","substring","lastSpaceIndex","lastIndexOf","createPullRequest","body","head","base","octokit","truncatedTitle","debug","response","pulls","create","data","findOpenPullRequestByHeadRef","list","state","message","status","delay","ms","Promise","resolve","setTimeout","hasWorkflowsConfigured","actions","listRepoWorkflows","workflows","hasWorkflowRunsForPR","prNumber","pr","get","pull_number","headSha","sha","headRef","ref","workflowRuns","listWorkflowRunsForRepo","head_sha","per_page","branchRuns","branch","allRuns","workflow_runs","relevantRuns","filter","head_branch","Date","created_at","getTime","now","waitForPullRequestChecks","options","timeout","skipUserConfirmation","startTime","consecutiveNoChecksCount","maxConsecutiveNoChecks","checkedWorkflowRuns","elapsedTime","warn","proceedWithoutChecks","promptConfirmation","info","checkRunsResponse","checks","listForRef","checkRuns","check_runs","hasWorkflows","hasRunsForPR","Math","round","failingChecks","cr","conclusion","includes","prUrl","currentBranch","undefined","detailedFailedChecks","all","map","check","checkDetails","check_run_id","id","name","detailsUrl","details_url","summary","output","text","statusIcon","PullRequestCheckError","prError","instructions","getRecoveryInstructions","instruction","allChecksCompleted","every","completedCount","mergePullRequest","mergeMethod","deleteBranch","headBranch","merge","merge_method","git","deleteRef","createRelease","tagName","notes","repos","tag_name","getReleaseByTagName","getReleaseByTag","tag","getOpenIssues","limit","issues","listForRepo","min","sort","direction","issue","pull_request","issueStrings","slice","labels","label","join","number","updated_at","createIssue","html_url","getWorkflowRunsTriggeredByRelease","workflowNames","releaseInfo","releaseCreatedAt","releaseCommitSha","target_commitish","workflowsResponse","relevantWorkflows","workflow","runsResponse","listWorkflowRuns","workflow_id","releaseRuns","event","runCreatedAt","releaseCreatedAtTime","runAge","push","a","b","waitForReleaseWorkflows","consecutiveNoWorkflowsCount","maxConsecutiveNoWorkflows","proceedWithoutWorkflows","failingRuns","allWorkflowsCompleted","successfulRuns","runningCount","queuedCount","forEach","getWorkflowsTriggeredByRelease","releaseWorkflows","workflowPath","path","contentResponse","getContent","type","content","Buffer","from","toString","isTriggeredByRelease","workflowContent","workflowName","releaseEventPattern","onReleasePattern","tagPushPattern","isTriggered","test","findMilestoneByTitle","listMilestones","milestone","find","m","closeMilestone","milestoneNumber","updateMilestone","milestone_number","closeMilestoneForVersion","version","milestoneTitle","getClosedIssuesForMilestone","state_reason","getIssueDetails","issueNumber","maxTokens","issueResponse","issue_number","comments","totalTokens","estimateTokens","ceil","currentTokens","commentsResponse","listComments","comment","commentTokens","author","user","login","getMilestoneIssuesForRelease","versions","maxTotalTokens","allIssues","processedVersions","releaseNotesContent","header","issueDetails","issueSection","labelNames","sectionTokens","getRecentClosedIssuesForCommit","currentVersion","relevantMilestone","baseVersion","split","milestoneIssues","otherIssues","closed_at","remainingLimit","milestoneInfo","totalRelevantIssues","totalOtherIssues"],"mappings":"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"}
|