@eldrforge/kodrdriv 0.0.30 → 0.0.32
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/dist/commands/publish.js +36 -3
- package/dist/commands/publish.js.map +1 -1
- package/dist/constants.js +1 -1
- package/dist/util/github.js +80 -8
- package/dist/util/github.js.map +1 -1
- package/package.json +1 -1
package/dist/commands/publish.js
CHANGED
|
@@ -289,9 +289,42 @@ const execute = async (runConfig)=>{
|
|
|
289
289
|
const packageJsonContents = await storage.readFile('package.json', 'utf-8');
|
|
290
290
|
const { version } = JSON.parse(packageJsonContents);
|
|
291
291
|
const tagName = `v${version}`;
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
292
|
+
// Check if tag already exists locally
|
|
293
|
+
try {
|
|
294
|
+
const { stdout } = await run(`git tag -l ${tagName}`);
|
|
295
|
+
if (stdout.trim() === tagName) {
|
|
296
|
+
logger.info(`Tag ${tagName} already exists locally, skipping tag creation`);
|
|
297
|
+
} else {
|
|
298
|
+
await run(`git tag ${tagName}`);
|
|
299
|
+
logger.info(`Created local tag: ${tagName}`);
|
|
300
|
+
}
|
|
301
|
+
} catch (error) {
|
|
302
|
+
// If git tag -l fails, create the tag anyway
|
|
303
|
+
await run(`git tag ${tagName}`);
|
|
304
|
+
logger.info(`Created local tag: ${tagName}`);
|
|
305
|
+
}
|
|
306
|
+
// Check if tag exists on remote before pushing
|
|
307
|
+
try {
|
|
308
|
+
const { stdout } = await run(`git ls-remote origin refs/tags/${tagName}`);
|
|
309
|
+
if (stdout.trim()) {
|
|
310
|
+
logger.info(`Tag ${tagName} already exists on remote, skipping push`);
|
|
311
|
+
} else {
|
|
312
|
+
await run(`git push origin ${tagName}`);
|
|
313
|
+
logger.info(`Pushed tag to remote: ${tagName}`);
|
|
314
|
+
}
|
|
315
|
+
} catch (error) {
|
|
316
|
+
// If ls-remote fails, try to push anyway (might be a new remote)
|
|
317
|
+
try {
|
|
318
|
+
await run(`git push origin ${tagName}`);
|
|
319
|
+
logger.info(`Pushed tag to remote: ${tagName}`);
|
|
320
|
+
} catch (pushError) {
|
|
321
|
+
if (pushError.message && pushError.message.includes('already exists')) {
|
|
322
|
+
logger.info(`Tag ${tagName} already exists on remote, continuing...`);
|
|
323
|
+
} else {
|
|
324
|
+
throw pushError;
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
}
|
|
295
328
|
}
|
|
296
329
|
logger.info(isDryRun ? 'DRY RUN: Would create GitHub release...' : 'Creating GitHub release...');
|
|
297
330
|
let tagName;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publish.js","sources":["../../src/commands/publish.ts"],"sourcesContent":["import path from 'path';\nimport * as Commit from './commit';\nimport * as Diff from '../content/diff';\nimport * as Release from './release';\nimport * as Link from './link';\nimport * as Unlink from './unlink';\nimport { getLogger } from '../logging';\nimport { Config, PullRequest } from '../types';\nimport { run, runWithDryRunSupport } from '../util/child';\nimport * as GitHub from '../util/github';\nimport { create as createStorage } from '../util/storage';\nimport { incrementPatchVersion, getOutputPath } from '../util/general';\nimport { DEFAULT_OUTPUT_DIRECTORY } from '../constants';\n\nconst scanNpmrcForEnvVars = async (storage: any): Promise<string[]> => {\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 // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (error) {\n // If we can't read .npmrc, that's okay - just continue\n }\n }\n\n return envVars;\n};\n\nconst validateEnvironmentVariables = (requiredEnvVars: string[], isDryRun: boolean): void => {\n const logger = getLogger();\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(`DRY RUN: Missing required environment variables: ${missingEnvVars.join(', ')}`);\n } else {\n logger.error(`Missing required environment variables: ${missingEnvVars.join(', ')}`);\n throw new Error(`Missing required environment variables: ${missingEnvVars.join(', ')}. Please set these environment variables before running publish.`);\n }\n }\n};\n\nconst runPrechecks = async (runConfig: Config): Promise<void> => {\n const logger = getLogger();\n const storage = createStorage({ log: logger.info });\n const isDryRun = runConfig.dryRun || false;\n\n logger.info(isDryRun ? 'DRY RUN: Running prechecks...' : 'Running prechecks...');\n\n // Check if we're in a git repository\n try {\n if (isDryRun) {\n logger.info('DRY RUN: Would check git repository with: git rev-parse --git-dir');\n } else {\n await run('git rev-parse --git-dir');\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (error) {\n if (!isDryRun) {\n throw new Error('Not in a git repository. Please run this command from within a git repository.');\n }\n }\n\n // Check for uncommitted changes\n logger.info(isDryRun ? 'DRY RUN: Would check for uncommitted changes...' : 'Checking for uncommitted changes...');\n try {\n if (isDryRun) {\n logger.info('DRY RUN: 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 // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (error) {\n if (!isDryRun) {\n throw new Error('Failed to check git status. Please ensure you are in a valid git repository.');\n }\n }\n\n // Check if we're on a release branch\n logger.info(isDryRun ? 'DRY RUN: Would check current branch...' : 'Checking current branch...');\n if (isDryRun) {\n logger.info('DRY RUN: Would verify current branch is a release branch (starts with \"release/\")');\n } else {\n const currentBranch = await GitHub.getCurrentBranchName();\n if (!currentBranch.startsWith('release/')) {\n throw new Error(`Current branch '${currentBranch}' is not a release branch. Please switch to a release branch (e.g., release/1.0.0) before running publish.`);\n }\n }\n\n // Check if prepublishOnly script exists in package.json\n logger.info(isDryRun ? 'DRY RUN: Would check for prepublishOnly script...' : '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('DRY RUN: 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 packageJson = JSON.parse(packageJsonContents);\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\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('DRY RUN: 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('DRY RUN: prepublishOnly script is required in package.json but was not found.');\n }\n }\n }\n\n // Check required environment variables\n logger.verbose(isDryRun ? 'DRY RUN: Would check required environment variables...' : '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(`${isDryRun ? 'DRY RUN: ' : ''}Required environment variables: ${allRequiredEnvVars.join(', ')}`);\n validateEnvironmentVariables(allRequiredEnvVars, isDryRun);\n } else {\n logger.verbose(isDryRun ? 'DRY RUN: No required environment variables specified.' : 'No required environment variables specified.');\n }\n\n logger.info(isDryRun ? 'DRY RUN: All prechecks would pass.' : 'All prechecks passed.');\n};\n\nexport const execute = async (runConfig: Config): Promise<void> => {\n const logger = getLogger();\n const storage = createStorage({ log: logger.info });\n const isDryRun = runConfig.dryRun || false;\n\n // Run prechecks before starting any work\n await runPrechecks(runConfig);\n\n logger.info(isDryRun ? 'DRY RUN: Would start release process...' : 'Starting release process...');\n\n try {\n // Unlink all workspace packages before starting (if enabled)\n const shouldUnlink = runConfig.publish?.unlinkWorkspacePackages !== false; // default to true\n if (shouldUnlink) {\n logger.verbose(isDryRun ? 'DRY RUN: Would unlink workspace packages...' : 'Unlinking workspace packages...');\n await Unlink.execute(runConfig);\n } else {\n logger.verbose(isDryRun ? 'DRY RUN: Would skip unlink workspace packages (disabled in config).' : 'Skipping unlink workspace packages (disabled in config).');\n }\n\n let pr: PullRequest | null = null;\n\n if (isDryRun) {\n logger.info('DRY RUN: Would check for existing pull request');\n logger.info('DRY RUN: 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(`${isDryRun ? 'DRY RUN: ' : ''}Found existing pull request for branch: ${pr.html_url}`);\n } else {\n logger.info(isDryRun ? 'DRY RUN: No open pull request found, would start new release publishing process...' : 'No open pull request found, starting new release publishing process...');\n // 1. Prepare for release\n logger.verbose(isDryRun ? 'DRY RUN: Would prepare for release: switching from workspace to remote dependencies.' : 'Preparing for release: switching from workspace to remote dependencies.');\n\n logger.verbose(isDryRun ? 'DRY RUN: Would update dependencies to latest versions from registry' : 'Updating dependencies to latest versions from registry');\n const updatePatterns = runConfig.publish?.dependencyUpdatePatterns;\n if (updatePatterns && updatePatterns.length > 0) {\n logger.verbose(`${isDryRun ? 'DRY RUN: ' : ''}Updating dependencies matching patterns: ${updatePatterns.join(', ')}`);\n const patternsArg = updatePatterns.join(' ');\n await runWithDryRunSupport(`pnpm update --latest ${patternsArg}`, isDryRun);\n } else {\n logger.verbose(isDryRun ? 'DRY RUN: No dependency update patterns specified, would update all dependencies' : 'No dependency update patterns specified, updating all dependencies');\n await runWithDryRunSupport('pnpm update --latest', isDryRun);\n }\n\n logger.verbose(isDryRun ? 'DRY RUN: Would stage changes for release commit' : 'Staging changes for release commit');\n await runWithDryRunSupport('git add package.json pnpm-lock.yaml', isDryRun);\n\n logger.info(isDryRun ? 'DRY RUN: Would run prepublishOnly script...' : 'Running prepublishOnly script...');\n await runWithDryRunSupport('pnpm run prepublishOnly', isDryRun);\n\n logger.verbose(isDryRun ? 'DRY RUN: Would check for staged changes...' : 'Checking for staged changes...');\n if (isDryRun) {\n logger.verbose('DRY RUN: Assuming staged changes exist for demo purposes');\n logger.verbose('DRY RUN: Would create commit...');\n await Commit.execute(runConfig);\n } else {\n if (await Diff.hasStagedChanges()) {\n logger.verbose('Staged changes found, creating commit...');\n await Commit.execute(runConfig);\n } else {\n logger.verbose('No changes to commit, skipping commit.');\n }\n }\n\n logger.info(isDryRun ? 'DRY RUN: Would bump version...' : 'Bumping version...');\n // Manually increment version without creating a tag\n if (isDryRun) {\n logger.info('DRY RUN: Would manually increment patch version in package.json and commit');\n } else {\n const packageJsonContents = await storage.readFile('package.json', 'utf-8');\n const packageJson = JSON.parse(packageJsonContents);\n const currentVersion = packageJson.version;\n const newVersion = incrementPatchVersion(currentVersion);\n packageJson.version = newVersion;\n await storage.writeFile('package.json', JSON.stringify(packageJson, null, 2) + '\\n', 'utf-8');\n logger.info(`Version bumped from ${currentVersion} to ${newVersion}`);\n\n // Stage and commit the version change\n await run('git add package.json');\n await run(`git commit -m \"chore: bump version to ${newVersion}\"`);\n logger.info(`Version change committed: ${newVersion}`);\n }\n\n logger.info(isDryRun ? 'DRY RUN: Would generate release notes...' : 'Generating release notes...');\n const releaseSummary = await Release.execute(runConfig);\n\n if (isDryRun) {\n logger.info('DRY RUN: 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(isDryRun ? 'DRY RUN: Would push to origin...' : 'Pushing to origin...');\n await runWithDryRunSupport('git push', isDryRun);\n\n logger.info(isDryRun ? 'DRY RUN: Would create pull request...' : 'Creating pull request...');\n if (isDryRun) {\n logger.info('DRY RUN: Would get commit title and create PR with GitHub API');\n pr = { number: 123, html_url: 'https://github.com/mock/repo/pull/123', labels: [] } as PullRequest;\n } else {\n const { stdout: commitTitle } = await run('git log -1 --pretty=%B');\n pr = await GitHub.createPullRequest(commitTitle, 'Automated release PR.', await GitHub.getCurrentBranchName());\n if (!pr) {\n throw new Error('Failed to create pull request.');\n }\n logger.info(`Pull request created: ${pr.html_url}`);\n }\n }\n\n logger.info(`${isDryRun ? 'DRY RUN: Would wait for' : 'Waiting for'} PR #${pr!.number} checks to complete...`);\n if (!isDryRun) {\n // Configure timeout and user confirmation behavior\n const timeout = runConfig.publish?.checksTimeout || 300000; // 5 minutes default\n const senditMode = runConfig.publish?.sendit || false;\n // sendit flag overrides skipUserConfirmation - if sendit is true, skip confirmation\n const skipUserConfirmation = senditMode || runConfig.publish?.skipUserConfirmation || false;\n\n await GitHub.waitForPullRequestChecks(pr!.number, {\n timeout,\n skipUserConfirmation\n });\n }\n\n const mergeMethod = runConfig.publish?.mergeMethod || 'squash';\n if (isDryRun) {\n logger.info(`DRY RUN: Would merge PR #${pr!.number} using ${mergeMethod} method`);\n } else {\n await GitHub.mergePullRequest(pr!.number, mergeMethod);\n }\n\n logger.info(isDryRun ? 'DRY RUN: Would checkout main branch...' : 'Checking out main branch...');\n await runWithDryRunSupport('git checkout main', isDryRun);\n await runWithDryRunSupport('git pull origin main', isDryRun);\n\n // Now create and push the tag on the main branch\n logger.info(isDryRun ? 'DRY RUN: Would create release tag...' : 'Creating release tag...');\n if (isDryRun) {\n logger.info('DRY RUN: Would read package.json version and create git tag');\n } else {\n const packageJsonContents = await storage.readFile('package.json', 'utf-8');\n const { version } = JSON.parse(packageJsonContents);\n const tagName = `v${version}`;\n await run(`git tag ${tagName}`);\n await run(`git push origin ${tagName}`);\n logger.info(`Created and pushed tag: ${tagName}`);\n }\n\n logger.info(isDryRun ? 'DRY RUN: Would create GitHub release...' : 'Creating GitHub release...');\n let tagName: string;\n if (isDryRun) {\n logger.info('DRY RUN: Would read package.json version and create GitHub release');\n tagName = 'v1.0.0'; // Mock version for dry run\n } else {\n const packageJsonContents = await storage.readFile('package.json', 'utf-8');\n const { version } = JSON.parse(packageJsonContents);\n tagName = `v${version}`;\n\n 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 await GitHub.createRelease(tagName, releaseTitle, releaseNotesContent);\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(isDryRun ? 'DRY RUN: Would wait for release workflows...' : 'Waiting for release workflows...');\n if (isDryRun) {\n logger.info('DRY RUN: Would monitor GitHub Actions workflows triggered by release');\n } else {\n const workflowTimeout = runConfig.publish?.releaseWorkflowsTimeout || 600000; // 10 minutes default\n const senditMode = runConfig.publish?.sendit || false;\n const skipUserConfirmation = senditMode || runConfig.publish?.skipUserConfirmation || false;\n\n // Get workflow names - either from config or auto-detect\n let workflowNames = runConfig.publish?.releaseWorkflowNames;\n\n if (!workflowNames || workflowNames.length === 0) {\n logger.info('No specific workflow names configured, auto-detecting workflows triggered by release events...');\n try {\n workflowNames = await GitHub.getWorkflowsTriggeredByRelease();\n if (workflowNames.length === 0) {\n logger.info('No workflows found that are triggered by release events.');\n } else {\n logger.info(`Auto-detected release workflows: ${workflowNames.join(', ')}`);\n }\n } catch (error: any) {\n logger.warn(`Failed to auto-detect release workflows: ${error.message}`);\n workflowNames = undefined; // Fall back to monitoring all workflows\n }\n }\n\n await GitHub.waitForReleaseWorkflows(tagName, {\n timeout: workflowTimeout,\n workflowNames,\n skipUserConfirmation\n });\n }\n } else {\n logger.verbose(isDryRun ? 'DRY RUN: Would skip waiting for release workflows (disabled in config).' : 'Skipping waiting for release workflows (disabled in config).');\n }\n\n logger.info(isDryRun ? 'DRY RUN: Would create new release branch...' : 'Creating new release branch...');\n if (isDryRun) {\n logger.info('DRY RUN: Would create next release branch (e.g., release/1.0.1) and push to origin');\n } else {\n const packageJsonContents = await storage.readFile('package.json', 'utf-8');\n const { version } = JSON.parse(packageJsonContents);\n const nextVersion = incrementPatchVersion(version);\n const newBranchName = `release/${nextVersion}`;\n await run(`git checkout -b ${newBranchName}`);\n await run(`git push -u origin ${newBranchName}`);\n logger.info(`Branch ${newBranchName} created and pushed to origin.`);\n }\n\n logger.info(isDryRun ? 'DRY RUN: Preparation would be complete.' : 'Preparation complete.');\n } finally {\n // Restore linked packages (if enabled)\n const shouldLink = runConfig.publish?.linkWorkspacePackages !== false; // default to true\n if (shouldLink) {\n logger.verbose(isDryRun ? 'DRY RUN: Would restore linked packages...' : 'Restoring linked packages...');\n await Link.execute(runConfig);\n } else {\n logger.verbose(isDryRun ? 'DRY RUN: Would skip restore linked packages (disabled in config).' : 'Skipping restore linked packages (disabled in config).');\n }\n }\n};\n"],"names":["scanNpmrcForEnvVars","storage","npmrcPath","path","join","process","cwd","envVars","exists","npmrcContent","readFile","envVarMatches","match","varName","replace","includes","push","error","validateEnvironmentVariables","requiredEnvVars","isDryRun","logger","getLogger","missingEnvVars","envVar","env","length","warn","Error","runPrechecks","runConfig","createStorage","log","info","dryRun","run","stdout","trim","currentBranch","GitHub","startsWith","packageJsonPath","packageJson","packageJsonContents","JSON","parse","scripts","prepublishOnly","verbose","coreRequiredEnvVars","publish","npmrcEnvVars","allRequiredEnvVars","Set","execute","shouldUnlink","unlinkWorkspacePackages","Unlink","pr","branchName","html_url","updatePatterns","dependencyUpdatePatterns","patternsArg","runWithDryRunSupport","Commit","Diff","currentVersion","version","newVersion","incrementPatchVersion","writeFile","stringify","releaseSummary","Release","outputDirectory","DEFAULT_OUTPUT_DIRECTORY","ensureDirectory","releaseNotesPath","getOutputPath","releaseTitlePath","body","title","number","labels","commitTitle","timeout","checksTimeout","senditMode","sendit","skipUserConfirmation","mergeMethod","tagName","releaseNotesContent","releaseTitle","waitForWorkflows","waitForReleaseWorkflows","workflowTimeout","releaseWorkflowsTimeout","workflowNames","releaseWorkflowNames","message","undefined","nextVersion","newBranchName","shouldLink","linkWorkspacePackages","Link"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"publish.js","sources":["../../src/commands/publish.ts"],"sourcesContent":["import path from 'path';\nimport * as Commit from './commit';\nimport * as Diff from '../content/diff';\nimport * as Release from './release';\nimport * as Link from './link';\nimport * as Unlink from './unlink';\nimport { getLogger } from '../logging';\nimport { Config, PullRequest } from '../types';\nimport { run, runWithDryRunSupport } from '../util/child';\nimport * as GitHub from '../util/github';\nimport { create as createStorage } from '../util/storage';\nimport { incrementPatchVersion, getOutputPath } from '../util/general';\nimport { DEFAULT_OUTPUT_DIRECTORY } from '../constants';\n\nconst scanNpmrcForEnvVars = async (storage: any): Promise<string[]> => {\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 // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (error) {\n // If we can't read .npmrc, that's okay - just continue\n }\n }\n\n return envVars;\n};\n\nconst validateEnvironmentVariables = (requiredEnvVars: string[], isDryRun: boolean): void => {\n const logger = getLogger();\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(`DRY RUN: Missing required environment variables: ${missingEnvVars.join(', ')}`);\n } else {\n logger.error(`Missing required environment variables: ${missingEnvVars.join(', ')}`);\n throw new Error(`Missing required environment variables: ${missingEnvVars.join(', ')}. Please set these environment variables before running publish.`);\n }\n }\n};\n\nconst runPrechecks = async (runConfig: Config): Promise<void> => {\n const logger = getLogger();\n const storage = createStorage({ log: logger.info });\n const isDryRun = runConfig.dryRun || false;\n\n logger.info(isDryRun ? 'DRY RUN: Running prechecks...' : 'Running prechecks...');\n\n // Check if we're in a git repository\n try {\n if (isDryRun) {\n logger.info('DRY RUN: Would check git repository with: git rev-parse --git-dir');\n } else {\n await run('git rev-parse --git-dir');\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (error) {\n if (!isDryRun) {\n throw new Error('Not in a git repository. Please run this command from within a git repository.');\n }\n }\n\n // Check for uncommitted changes\n logger.info(isDryRun ? 'DRY RUN: Would check for uncommitted changes...' : 'Checking for uncommitted changes...');\n try {\n if (isDryRun) {\n logger.info('DRY RUN: 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 // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (error) {\n if (!isDryRun) {\n throw new Error('Failed to check git status. Please ensure you are in a valid git repository.');\n }\n }\n\n // Check if we're on a release branch\n logger.info(isDryRun ? 'DRY RUN: Would check current branch...' : 'Checking current branch...');\n if (isDryRun) {\n logger.info('DRY RUN: Would verify current branch is a release branch (starts with \"release/\")');\n } else {\n const currentBranch = await GitHub.getCurrentBranchName();\n if (!currentBranch.startsWith('release/')) {\n throw new Error(`Current branch '${currentBranch}' is not a release branch. Please switch to a release branch (e.g., release/1.0.0) before running publish.`);\n }\n }\n\n // Check if prepublishOnly script exists in package.json\n logger.info(isDryRun ? 'DRY RUN: Would check for prepublishOnly script...' : '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('DRY RUN: 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 packageJson = JSON.parse(packageJsonContents);\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\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('DRY RUN: 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('DRY RUN: prepublishOnly script is required in package.json but was not found.');\n }\n }\n }\n\n // Check required environment variables\n logger.verbose(isDryRun ? 'DRY RUN: Would check required environment variables...' : '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(`${isDryRun ? 'DRY RUN: ' : ''}Required environment variables: ${allRequiredEnvVars.join(', ')}`);\n validateEnvironmentVariables(allRequiredEnvVars, isDryRun);\n } else {\n logger.verbose(isDryRun ? 'DRY RUN: No required environment variables specified.' : 'No required environment variables specified.');\n }\n\n logger.info(isDryRun ? 'DRY RUN: All prechecks would pass.' : 'All prechecks passed.');\n};\n\nexport const execute = async (runConfig: Config): Promise<void> => {\n const logger = getLogger();\n const storage = createStorage({ log: logger.info });\n const isDryRun = runConfig.dryRun || false;\n\n // Run prechecks before starting any work\n await runPrechecks(runConfig);\n\n logger.info(isDryRun ? 'DRY RUN: Would start release process...' : 'Starting release process...');\n\n try {\n // Unlink all workspace packages before starting (if enabled)\n const shouldUnlink = runConfig.publish?.unlinkWorkspacePackages !== false; // default to true\n if (shouldUnlink) {\n logger.verbose(isDryRun ? 'DRY RUN: Would unlink workspace packages...' : 'Unlinking workspace packages...');\n await Unlink.execute(runConfig);\n } else {\n logger.verbose(isDryRun ? 'DRY RUN: Would skip unlink workspace packages (disabled in config).' : 'Skipping unlink workspace packages (disabled in config).');\n }\n\n let pr: PullRequest | null = null;\n\n if (isDryRun) {\n logger.info('DRY RUN: Would check for existing pull request');\n logger.info('DRY RUN: 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(`${isDryRun ? 'DRY RUN: ' : ''}Found existing pull request for branch: ${pr.html_url}`);\n } else {\n logger.info(isDryRun ? 'DRY RUN: No open pull request found, would start new release publishing process...' : 'No open pull request found, starting new release publishing process...');\n // 1. Prepare for release\n logger.verbose(isDryRun ? 'DRY RUN: Would prepare for release: switching from workspace to remote dependencies.' : 'Preparing for release: switching from workspace to remote dependencies.');\n\n logger.verbose(isDryRun ? 'DRY RUN: Would update dependencies to latest versions from registry' : 'Updating dependencies to latest versions from registry');\n const updatePatterns = runConfig.publish?.dependencyUpdatePatterns;\n if (updatePatterns && updatePatterns.length > 0) {\n logger.verbose(`${isDryRun ? 'DRY RUN: ' : ''}Updating dependencies matching patterns: ${updatePatterns.join(', ')}`);\n const patternsArg = updatePatterns.join(' ');\n await runWithDryRunSupport(`pnpm update --latest ${patternsArg}`, isDryRun);\n } else {\n logger.verbose(isDryRun ? 'DRY RUN: No dependency update patterns specified, would update all dependencies' : 'No dependency update patterns specified, updating all dependencies');\n await runWithDryRunSupport('pnpm update --latest', isDryRun);\n }\n\n logger.verbose(isDryRun ? 'DRY RUN: Would stage changes for release commit' : 'Staging changes for release commit');\n await runWithDryRunSupport('git add package.json pnpm-lock.yaml', isDryRun);\n\n logger.info(isDryRun ? 'DRY RUN: Would run prepublishOnly script...' : 'Running prepublishOnly script...');\n await runWithDryRunSupport('pnpm run prepublishOnly', isDryRun);\n\n logger.verbose(isDryRun ? 'DRY RUN: Would check for staged changes...' : 'Checking for staged changes...');\n if (isDryRun) {\n logger.verbose('DRY RUN: Assuming staged changes exist for demo purposes');\n logger.verbose('DRY RUN: Would create commit...');\n await Commit.execute(runConfig);\n } else {\n if (await Diff.hasStagedChanges()) {\n logger.verbose('Staged changes found, creating commit...');\n await Commit.execute(runConfig);\n } else {\n logger.verbose('No changes to commit, skipping commit.');\n }\n }\n\n logger.info(isDryRun ? 'DRY RUN: Would bump version...' : 'Bumping version...');\n // Manually increment version without creating a tag\n if (isDryRun) {\n logger.info('DRY RUN: Would manually increment patch version in package.json and commit');\n } else {\n const packageJsonContents = await storage.readFile('package.json', 'utf-8');\n const packageJson = JSON.parse(packageJsonContents);\n const currentVersion = packageJson.version;\n const newVersion = incrementPatchVersion(currentVersion);\n packageJson.version = newVersion;\n await storage.writeFile('package.json', JSON.stringify(packageJson, null, 2) + '\\n', 'utf-8');\n logger.info(`Version bumped from ${currentVersion} to ${newVersion}`);\n\n // Stage and commit the version change\n await run('git add package.json');\n await run(`git commit -m \"chore: bump version to ${newVersion}\"`);\n logger.info(`Version change committed: ${newVersion}`);\n }\n\n logger.info(isDryRun ? 'DRY RUN: Would generate release notes...' : 'Generating release notes...');\n const releaseSummary = await Release.execute(runConfig);\n\n if (isDryRun) {\n logger.info('DRY RUN: 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(isDryRun ? 'DRY RUN: Would push to origin...' : 'Pushing to origin...');\n await runWithDryRunSupport('git push', isDryRun);\n\n logger.info(isDryRun ? 'DRY RUN: Would create pull request...' : 'Creating pull request...');\n if (isDryRun) {\n logger.info('DRY RUN: Would get commit title and create PR with GitHub API');\n pr = { number: 123, html_url: 'https://github.com/mock/repo/pull/123', labels: [] } as PullRequest;\n } else {\n const { stdout: commitTitle } = await run('git log -1 --pretty=%B');\n pr = await GitHub.createPullRequest(commitTitle, 'Automated release PR.', await GitHub.getCurrentBranchName());\n if (!pr) {\n throw new Error('Failed to create pull request.');\n }\n logger.info(`Pull request created: ${pr.html_url}`);\n }\n }\n\n logger.info(`${isDryRun ? 'DRY RUN: Would wait for' : 'Waiting for'} PR #${pr!.number} checks to complete...`);\n if (!isDryRun) {\n // Configure timeout and user confirmation behavior\n const timeout = runConfig.publish?.checksTimeout || 300000; // 5 minutes default\n const senditMode = runConfig.publish?.sendit || false;\n // sendit flag overrides skipUserConfirmation - if sendit is true, skip confirmation\n const skipUserConfirmation = senditMode || runConfig.publish?.skipUserConfirmation || false;\n\n await GitHub.waitForPullRequestChecks(pr!.number, {\n timeout,\n skipUserConfirmation\n });\n }\n\n const mergeMethod = runConfig.publish?.mergeMethod || 'squash';\n if (isDryRun) {\n logger.info(`DRY RUN: Would merge PR #${pr!.number} using ${mergeMethod} method`);\n } else {\n await GitHub.mergePullRequest(pr!.number, mergeMethod);\n }\n\n logger.info(isDryRun ? 'DRY RUN: Would checkout main branch...' : 'Checking out main branch...');\n await runWithDryRunSupport('git checkout main', isDryRun);\n await runWithDryRunSupport('git pull origin main', isDryRun);\n\n // Now create and push the tag on the main branch\n logger.info(isDryRun ? 'DRY RUN: Would create release tag...' : 'Creating release tag...');\n if (isDryRun) {\n logger.info('DRY RUN: Would read package.json version and create git tag');\n } else {\n const packageJsonContents = await storage.readFile('package.json', 'utf-8');\n const { version } = JSON.parse(packageJsonContents);\n const tagName = `v${version}`;\n\n // Check if tag already exists locally\n try {\n const { stdout } = await run(`git tag -l ${tagName}`);\n if (stdout.trim() === tagName) {\n logger.info(`Tag ${tagName} already exists locally, skipping tag creation`);\n } else {\n await run(`git tag ${tagName}`);\n logger.info(`Created local tag: ${tagName}`);\n }\n } catch (error) {\n // If git tag -l fails, create the tag anyway\n await run(`git tag ${tagName}`);\n logger.info(`Created local tag: ${tagName}`);\n }\n\n // Check if tag exists on remote before pushing\n try {\n const { stdout } = await run(`git ls-remote origin refs/tags/${tagName}`);\n if (stdout.trim()) {\n logger.info(`Tag ${tagName} already exists on remote, skipping push`);\n } else {\n await run(`git push origin ${tagName}`);\n logger.info(`Pushed tag to remote: ${tagName}`);\n }\n } catch (error) {\n // If ls-remote fails, try to push anyway (might be a new remote)\n try {\n await run(`git push origin ${tagName}`);\n logger.info(`Pushed tag to remote: ${tagName}`);\n } 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\n logger.info(isDryRun ? 'DRY RUN: Would create GitHub release...' : 'Creating GitHub release...');\n let tagName: string;\n if (isDryRun) {\n logger.info('DRY RUN: Would read package.json version and create GitHub release');\n tagName = 'v1.0.0'; // Mock version for dry run\n } else {\n const packageJsonContents = await storage.readFile('package.json', 'utf-8');\n const { version } = JSON.parse(packageJsonContents);\n tagName = `v${version}`;\n\n 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 await GitHub.createRelease(tagName, releaseTitle, releaseNotesContent);\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(isDryRun ? 'DRY RUN: Would wait for release workflows...' : 'Waiting for release workflows...');\n if (isDryRun) {\n logger.info('DRY RUN: Would monitor GitHub Actions workflows triggered by release');\n } else {\n const workflowTimeout = runConfig.publish?.releaseWorkflowsTimeout || 600000; // 10 minutes default\n const senditMode = runConfig.publish?.sendit || false;\n const skipUserConfirmation = senditMode || runConfig.publish?.skipUserConfirmation || false;\n\n // Get workflow names - either from config or auto-detect\n let workflowNames = runConfig.publish?.releaseWorkflowNames;\n\n if (!workflowNames || workflowNames.length === 0) {\n logger.info('No specific workflow names configured, auto-detecting workflows triggered by release events...');\n try {\n workflowNames = await GitHub.getWorkflowsTriggeredByRelease();\n if (workflowNames.length === 0) {\n logger.info('No workflows found that are triggered by release events.');\n } else {\n logger.info(`Auto-detected release workflows: ${workflowNames.join(', ')}`);\n }\n } catch (error: any) {\n logger.warn(`Failed to auto-detect release workflows: ${error.message}`);\n workflowNames = undefined; // Fall back to monitoring all workflows\n }\n }\n\n await GitHub.waitForReleaseWorkflows(tagName, {\n timeout: workflowTimeout,\n workflowNames,\n skipUserConfirmation\n });\n }\n } else {\n logger.verbose(isDryRun ? 'DRY RUN: Would skip waiting for release workflows (disabled in config).' : 'Skipping waiting for release workflows (disabled in config).');\n }\n\n logger.info(isDryRun ? 'DRY RUN: Would create new release branch...' : 'Creating new release branch...');\n if (isDryRun) {\n logger.info('DRY RUN: Would create next release branch (e.g., release/1.0.1) and push to origin');\n } else {\n const packageJsonContents = await storage.readFile('package.json', 'utf-8');\n const { version } = JSON.parse(packageJsonContents);\n const nextVersion = incrementPatchVersion(version);\n const newBranchName = `release/${nextVersion}`;\n await run(`git checkout -b ${newBranchName}`);\n await run(`git push -u origin ${newBranchName}`);\n logger.info(`Branch ${newBranchName} created and pushed to origin.`);\n }\n\n logger.info(isDryRun ? 'DRY RUN: Preparation would be complete.' : 'Preparation complete.');\n } finally {\n // Restore linked packages (if enabled)\n const shouldLink = runConfig.publish?.linkWorkspacePackages !== false; // default to true\n if (shouldLink) {\n logger.verbose(isDryRun ? 'DRY RUN: Would restore linked packages...' : 'Restoring linked packages...');\n await Link.execute(runConfig);\n } else {\n logger.verbose(isDryRun ? 'DRY RUN: Would skip restore linked packages (disabled in config).' : 'Skipping restore linked packages (disabled in config).');\n }\n }\n};\n"],"names":["scanNpmrcForEnvVars","storage","npmrcPath","path","join","process","cwd","envVars","exists","npmrcContent","readFile","envVarMatches","match","varName","replace","includes","push","error","validateEnvironmentVariables","requiredEnvVars","isDryRun","logger","getLogger","missingEnvVars","envVar","env","length","warn","Error","runPrechecks","runConfig","createStorage","log","info","dryRun","run","stdout","trim","currentBranch","GitHub","startsWith","packageJsonPath","packageJson","packageJsonContents","JSON","parse","scripts","prepublishOnly","verbose","coreRequiredEnvVars","publish","npmrcEnvVars","allRequiredEnvVars","Set","execute","shouldUnlink","unlinkWorkspacePackages","Unlink","pr","branchName","html_url","updatePatterns","dependencyUpdatePatterns","patternsArg","runWithDryRunSupport","Commit","Diff","currentVersion","version","newVersion","incrementPatchVersion","writeFile","stringify","releaseSummary","Release","outputDirectory","DEFAULT_OUTPUT_DIRECTORY","ensureDirectory","releaseNotesPath","getOutputPath","releaseTitlePath","body","title","number","labels","commitTitle","timeout","checksTimeout","senditMode","sendit","skipUserConfirmation","mergeMethod","tagName","pushError","message","releaseNotesContent","releaseTitle","waitForWorkflows","waitForReleaseWorkflows","workflowTimeout","releaseWorkflowsTimeout","workflowNames","releaseWorkflowNames","undefined","nextVersion","newBranchName","shouldLink","linkWorkspacePackages","Link"],"mappings":"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"}
|
package/dist/constants.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import os from 'os';
|
|
2
2
|
import path from 'path';
|
|
3
3
|
|
|
4
|
-
const VERSION = '0.0.
|
|
4
|
+
const VERSION = '0.0.32 (HEAD/13adb4e T:v0.0.32 2025-07-25 14:43:36 -0700) linux x64 v22.17.1';
|
|
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
|
@@ -215,6 +215,23 @@ const createRelease = async (tagName, title, notes)=>{
|
|
|
215
215
|
});
|
|
216
216
|
logger.info(`Release ${tagName} created.`);
|
|
217
217
|
};
|
|
218
|
+
const getReleaseByTagName = async (tagName)=>{
|
|
219
|
+
const octokit = getOctokit();
|
|
220
|
+
const { owner, repo } = await getRepoDetails();
|
|
221
|
+
const logger = getLogger();
|
|
222
|
+
try {
|
|
223
|
+
const response = await octokit.repos.getReleaseByTag({
|
|
224
|
+
owner,
|
|
225
|
+
repo,
|
|
226
|
+
tag: tagName
|
|
227
|
+
});
|
|
228
|
+
logger.debug(`Found release for tag ${tagName}: created at ${response.data.created_at}`);
|
|
229
|
+
return response.data;
|
|
230
|
+
} catch (error) {
|
|
231
|
+
logger.debug(`Failed to get release for tag ${tagName}: ${error.message}`);
|
|
232
|
+
throw error;
|
|
233
|
+
}
|
|
234
|
+
};
|
|
218
235
|
const getOpenIssues = async (limit = 20)=>{
|
|
219
236
|
const octokit = getOctokit();
|
|
220
237
|
const { owner, repo } = await getRepoDetails();
|
|
@@ -274,6 +291,18 @@ const getWorkflowRunsTriggeredByRelease = async (tagName, workflowNames)=>{
|
|
|
274
291
|
const logger = getLogger();
|
|
275
292
|
try {
|
|
276
293
|
logger.debug(`Fetching workflow runs triggered by release ${tagName}...`);
|
|
294
|
+
// Get release information to filter by creation time and commit SHA
|
|
295
|
+
let releaseInfo;
|
|
296
|
+
try {
|
|
297
|
+
releaseInfo = await getReleaseByTagName(tagName);
|
|
298
|
+
} catch (error) {
|
|
299
|
+
logger.warn(`Could not get release info for ${tagName}: ${error.message}. Will use fallback filtering.`);
|
|
300
|
+
}
|
|
301
|
+
const releaseCreatedAt = releaseInfo === null || releaseInfo === void 0 ? void 0 : releaseInfo.created_at;
|
|
302
|
+
const releaseCommitSha = releaseInfo === null || releaseInfo === void 0 ? void 0 : releaseInfo.target_commitish;
|
|
303
|
+
if (releaseCreatedAt) {
|
|
304
|
+
logger.debug(`Release ${tagName} was created at ${releaseCreatedAt}, filtering workflows created after this time`);
|
|
305
|
+
}
|
|
277
306
|
// Get all workflows
|
|
278
307
|
const workflowsResponse = await octokit.actions.listRepoWorkflows({
|
|
279
308
|
owner,
|
|
@@ -296,21 +325,64 @@ const getWorkflowRunsTriggeredByRelease = async (tagName, workflowNames)=>{
|
|
|
296
325
|
owner,
|
|
297
326
|
repo,
|
|
298
327
|
workflow_id: workflow.id,
|
|
299
|
-
per_page:
|
|
328
|
+
per_page: 20
|
|
300
329
|
});
|
|
301
|
-
// Filter runs that were triggered by our release
|
|
330
|
+
// Filter runs that were triggered by our specific release
|
|
302
331
|
const releaseRuns = runsResponse.data.workflow_runs.filter((run)=>{
|
|
303
|
-
//
|
|
304
|
-
|
|
332
|
+
// Must be a release event
|
|
333
|
+
if (run.event !== 'release') {
|
|
334
|
+
return false;
|
|
335
|
+
}
|
|
336
|
+
// Must have required data
|
|
337
|
+
if (!run.head_sha || !run.created_at) {
|
|
338
|
+
return false;
|
|
339
|
+
}
|
|
340
|
+
// If we have release info, filter by creation time (only runs created after the release)
|
|
341
|
+
if (releaseCreatedAt) {
|
|
342
|
+
const runCreatedAt = new Date(run.created_at).getTime();
|
|
343
|
+
const releaseCreatedAtTime = new Date(releaseCreatedAt).getTime();
|
|
344
|
+
// Only include runs created after or very close to the release (within 1 minute before for clock skew)
|
|
345
|
+
if (runCreatedAt < releaseCreatedAtTime - 60000) {
|
|
346
|
+
logger.debug(`Excluding workflow run ${run.id} created before release (run: ${run.created_at}, release: ${releaseCreatedAt})`);
|
|
347
|
+
return false;
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
// If we have the release commit SHA, prefer runs that match it
|
|
351
|
+
if (releaseCommitSha && run.head_sha !== releaseCommitSha) {
|
|
352
|
+
logger.debug(`Workflow run ${run.id} has different commit SHA (run: ${run.head_sha}, release: ${releaseCommitSha})`);
|
|
353
|
+
// Don't exclude entirely, as the release might trigger workflows on different commits
|
|
354
|
+
// but this helps us prioritize the right runs
|
|
355
|
+
}
|
|
356
|
+
return true;
|
|
305
357
|
});
|
|
306
358
|
allRuns.push(...releaseRuns);
|
|
359
|
+
if (releaseRuns.length > 0) {
|
|
360
|
+
logger.debug(`Found ${releaseRuns.length} relevant workflow runs for ${workflow.name}`);
|
|
361
|
+
}
|
|
307
362
|
} catch (error) {
|
|
308
363
|
logger.warn(`Failed to get runs for workflow ${workflow.name}: ${error.message}`);
|
|
309
364
|
}
|
|
310
365
|
}
|
|
311
|
-
// Sort by creation time (newest first) and
|
|
312
|
-
allRuns.sort((a, b)=>
|
|
313
|
-
|
|
366
|
+
// Sort by creation time (newest first) and prioritize runs with matching commit SHA
|
|
367
|
+
allRuns.sort((a, b)=>{
|
|
368
|
+
// First, prioritize runs with matching commit SHA if we have release info
|
|
369
|
+
if (releaseCommitSha) {
|
|
370
|
+
const aMatches = a.head_sha === releaseCommitSha;
|
|
371
|
+
const bMatches = b.head_sha === releaseCommitSha;
|
|
372
|
+
if (aMatches && !bMatches) return -1;
|
|
373
|
+
if (!aMatches && bMatches) return 1;
|
|
374
|
+
}
|
|
375
|
+
// Then sort by creation time (newest first)
|
|
376
|
+
return new Date(b.created_at).getTime() - new Date(a.created_at).getTime();
|
|
377
|
+
});
|
|
378
|
+
logger.debug(`Found ${allRuns.length} workflow runs triggered by release ${tagName}`);
|
|
379
|
+
if (allRuns.length > 0 && releaseCreatedAt) {
|
|
380
|
+
logger.debug(`Workflow runs created after release ${tagName}:`);
|
|
381
|
+
allRuns.forEach((run)=>{
|
|
382
|
+
var _run_head_sha;
|
|
383
|
+
logger.debug(`- ${run.name}: created ${run.created_at}, commit ${(_run_head_sha = run.head_sha) === null || _run_head_sha === void 0 ? void 0 : _run_head_sha.substring(0, 7)}`);
|
|
384
|
+
});
|
|
385
|
+
}
|
|
314
386
|
return allRuns;
|
|
315
387
|
} catch (error) {
|
|
316
388
|
logger.warn(`Failed to fetch workflow runs: ${error.message}`);
|
|
@@ -480,5 +552,5 @@ const isTriggeredByRelease = (workflowContent, workflowName)=>{
|
|
|
480
552
|
}
|
|
481
553
|
};
|
|
482
554
|
|
|
483
|
-
export { createIssue, createPullRequest, createRelease, findOpenPullRequestByHeadRef, getCurrentBranchName, getOctokit, getOpenIssues, getRepoDetails, getWorkflowRunsTriggeredByRelease, getWorkflowsTriggeredByRelease, mergePullRequest, waitForPullRequestChecks, waitForReleaseWorkflows };
|
|
555
|
+
export { createIssue, createPullRequest, createRelease, findOpenPullRequestByHeadRef, getCurrentBranchName, getOctokit, getOpenIssues, getReleaseByTagName, getRepoDetails, getWorkflowRunsTriggeredByRelease, getWorkflowsTriggeredByRelease, mergePullRequest, waitForPullRequestChecks, waitForReleaseWorkflows };
|
|
484
556
|
//# sourceMappingURL=github.js.map
|
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\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 logger.error(`PR #${prNumber} has failing checks:`);\n for (const check of failingChecks) {\n logger.error(`- ${check.name}: ${check.conclusion}`);\n }\n throw new Error(`PR #${prNumber} checks failed.`);\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 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 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: 10, // Check last 10 runs\n });\n\n // Filter runs that were triggered by our release\n const releaseRuns = runsResponse.data.workflow_runs.filter(run => {\n // Check if the run was triggered by a release event and matches our tag\n return run.event === 'release' && run.head_sha && run.created_at;\n });\n\n allRuns.push(...releaseRuns);\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) and take the most recent ones\n allRuns.sort((a, b) => new Date(b.created_at).getTime() - new Date(a.created_at).getTime());\n\n logger.debug(`Found ${allRuns.length} workflow runs triggered by release events`);\n return allRuns;\n } catch (error: any) {\n logger.warn(`Failed to fetch workflow runs: ${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 a bit for workflows to start (GitHub can take a moment to trigger them)\n logger.debug('Waiting 30 seconds for workflows to start...');\n await delay(30000);\n\n const startTime = Date.now();\n let workflowRuns: any[] = [];\n let consecutiveNoWorkflowsCount = 0;\n const maxConsecutiveNoWorkflows = 6; // 1 minute of checking 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 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 // 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 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","check","name","allChecksCompleted","every","completedCount","mergePullRequest","mergeMethod","headBranch","merge","merge_method","git","deleteRef","createRelease","tagName","notes","repos","tag_name","getOpenIssues","limit","issues","listForRepo","per_page","Math","min","sort","direction","issue","pull_request","issueStrings","slice","map","labels","label","join","number","created_at","updated_at","substring","createIssue","html_url","getWorkflowRunsTriggeredByRelease","workflowNames","workflowsResponse","relevantWorkflows","workflow","allRuns","runsResponse","listWorkflowRuns","workflow_id","id","releaseRuns","workflow_runs","event","head_sha","push","a","b","getTime","waitForReleaseWorkflows","workflowRuns","consecutiveNoWorkflowsCount","maxConsecutiveNoWorkflows","proceedWithoutWorkflows","failingRuns","allWorkflowsCompleted","successfulRuns","runningCount","queuedCount","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 logger.error(`PR #${prNumber} has failing checks:`);\n for (const check of failingChecks) {\n logger.error(`- ${check.name}: ${check.conclusion}`);\n }\n throw new Error(`PR #${prNumber} checks failed.`);\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 try {\n releaseInfo = await getReleaseByTagName(tagName);\n } catch (error: any) {\n logger.warn(`Could not get release info for ${tagName}: ${error.message}. Will use fallback filtering.`);\n }\n\n const releaseCreatedAt = releaseInfo?.created_at;\n const releaseCommitSha = releaseInfo?.target_commitish;\n\n if (releaseCreatedAt) {\n logger.debug(`Release ${tagName} was created at ${releaseCreatedAt}, filtering workflows created after this time`);\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: 20, // Check more runs to account for filtering\n });\n\n // Filter runs that were triggered by our specific release\n const releaseRuns = runsResponse.data.workflow_runs.filter(run => {\n // Must be a release event\n if (run.event !== 'release') {\n return false;\n }\n\n // Must have required data\n if (!run.head_sha || !run.created_at) {\n return false;\n }\n\n // If we have release info, filter by creation time (only runs 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 // Only include runs created after or very close to the release (within 1 minute before for clock skew)\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 }\n\n // If we have the release commit SHA, prefer runs that match it\n if (releaseCommitSha && run.head_sha !== releaseCommitSha) {\n logger.debug(`Workflow run ${run.id} has different commit SHA (run: ${run.head_sha}, release: ${releaseCommitSha})`);\n // Don't exclude entirely, as the release might trigger workflows on different commits\n // but this helps us prioritize the right runs\n }\n\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 }\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) and prioritize runs with matching commit SHA\n allRuns.sort((a, b) => {\n // First, prioritize runs with matching commit SHA if we have release info\n if (releaseCommitSha) {\n const aMatches = a.head_sha === releaseCommitSha;\n const bMatches = b.head_sha === releaseCommitSha;\n if (aMatches && !bMatches) return -1;\n if (!aMatches && bMatches) return 1;\n }\n\n // Then sort by creation time (newest first)\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\n if (allRuns.length > 0 && releaseCreatedAt) {\n logger.debug(`Workflow runs created after release ${tagName}:`);\n allRuns.forEach(run => {\n logger.debug(`- ${run.name}: created ${run.created_at}, commit ${run.head_sha?.substring(0, 7)}`);\n });\n }\n\n return allRuns;\n } catch (error: any) {\n logger.warn(`Failed to fetch workflow runs: ${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 a bit for workflows to start (GitHub can take a moment to trigger them)\n logger.debug('Waiting 30 seconds for workflows to start...');\n await delay(30000);\n\n const startTime = Date.now();\n let workflowRuns: any[] = [];\n let consecutiveNoWorkflowsCount = 0;\n const maxConsecutiveNoWorkflows = 6; // 1 minute of checking 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 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 // 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 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","check","name","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","map","labels","label","join","number","updated_at","substring","createIssue","html_url","getWorkflowRunsTriggeredByRelease","workflowNames","releaseInfo","releaseCreatedAt","releaseCommitSha","target_commitish","workflowsResponse","relevantWorkflows","workflow","allRuns","runsResponse","listWorkflowRuns","workflow_id","id","releaseRuns","workflow_runs","event","head_sha","runCreatedAt","getTime","releaseCreatedAtTime","push","a","b","aMatches","bMatches","forEach","waitForReleaseWorkflows","workflowRuns","consecutiveNoWorkflowsCount","maxConsecutiveNoWorkflows","proceedWithoutWorkflows","failingRuns","allWorkflowsCompleted","successfulRuns","runningCount","queuedCount","getWorkflowsTriggeredByRelease","releaseWorkflows","workflowPath","path","contentResponse","getContent","type","content","Buffer","from","toString","isTriggeredByRelease","workflowContent","workflowName","releaseEventPattern","onReleasePattern","tagPushPattern","isTriggered","test"],"mappings":"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"}
|