diff --git a/scripts/run-node.mjs b/scripts/run-node.mjs index e9454f4d9c5..04c6f8fb2d4 100644 --- a/scripts/run-node.mjs +++ b/scripts/run-node.mjs @@ -211,10 +211,10 @@ const shouldBuild = (deps) => { const currentHead = resolveGitHead(deps); if (currentHead && !stamp.head) { - return hasSourceMtimeChanged(stamp.mtime, deps); + return true; } if (currentHead && stamp.head && currentHead !== stamp.head) { - return hasSourceMtimeChanged(stamp.mtime, deps); + return true; } if (currentHead) { const dirty = hasDirtySourceTree(deps); diff --git a/src/infra/run-node.test.ts b/src/infra/run-node.test.ts index 9651cdabca8..7dee99a2135 100644 --- a/src/infra/run-node.test.ts +++ b/src/infra/run-node.test.ts @@ -319,6 +319,27 @@ describe("run-node script", () => { }); }); + it("rebuilds when git HEAD changes even if source mtimes do not exceed the old build stamp", async () => { + await withTempDir(async (tmp) => { + await setupTrackedProject(tmp, { + files: { + [ROOT_SRC]: "export const value = 1;\n", + }, + oldPaths: [ROOT_SRC, ROOT_TSCONFIG, ROOT_PACKAGE], + buildPaths: [DIST_ENTRY, BUILD_STAMP], + }); + + const { spawnCalls, spawn, spawnSync } = createSpawnRecorder({ + gitHead: "def456\n", + gitStatus: "", + }); + const exitCode = await runStatusCommand({ tmp, spawn, spawnSync }); + + expect(exitCode).toBe(0); + expect(spawnCalls).toEqual([expectedBuildSpawn(), statusCommandSpawn()]); + }); + }); + it("skips rebuilding when extension package metadata is newer than the build stamp", async () => { await withTempDir(async (tmp) => { await setupTrackedProject(tmp, {