Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | import { execFileSync } from 'child_process';
import { getRepoRoot } from './config.js';
import { dryRunAction, info, error as logError } from './log.js';
function gh(...args) {
return execFileSync('gh', args, {
cwd: getRepoRoot(),
encoding: 'utf8',
}).trim();
}
function ghQuiet(...args) {
return execFileSync('gh', args, {
cwd: getRepoRoot(),
encoding: 'utf8',
stdio: ['pipe', 'pipe', 'pipe'],
}).trim();
}
export function createGithubRelease(
tagName,
{ body, sha, draft = false, prerelease = false, force = false, skipExisting = false } = {},
) {
const exists = releaseExists(tagName);
if (exists && skipExisting && !force) {
info(`Skipping ${tagName}: GitHub release already exists.`);
return { skipped: true };
}
if (force && exists) {
if (dryRunAction(`gh release edit ${tagName} (update existing)`)) {
info(`Release body:\n${body || '(generated from commits)'}`);
return { updated: true };
}
const args = ['release', 'edit', tagName];
if (body) args.push('--notes', body);
if (draft) args.push('--draft');
if (prerelease) args.push('--prerelease');
try {
gh(...args);
} catch (e) {
logError(`Failed to update GitHub release "${tagName}": ${e.message}`);
throw e;
}
return { updated: true };
}
if (dryRunAction(`gh release create ${tagName}${draft ? ' --draft' : ''}${prerelease ? ' --prerelease' : ''}`)) {
info(`Release body:\n${body || '(generated from commits)'}`);
return { created: true };
}
const args = ['release', 'create', tagName];
if (body) args.push('--notes', body);
if (draft) args.push('--draft');
if (prerelease) args.push('--prerelease');
if (sha) args.push('--target', sha);
args.push('--title', tagName);
try {
gh(...args);
} catch (e) {
logError(`Failed to create GitHub release "${tagName}": ${e.message}`);
throw e;
}
return { created: true };
}
export function releaseExists(tagName) {
try {
ghQuiet('release', 'view', tagName);
return true;
} catch {
return false;
}
}
|