@eldrforge/kodrdriv 0.0.51 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/README.md +2 -1
  2. package/dist/application.js +5 -3
  3. package/dist/application.js.map +1 -1
  4. package/dist/arguments.js +97 -70
  5. package/dist/arguments.js.map +1 -1
  6. package/dist/commands/audio-commit.js +7 -7
  7. package/dist/commands/audio-commit.js.map +1 -1
  8. package/dist/commands/audio-review.js +13 -13
  9. package/dist/commands/audio-review.js.map +1 -1
  10. package/dist/commands/clean.js +2 -2
  11. package/dist/commands/clean.js.map +1 -1
  12. package/dist/commands/commit.js +301 -36
  13. package/dist/commands/commit.js.map +1 -1
  14. package/dist/commands/link.js +7 -7
  15. package/dist/commands/link.js.map +1 -1
  16. package/dist/commands/publish.js +285 -306
  17. package/dist/commands/publish.js.map +1 -1
  18. package/dist/commands/release.js +171 -14
  19. package/dist/commands/release.js.map +1 -1
  20. package/dist/commands/review.js +52 -40
  21. package/dist/commands/review.js.map +1 -1
  22. package/dist/commands/select-audio.js +4 -4
  23. package/dist/commands/select-audio.js.map +1 -1
  24. package/dist/commands/tree.js +347 -34
  25. package/dist/commands/tree.js.map +1 -1
  26. package/dist/commands/unlink.js +5 -5
  27. package/dist/commands/unlink.js.map +1 -1
  28. package/dist/constants.js +28 -9
  29. package/dist/constants.js.map +1 -1
  30. package/dist/content/diff.js +122 -1
  31. package/dist/content/diff.js.map +1 -1
  32. package/dist/content/issues.js +17 -46
  33. package/dist/content/issues.js.map +1 -1
  34. package/dist/logging.js +3 -3
  35. package/dist/logging.js.map +1 -1
  36. package/dist/prompt/commit.js +2 -2
  37. package/dist/prompt/commit.js.map +1 -1
  38. package/dist/prompt/release.js +2 -2
  39. package/dist/prompt/release.js.map +1 -1
  40. package/dist/prompt/review.js +2 -2
  41. package/dist/prompt/review.js.map +1 -1
  42. package/dist/types.js +18 -5
  43. package/dist/types.js.map +1 -1
  44. package/dist/util/child.js +60 -4
  45. package/dist/util/child.js.map +1 -1
  46. package/dist/util/general.js +149 -13
  47. package/dist/util/general.js.map +1 -1
  48. package/dist/util/github.js +12 -8
  49. package/dist/util/github.js.map +1 -1
  50. package/dist/util/interactive.js +297 -0
  51. package/dist/util/interactive.js.map +1 -0
  52. package/dist/util/openai.js +87 -8
  53. package/dist/util/openai.js.map +1 -1
  54. package/dist/util/performance.js +8 -8
  55. package/dist/util/performance.js.map +1 -1
  56. package/dist/util/safety.js +4 -4
  57. package/dist/util/safety.js.map +1 -1
  58. package/dist/util/storage.js +2 -2
  59. package/dist/util/storage.js.map +1 -1
  60. package/package.json +6 -6
  61. package/test-increment.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"general.js","sources":["../../src/util/general.ts"],"sourcesContent":["import path from 'path';\nimport * as Storage from './storage';\nimport { getLogger } from '../logging';\n// eslint-disable-next-line no-restricted-imports\nimport * as fs from 'fs';\n\n// Utility function for deep merging two objects.\nexport function deepMerge(target: any, source: any): any {\n for (const key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n if (key === \"__proto__\" || key === \"constructor\") {\n continue; // Skip prototype-polluting keys\n }\n if (source[key] && typeof source[key] === 'object' && !Array.isArray(source[key])) {\n if (!target[key]) {\n target[key] = {};\n }\n deepMerge(target[key], source[key]);\n } else {\n target[key] = source[key];\n }\n }\n }\n return target;\n}\n\n//Recursive implementation of jSON.stringify;\nexport const stringifyJSON = function (obj: any, options: { depth: number } = { depth: 0 }): string {\n\n if (options.depth > 10) {\n return '{\"error\": \"Maximum depth reached\"}';\n }\n\n const arrOfKeyVals: string[] = [];\n const arrVals: string[] = [];\n let objKeys: string[] = [];\n\n /*********CHECK FOR PRIMITIVE TYPES**********/\n if (typeof obj === 'number' || typeof obj === 'boolean' || obj === null)\n return '' + obj;\n else if (typeof obj === 'string')\n return '\"' + obj + '\"';\n\n /*********CHECK FOR ARRAY**********/\n else if (Array.isArray(obj)) {\n //check for empty array\n if (obj[0] === undefined)\n return '[]';\n else {\n obj.forEach(function (el) {\n arrVals.push(stringifyJSON(el, { depth: options.depth + 1 }));\n });\n return '[' + arrVals + ']';\n }\n }\n /*********CHECK FOR OBJECT**********/\n else if (obj instanceof Object) {\n //get object keys\n objKeys = Object.keys(obj);\n //set key output;\n objKeys.forEach(function (key) {\n const keyOut = '\"' + key + '\":';\n const keyValOut = obj[key];\n //skip functions and undefined properties\n if (keyValOut instanceof Function || keyValOut === undefined)\n arrOfKeyVals.push('');\n else if (typeof keyValOut === 'string')\n arrOfKeyVals.push(keyOut + '\"' + keyValOut + '\"');\n else if (typeof keyValOut === 'boolean' || typeof keyValOut === 'number' || keyValOut === null)\n arrOfKeyVals.push(keyOut + keyValOut);\n //check for nested objects, call recursively until no more objects\n else if (keyValOut instanceof Object) {\n arrOfKeyVals.push(keyOut + stringifyJSON(keyValOut, { depth: options.depth + 1 }));\n }\n });\n return '{' + arrOfKeyVals + '}';\n }\n return '';\n};\n\nexport const incrementPatchVersion = (version: string): string => {\n const parts = version.split('.');\n if (parts.length !== 3) {\n throw new Error(`Invalid version string: ${version}`);\n }\n const patch = parseInt(parts[2], 10);\n if (isNaN(patch)) {\n throw new Error(`Invalid patch version: ${parts[2]}`);\n }\n parts[2] = (patch + 1).toString();\n return parts.join('.');\n};\n\nexport const getOutputPath = (outputDirectory: string, filename: string): string => {\n return path.join(outputDirectory, filename);\n};\n\nexport const getTimestampedFilename = (baseName: string, extension: string = '.json'): string => {\n const now = new Date();\n\n // Format as YYMMdd-HHmm (e.g., 250701-1030)\n const yy = now.getFullYear().toString().slice(-2);\n const mm = (now.getMonth() + 1).toString().padStart(2, '0');\n const dd = now.getDate().toString().padStart(2, '0');\n const hh = now.getHours().toString().padStart(2, '0');\n const min = now.getMinutes().toString().padStart(2, '0');\n\n const timestamp = `${yy}${mm}${dd}-${hh}${min}`;\n\n return `${timestamp}-${baseName}${extension}`;\n};\n\nexport const getTimestampedRequestFilename = (baseName: string): string => {\n return getTimestampedFilename(baseName, '.request.json');\n};\n\nexport const getTimestampedResponseFilename = (baseName: string): string => {\n return getTimestampedFilename(baseName, '.response.json');\n};\n\nexport const getTimestampedCommitFilename = (): string => {\n return getTimestampedFilename('commit-message', '.md');\n};\n\nexport const getTimestampedReleaseNotesFilename = (): string => {\n return getTimestampedFilename('release-notes', '.md');\n};\n\nexport const getTimestampedAudioFilename = (): string => {\n return getTimestampedFilename('audio-recording', '.wav');\n};\n\nexport const getTimestampedTranscriptFilename = (): string => {\n return getTimestampedFilename('audio-transcript', '.md');\n};\n\nexport const getTimestampedReviewFilename = (): string => {\n return getTimestampedFilename('review-analysis', '.md');\n};\n\nexport const getTimestampedReviewNotesFilename = (): string => {\n return getTimestampedFilename('review-notes', '.md');\n};\n\nexport const getTimestampedArchivedAudioFilename = (originalExtension: string = '.wav'): string => {\n return getTimestampedFilename('review-audio', originalExtension);\n};\n\nexport const getTimestampedArchivedTranscriptFilename = (): string => {\n return getTimestampedFilename('review-transcript', '.md');\n};\n\n/**\n * Archives an audio file and its transcription to the output/kodrdriv directory\n * @param originalAudioPath - Path to the original audio file\n * @param transcriptionText - The raw transcription text\n * @param outputDirectory - Base output directory (default: 'output')\n * @returns Object containing the paths where files were archived\n */\nexport const archiveAudio = async (\n originalAudioPath: string,\n transcriptionText: string,\n outputDirectory: string = 'output'\n): Promise<{ audioPath: string; transcriptPath: string }> => {\n const logger = getLogger();\n const storage = Storage.create({ log: logger.debug });\n\n try {\n // Ensure the output directory exists (should already be output/kodrdriv)\n await storage.ensureDirectory(outputDirectory);\n\n // Get file extension from original audio file\n const originalExtension = path.extname(originalAudioPath);\n\n // Generate timestamped filenames\n const archivedAudioFilename = getTimestampedArchivedAudioFilename(originalExtension);\n const archivedTranscriptFilename = getTimestampedArchivedTranscriptFilename();\n\n // Full paths for archived files - directly in the output directory\n const archivedAudioPath = path.join(outputDirectory, archivedAudioFilename);\n const archivedTranscriptPath = path.join(outputDirectory, archivedTranscriptFilename);\n\n // Copy audio file if it exists\n if (await storage.isFileReadable(originalAudioPath)) {\n // Read original audio file as buffer using fs directly for binary files\n const audioBuffer = await fs.promises.readFile(originalAudioPath);\n await storage.writeFile(archivedAudioPath, audioBuffer, 'binary');\n logger.debug('Archived audio file to: %s', archivedAudioPath);\n } else {\n logger.warn('Original audio file not found or not readable: %s', originalAudioPath);\n }\n\n // Save transcription text\n const transcriptContent = `# Audio Transcription Archive\\n\\n**Original Audio File:** ${originalAudioPath}\\n**Archived:** ${new Date().toISOString()}\\n\\n## Transcription\\n\\n${transcriptionText}`;\n await storage.writeFile(archivedTranscriptPath, transcriptContent, 'utf8');\n logger.debug('Archived transcription to: %s', archivedTranscriptPath);\n\n logger.info('📁 Audio archived successfully - Audio: %s, Transcript: %s', archivedAudioFilename, archivedTranscriptFilename);\n\n return {\n audioPath: archivedAudioPath,\n transcriptPath: archivedTranscriptPath\n };\n\n } catch (error: any) {\n logger.error('Failed to archive audio: %s', error.message);\n throw new Error(`Audio archiving failed: ${error.message}`);\n }\n};"],"names":["stringifyJSON","obj","options","depth","arrOfKeyVals","arrVals","objKeys","Array","isArray","undefined","forEach","el","push","Object","keys","key","keyOut","keyValOut","Function","incrementPatchVersion","version","parts","split","length","Error","patch","parseInt","isNaN","toString","join","getOutputPath","outputDirectory","filename","path","getTimestampedFilename","baseName","extension","now","Date","yy","getFullYear","slice","mm","getMonth","padStart","dd","getDate","hh","getHours","min","getMinutes","timestamp","getTimestampedRequestFilename","getTimestampedResponseFilename","getTimestampedCommitFilename","getTimestampedReleaseNotesFilename","getTimestampedAudioFilename","getTimestampedReviewFilename","getTimestampedReviewNotesFilename","getTimestampedArchivedAudioFilename","originalExtension","getTimestampedArchivedTranscriptFilename","archiveAudio","originalAudioPath","transcriptionText","logger","getLogger","storage","Storage","log","debug","ensureDirectory","extname","archivedAudioFilename","archivedTranscriptFilename","archivedAudioPath","archivedTranscriptPath","isFileReadable","audioBuffer","fs","promises","readFile","writeFile","warn","transcriptContent","toISOString","info","audioPath","transcriptPath","error","message"],"mappings":"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"}
