Skip to content

Commit 1517d58

Browse files
committed
Update review generation logic.
1 parent 760fc63 commit 1517d58

1 file changed

Lines changed: 41 additions & 47 deletions

File tree

scripts/api_md_workflow/create_api_review_pr.js

Lines changed: 41 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -355,56 +355,52 @@ function writeBytes(filePath, bytes) {
355355
fs.writeFileSync(filePath, bytes);
356356
}
357357

358-
function discardTemporaryWorktreeChanges() {
359-
const status = git(["status", "--porcelain"], { capture: true }).stdout.trim();
360-
if (!status) {
361-
return;
362-
}
363-
364-
const marker = `api-md-workflow-temp-${Date.now()}`;
365-
git(["stash", "push", "--include-untracked", "-m", marker]);
366-
367-
const topEntry = git(["stash", "list", "-n", "1", "--format=%gd %s"], {
368-
capture: true,
369-
}).stdout.trim();
370-
371-
if (!topEntry.includes(marker)) {
372-
throw new Error("ERROR: failed to identify temporary stash entry while cleaning generated files.");
373-
}
374-
375-
git(["stash", "drop", "stash@{0}"]);
376-
}
377-
378-
function generateApiBytesForPackage({
358+
function generateApiBytesForRef({
379359
adapter,
380360
repoRoot,
381361
packageName,
382362
packageDir,
383363
runtimeExecutable,
364+
ref,
384365
refLabel,
385366
logger,
386367
}) {
387-
adapter.generateApiForPackage({
388-
repoRoot,
389-
packageName,
390-
runtimeExecutable,
391-
logger,
392-
refLabel,
393-
});
368+
const packageRelative = packageRelDir(packageDir);
369+
logInfo(`Overlaying package source from ${refLabel} (${ref})`);
394370

395-
const outputPath = apiMdPath(packageDir);
396-
if (!fs.existsSync(outputPath)) {
397-
throw new Error(`ERROR: did not produce ${outputPath}`);
398-
}
371+
// Overlay just the package directory from the target ref onto the working tree
372+
git(["checkout", ref, "--", packageRelative]);
399373

400-
const result = { apiMd: fs.readFileSync(outputPath), metadata: null };
374+
try {
375+
const version = adapter.readVersion(packageDir);
401376

402-
const metaPath = metadataPath(packageDir);
403-
if (fs.existsSync(metaPath)) {
404-
result.metadata = fs.readFileSync(metaPath);
405-
}
377+
adapter.generateApiForPackage({
378+
repoRoot,
379+
packageName,
380+
runtimeExecutable,
381+
logger,
382+
refLabel,
383+
});
406384

407-
return result;
385+
const outputPath = apiMdPath(packageDir);
386+
if (!fs.existsSync(outputPath)) {
387+
throw new Error(`ERROR: did not produce ${outputPath}`);
388+
}
389+
390+
const result = { apiMd: fs.readFileSync(outputPath), metadata: null, version };
391+
392+
const metaPath = metadataPath(packageDir);
393+
if (fs.existsSync(metaPath)) {
394+
result.metadata = fs.readFileSync(metaPath);
395+
}
396+
397+
return result;
398+
} finally {
399+
// Restore the package directory to the current branch state
400+
git(["checkout", "HEAD", "--", packageRelative]);
401+
// Clean any untracked files that the generation may have left behind
402+
run("git", ["clean", "-fd", "--", packageRelative], { check: false });
403+
}
408404
}
409405

410406
function main() {
@@ -433,32 +429,30 @@ function main() {
433429
let baseResult = null;
434430
if (args.base) {
435431
logInfo(`\n=== Capturing baseline API.md from tag ${args.base} ===`);
436-
git(["checkout", "--detach", args.base]);
437-
baseResult = generateApiBytesForPackage({
432+
baseResult = generateApiBytesForRef({
438433
adapter,
439434
repoRoot: REPO_ROOT,
440435
packageName: args.packageName,
441436
packageDir,
442437
runtimeExecutable: args.runtimeExecutable,
443-
refLabel: currentBranchOrSha(),
438+
ref: args.base,
439+
refLabel: args.base,
444440
logger,
445441
});
446-
discardTemporaryWorktreeChanges();
447442
}
448443

449444
logInfo(`\n=== Capturing target API.md from ${targetRef} ===`);
450-
git(["checkout", "--detach", targetRef]);
451-
const targetVersion = adapter.readVersion(packageDir);
452-
const targetResult = generateApiBytesForPackage({
445+
const targetResult = generateApiBytesForRef({
453446
adapter,
454447
repoRoot: REPO_ROOT,
455448
packageName: args.packageName,
456449
packageDir,
457450
runtimeExecutable: args.runtimeExecutable,
458-
refLabel: currentBranchOrSha(),
451+
ref: targetRef,
452+
refLabel: targetRef,
459453
logger,
460454
});
461-
discardTemporaryWorktreeChanges();
455+
const targetVersion = targetResult.version;
462456

463457
const baseBranch = `base_${args.packageName}_${baseVersion}`;
464458
const reviewBranch = `review_${args.packageName}_${targetVersion}`;

0 commit comments

Comments
 (0)