1
+ {"version":3,"file":"general.js","sources":["../../src/util/general.ts"],"sourcesContent":["import path from 'path';\nimport * as Storage from './storage';\nimport { getLogger } from '../logging';\n// eslint-disable-next-line no-restricted-imports\nimport * as fs from 'fs';\n\n// Utility function for deep merging two objects.\nexport function deepMerge(target: any, source: any): any {\n for (const key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n if (key === \"__proto__\" || key === \"constructor\") {\n continue; // Skip prototype-polluting keys\n }\n if (source[key] && typeof source[key] === 'object' && !Array.isArray(source[key])) {\n if (!target[key]) {\n target[key] = {};\n }\n deepMerge(target[key], source[key]);\n } else {\n target[key] = source[key];\n }\n }\n }\n return target;\n}\n\n//Recursive implementation of jSON.stringify;\nexport const stringifyJSON = function (obj: any, options: { depth: number } = { depth: 0 }): string {\n\n if (options.depth > 10) {\n return '{\"error\": \"Maximum depth reached\"}';\n }\n\n const arrOfKeyVals: string[] = [];\n const arrVals: string[] = [];\n let objKeys: string[] = [];\n\n /*********CHECK FOR PRIMITIVE TYPES**********/\n if (typeof obj === 'number' || typeof obj === 'boolean' || obj === null)\n return '' + obj;\n else if (typeof obj === 'string')\n return '\"' + obj + '\"';\n\n /*********CHECK FOR ARRAY**********/\n else if (Array.isArray(obj)) {\n //check for empty array\n if (obj[0] === undefined)\n return '[]';\n else {\n obj.forEach(function (el) {\n arrVals.push(stringifyJSON(el, { depth: options.depth + 1 }));\n });\n return '[' + arrVals + ']';\n }\n }\n /*********CHECK FOR OBJECT**********/\n else if (obj instanceof Object) {\n //get object keys\n objKeys = Object.keys(obj);\n //set key output;\n objKeys.forEach(function (key) {\n const keyOut = '\"' + key + '\":';\n const keyValOut = obj[key];\n //skip functions and undefined properties\n if (keyValOut instanceof Function || keyValOut === undefined)\n arrOfKeyVals.push('');\n else if (typeof keyValOut === 'string')\n arrOfKeyVals.push(keyOut + '\"' + keyValOut + '\"');\n else if (typeof keyValOut === 'boolean' || typeof keyValOut === 'number' || keyValOut === null)\n arrOfKeyVals.push(keyOut + keyValOut);\n //check for nested objects, call recursively until no more objects\n else if (keyValOut instanceof Object) {\n arrOfKeyVals.push(keyOut + stringifyJSON(keyValOut, { depth: options.depth + 1 }));\n }\n });\n return '{' + arrOfKeyVals + '}';\n }\n return '';\n};\n\nexport const incrementPatchVersion = (version: string): string => {\n // Remove 'v' prefix if present\n const cleanVersion = version.startsWith('v') ? version.slice(1) : version;\n\n // Split into major.minor.patch and handle pre-release identifiers\n const parts = cleanVersion.split('.');\n if (parts.length < 3) {\n throw new Error(`Invalid version string: ${version}`);\n }\n\n // Handle pre-release versions like \"4.6.24-dev.0\"\n // Split the patch part on '-' to separate patch number from pre-release\n const patchPart = parts[2];\n let patchNumber: number;\n\n if (patchPart.startsWith('-')) {\n // Handle negative patch numbers like \"-1\" or \"-5\"\n patchNumber = parseInt(patchPart, 10);\n } else {\n // Handle normal patch numbers with possible pre-release like \"24-dev.0\"\n const patchComponents = patchPart.split('-');\n patchNumber = parseInt(patchComponents[0], 10);\n }\n\n if (isNaN(patchNumber)) {\n throw new Error(`Invalid patch version: ${patchPart}`);\n }\n\n // Increment the patch number and rebuild the version\n const newPatchNumber = patchNumber + 1;\n\n // For pre-release versions, we'll create a clean release version by dropping the pre-release identifier\n const newVersion = `${parts[0]}.${parts[1]}.${newPatchNumber}`;\n\n return newVersion;\n};\n\nexport const incrementMinorVersion = (version: string): string => {\n // Remove 'v' prefix if present\n const cleanVersion = version.startsWith('v') ? version.slice(1) : version;\n\n // Split into major.minor.patch and handle pre-release identifiers\n const parts = cleanVersion.split('.');\n if (parts.length < 3) {\n throw new Error(`Invalid version string: ${version}`);\n }\n\n const majorNumber = parseInt(parts[0], 10);\n const minorPart = parts[1];\n\n // Handle pre-release versions on minor like \"23-dev.0\"\n const minorComponents = minorPart.split('-');\n const minorNumber = parseInt(minorComponents[0], 10);\n\n if (isNaN(majorNumber) || isNaN(minorNumber)) {\n throw new Error(`Invalid version numbers in: ${version}`);\n }\n\n // Increment the minor number and reset patch to 0\n const newMinorNumber = minorNumber + 1;\n const newVersion = `${majorNumber}.${newMinorNumber}.0`;\n\n return newVersion;\n};\n\nexport const incrementMajorVersion = (version: string): string => {\n // Remove 'v' prefix if present\n const cleanVersion = version.startsWith('v') ? version.slice(1) : version;\n\n // Split into major.minor.patch and handle pre-release identifiers\n const parts = cleanVersion.split('.');\n if (parts.length < 3) {\n throw new Error(`Invalid version string: ${version}`);\n }\n\n const majorPart = parts[0];\n\n // Handle pre-release versions on major like \"4-dev.0\"\n const majorComponents = majorPart.split('-');\n const majorNumber = parseInt(majorComponents[0], 10);\n\n if (isNaN(majorNumber)) {\n throw new Error(`Invalid major version number in: ${version}`);\n }\n\n // Increment the major number and reset minor and patch to 0\n const newMajorNumber = majorNumber + 1;\n const newVersion = `${newMajorNumber}.0.0`;\n\n return newVersion;\n};\n\nexport const validateVersionString = (version: string): boolean => {\n // Remove 'v' prefix if present\n const cleanVersion = version.startsWith('v') ? version.slice(1) : version;\n\n // Basic semver regex pattern\n const semverPattern = /^\\d+\\.\\d+\\.\\d+$/;\n return semverPattern.test(cleanVersion);\n};\n\nexport const calculateTargetVersion = (currentVersion: string, targetVersion: string): string => {\n switch (targetVersion.toLowerCase()) {\n case 'patch':\n return incrementPatchVersion(currentVersion);\n case 'minor':\n return incrementMinorVersion(currentVersion);\n case 'major':\n return incrementMajorVersion(currentVersion);\n default:\n // Explicit version provided\n if (!validateVersionString(targetVersion)) {\n throw new Error(`Invalid version format: ${targetVersion}. Expected format: \"x.y.z\" or one of: \"patch\", \"minor\", \"major\"`);\n }\n return targetVersion.startsWith('v') ? targetVersion.slice(1) : targetVersion;\n }\n};\n\nexport const checkIfTagExists = async (tagName: string): Promise<boolean> => {\n const { run } = await import('./child');\n try {\n const { stdout } = await run(`git tag -l ${tagName}`);\n return stdout.trim() === tagName;\n } catch {\n // If git command fails, assume tag doesn't exist\n return false;\n }\n};\n\nexport const confirmVersionInteractively = async (currentVersion: string, proposedVersion: string, targetVersionInput?: string): Promise<string> => {\n const { getUserChoice, getUserTextInput, requireTTY } = await import('./interactive');\n const { getLogger } = await import('../logging');\n\n requireTTY('Interactive version confirmation requires a terminal.');\n\n const logger = getLogger();\n logger.info(`\\n📦 Version Confirmation:`);\n logger.info(` Current version: ${currentVersion}`);\n logger.info(` Proposed version: ${proposedVersion}`);\n if (targetVersionInput) {\n logger.info(` Target input: ${targetVersionInput}`);\n }\n\n const choices = [\n { key: 'c', label: `Confirm ${proposedVersion}` },\n { key: 'e', label: 'Enter custom version' },\n { key: 'a', label: 'Abort publish' }\n ];\n\n const choice = await getUserChoice('\\n🤔 Confirm the version for this release:', choices);\n\n switch (choice) {\n case 'c':\n return proposedVersion;\n case 'e': {\n const customVersion = await getUserTextInput('\\n📝 Enter the version number (e.g., \"4.30.0\"):');\n if (!validateVersionString(customVersion)) {\n throw new Error(`Invalid version format: ${customVersion}. Expected format: \"x.y.z\"`);\n }\n const cleanCustomVersion = customVersion.startsWith('v') ? customVersion.slice(1) : customVersion;\n logger.info(`✅ Using custom version: ${cleanCustomVersion}`);\n return cleanCustomVersion;\n }\n case 'a':\n throw new Error('Release aborted by user');\n default:\n throw new Error(`Unexpected choice: ${choice}`);\n }\n};\n\nexport const getOutputPath = (outputDirectory: string, filename: string): string => {\n return path.join(outputDirectory, filename);\n};\n\nexport const getTimestampedFilename = (baseName: string, extension: string = '.json'): string => {\n const now = new Date();\n\n // Format as YYMMdd-HHmm (e.g., 250701-1030)\n const yy = now.getFullYear().toString().slice(-2);\n const mm = (now.getMonth() + 1).toString().padStart(2, '0');\n const dd = now.getDate().toString().padStart(2, '0');\n const hh = now.getHours().toString().padStart(2, '0');\n const min = now.getMinutes().toString().padStart(2, '0');\n\n const timestamp = `${yy}${mm}${dd}-${hh}${min}`;\n\n return `${timestamp}-${baseName}${extension}`;\n};\n\nexport const getTimestampedRequestFilename = (baseName: string): string => {\n return getTimestampedFilename(baseName, '.request.json');\n};\n\nexport const getTimestampedResponseFilename = (baseName: string): string => {\n return getTimestampedFilename(baseName, '.response.json');\n};\n\nexport const getTimestampedCommitFilename = (): string => {\n return getTimestampedFilename('commit-message', '.md');\n};\n\nexport const getTimestampedReleaseNotesFilename = (): string => {\n return getTimestampedFilename('release-notes', '.md');\n};\n\nexport const getTimestampedAudioFilename = (): string => {\n return getTimestampedFilename('audio-recording', '.wav');\n};\n\nexport const getTimestampedTranscriptFilename = (): string => {\n return getTimestampedFilename('audio-transcript', '.md');\n};\n\nexport const getTimestampedReviewFilename = (): string => {\n return getTimestampedFilename('review-analysis', '.md');\n};\n\nexport const getTimestampedReviewNotesFilename = (): string => {\n return getTimestampedFilename('review-notes', '.md');\n};\n\nexport const getTimestampedArchivedAudioFilename = (originalExtension: string = '.wav'): string => {\n return getTimestampedFilename('review-audio', originalExtension);\n};\n\nexport const getTimestampedArchivedTranscriptFilename = (): string => {\n return getTimestampedFilename('review-transcript', '.md');\n};\n\n/**\n * Archives an audio file and its transcription to the output/kodrdriv directory\n * @param originalAudioPath - Path to the original audio file\n * @param transcriptionText - The raw transcription text\n * @param outputDirectory - Base output directory (default: 'output')\n * @returns Object containing the paths where files were archived\n */\nexport const archiveAudio = async (\n originalAudioPath: string,\n transcriptionText: string,\n outputDirectory: string = 'output'\n): Promise<{ audioPath: string; transcriptPath: string }> => {\n const logger = getLogger();\n const storage = Storage.create({ log: logger.debug });\n\n try {\n // Ensure the output directory exists (should already be output/kodrdriv)\n await storage.ensureDirectory(outputDirectory);\n\n // Get file extension from original audio file\n const originalExtension = path.extname(originalAudioPath);\n\n // Generate timestamped filenames\n const archivedAudioFilename = getTimestampedArchivedAudioFilename(originalExtension);\n const archivedTranscriptFilename = getTimestampedArchivedTranscriptFilename();\n\n // Full paths for archived files - directly in the output directory\n const archivedAudioPath = path.join(outputDirectory, archivedAudioFilename);\n const archivedTranscriptPath = path.join(outputDirectory, archivedTranscriptFilename);\n\n // Copy audio file if it exists\n if (await storage.isFileReadable(originalAudioPath)) {\n // Read original audio file as buffer using fs directly for binary files\n const audioBuffer = await fs.promises.readFile(originalAudioPath);\n await storage.writeFile(archivedAudioPath, audioBuffer, 'binary');\n logger.debug('Archived audio file to: %s', archivedAudioPath);\n } else {\n logger.warn('Original audio file not found or not readable: %s', originalAudioPath);\n }\n\n // Save transcription text\n const transcriptContent = `# Audio Transcription Archive\\n\\n**Original Audio File:** ${originalAudioPath}\\n**Archived:** ${new Date().toISOString()}\\n\\n## Transcription\\n\\n${transcriptionText}`;\n await storage.writeFile(archivedTranscriptPath, transcriptContent, 'utf8');\n logger.debug('Archived transcription to: %s', archivedTranscriptPath);\n\n logger.info('📁 Audio archived successfully - Audio: %s, Transcript: %s', archivedAudioFilename, archivedTranscriptFilename);\n\n return {\n audioPath: archivedAudioPath,\n transcriptPath: archivedTranscriptPath\n };\n\n } catch (error: any) {\n logger.error('Failed to archive audio: %s', error.message);\n throw new Error(`Audio archiving failed: ${error.message}`);\n }\n};\n"],"names":["stringifyJSON","obj","options","depth","arrOfKeyVals","arrVals","objKeys","Array","isArray","undefined","forEach","el","push","Object","keys","key","keyOut","keyValOut","Function","incrementPatchVersion","version","cleanVersion","startsWith","slice","parts","split","length","Error","patchPart","patchNumber","parseInt","patchComponents","isNaN","newPatchNumber","newVersion","incrementMinorVersion","majorNumber","minorPart","minorComponents","minorNumber","newMinorNumber","incrementMajorVersion","majorPart","majorComponents","newMajorNumber","validateVersionString","semverPattern","test","calculateTargetVersion","currentVersion","targetVersion","toLowerCase","checkIfTagExists","tagName","run","stdout","trim","confirmVersionInteractively","proposedVersion","targetVersionInput","getUserChoice","getUserTextInput","requireTTY","getLogger","logger","info","choices","label","choice","customVersion","cleanCustomVersion","getOutputPath","outputDirectory","filename","path","join","getTimestampedFilename","baseName","extension","now","Date","yy","getFullYear","toString","mm","getMonth","padStart","dd","getDate","hh","getHours","min","getMinutes","timestamp","getTimestampedRequestFilename","getTimestampedResponseFilename","getTimestampedCommitFilename","getTimestampedReleaseNotesFilename","getTimestampedAudioFilename","getTimestampedReviewFilename","getTimestampedReviewNotesFilename","getTimestampedArchivedAudioFilename","originalExtension","getTimestampedArchivedTranscriptFilename","archiveAudio","originalAudioPath","transcriptionText","storage","Storage","log","debug","ensureDirectory","extname","archivedAudioFilename","archivedTranscriptFilename","archivedAudioPath","archivedTranscriptPath","isFileReadable","audioBuffer","fs","promises","readFile","writeFile","warn","transcriptContent","toISOString","audioPath","transcriptPath","error","message"],"mappings":"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"}
@@ -242,7 +242,7 @@ const waitForPullRequestChecks = async (prNumber, options = {})=>{
242
242
  await delay(10000); // wait 10 seconds
243
243
  }
244
244
  };
245
- const mergePullRequest = async (prNumber, mergeMethod = 'squash')=>{
245
+ const mergePullRequest = async (prNumber, mergeMethod = 'squash', deleteBranch = true)=>{
246
246
  const octokit = getOctokit();
247
247
  const { owner, repo } = await getRepoDetails();
248
248
  const logger = getLogger();
@@ -260,13 +260,17 @@ const mergePullRequest = async (prNumber, mergeMethod = 'squash')=>{
260
260
  merge_method: mergeMethod
261
261
  });
262
262
  logger.info(`PR #${prNumber} merged using ${mergeMethod} method.`);
263
- logger.info(`Deleting branch ${headBranch}...`);
264
- await octokit.git.deleteRef({
265
- owner,
266
- repo,
267
- ref: `heads/${headBranch}`
268
- });
269
- logger.info(`Branch ${headBranch} deleted.`);
263
+ if (deleteBranch) {
264
+ logger.info(`Deleting branch ${headBranch}...`);
265
+ await octokit.git.deleteRef({
266
+ owner,
267
+ repo,
268
+ ref: `heads/${headBranch}`
269
+ });
270
+ logger.info(`Branch ${headBranch} deleted.`);
271
+ } else {
272
+ logger.info(`Preserving branch ${headBranch} (deletion skipped).`);
273
+ }
270
274
  };
271
275
  const createRelease = async (tagName, title, notes)=>{
272
276
  const octokit = getOctokit();
@@ -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\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 || 300000; // 5 minutes 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\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 logger.info('GitHub Actions workflows are configured. Continuing to wait for checks...');\n consecutiveNoChecksCount = 0; // Reset counter since workflows exist\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 (prNumber: number, mergeMethod: MergeMethod = 'squash'): 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 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};\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 || 600000; // 10 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"],"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","waitForPullRequestChecks","prNumber","options","timeout","skipUserConfirmation","startTime","Date","now","consecutiveNoChecksCount","maxConsecutiveNoChecks","elapsedTime","warn","proceedWithoutChecks","promptConfirmation","info","pr","get","pull_number","checkRunsResponse","checks","listForRef","ref","sha","checkRuns","check_runs","hasWorkflows","failingChecks","filter","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","headBranch","merge","merge_method","git","deleteRef","createRelease","tagName","notes","repos","tag_name","getReleaseByTagName","getReleaseByTag","tag","created_at","getOpenIssues","limit","issues","listForRepo","per_page","Math","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","allRuns","runsResponse","listWorkflowRuns","workflow_id","workflow_runs","releaseRuns","event","runCreatedAt","getTime","releaseCreatedAtTime","runAge","push","a","b","waitForReleaseWorkflows","workflowRuns","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"],"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\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\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 || 300000; // 5 minutes 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\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 logger.info('GitHub Actions workflows are configured. Continuing to wait for checks...');\n consecutiveNoChecksCount = 0; // Reset counter since workflows exist\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 || 600000; // 10 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"],"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","waitForPullRequestChecks","prNumber","options","timeout","skipUserConfirmation","startTime","Date","now","consecutiveNoChecksCount","maxConsecutiveNoChecks","elapsedTime","warn","proceedWithoutChecks","promptConfirmation","info","pr","get","pull_number","checkRunsResponse","checks","listForRef","ref","sha","checkRuns","check_runs","hasWorkflows","failingChecks","filter","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","created_at","getOpenIssues","limit","issues","listForRepo","per_page","Math","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","allRuns","runsResponse","listWorkflowRuns","workflow_id","workflow_runs","releaseRuns","event","runCreatedAt","getTime","releaseCreatedAtTime","runAge","push","a","b","waitForReleaseWorkflows","workflowRuns","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"],"mappings":"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"}