Skip to content

Commit 73a4c3d

Browse files
committed
Document pre-commit verification
1 parent bcad25a commit 73a4c3d

4 files changed

Lines changed: 64 additions & 26 deletions

File tree

AGENTS.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,12 @@ Use this file for repo-wide instructions. Use package-local `AGENTS.md` files fo
1515

1616
- Use `pnpm` for commands run inside this repo.
1717
- Use `npm` or multiple package-manager examples in user-facing content.
18+
19+
## Pre-Commit Verification
20+
21+
- `pnpm --recursive exec tsc --noEmit`
22+
- `pnpm lint`
23+
- Package-specific tests for changed packages
24+
- `pnpm --filter @prisma/cli test`
25+
- `pnpm --filter @prisma/compute test`
26+
- If verification fails because work is intentionally incomplete, include the failing command and reason in the commit message.

packages/cli/tests/resolve-package-version.test.ts

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,18 +20,24 @@ const scriptPath = path.join(repoRoot, "scripts/resolve-package-version.mjs");
2020

2121
describe("resolve package version", () => {
2222
it("computes the first beta when npm latest is missing or still legacy 2.x", () => {
23-
expect(resolveNextBetaVersion({ baseVersion: "3.0.0", latest: "" })).toBe("3.0.0-beta.0");
24-
expect(resolveNextBetaVersion({ baseVersion: "3.0.0", latest: "2.20.1" })).toBe("3.0.0-beta.0");
23+
expect(resolveNextBetaVersion({ baseVersion: "3.0.0", latest: "" })).toBe(
24+
"3.0.0-beta.0",
25+
);
26+
expect(
27+
resolveNextBetaVersion({ baseVersion: "3.0.0", latest: "2.20.1" }),
28+
).toBe("3.0.0-beta.0");
2529
});
2630

2731
it("increments the beta number from the current npm latest", () => {
28-
expect(resolveNextBetaVersion({ baseVersion: "3.0.0", latest: "3.0.0-beta.0" })).toBe("3.0.0-beta.1");
32+
expect(
33+
resolveNextBetaVersion({ baseVersion: "3.0.0", latest: "3.0.0-beta.0" }),
34+
).toBe("3.0.0-beta.1");
2935
});
3036

3137
it("fails when npm latest is outside the supported beta line", () => {
32-
expect(() => resolveNextBetaVersion({ baseVersion: "3.0.0", latest: "3.0.0" })).toThrow(
33-
"Cannot compute the next beta from npm latest (3.0.0).",
34-
);
38+
expect(() =>
39+
resolveNextBetaVersion({ baseVersion: "3.0.0", latest: "3.0.0" }),
40+
).toThrow("Cannot compute the next beta from npm latest (3.0.0).");
3541
});
3642

3743
it("computes a unique dev build version", () => {

scripts/resolve-package-version.d.mts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,6 @@ export declare function resolveNextBetaVersion(options: {
1515
latest?: string | null;
1616
}): string;
1717

18-
export declare function resolvePackageReleaseBaseVersion(packageDir: string): string;
18+
export declare function resolvePackageReleaseBaseVersion(
19+
packageDir: string,
20+
): string;

scripts/resolve-package-version.mjs

Lines changed: 40 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
#!/usr/bin/env node
22

3-
import path from "node:path";
43
import { readFileSync } from "node:fs";
4+
import path from "node:path";
55
import { fileURLToPath } from "node:url";
66

7+
const PACKAGE_VERSION_PATTERN = /^(\d+\.\d+\.\d+)(?:-.+)?$/;
8+
const VERSION_CORE_PATTERN = /^(\d+)\.(\d+)\.(\d+)(?:-.+)?$/;
9+
710
export function resolveDevVersion(options) {
811
const baseVersion = requireValue(options.baseVersion, "baseVersion");
912
const runNumber = requireValue(options.runNumber, "runNumber");
@@ -29,7 +32,9 @@ export function resolveNextBetaVersion(options) {
2932
return `${baseVersion}-beta.0`;
3033
}
3134

32-
const betaMatch = normalizedLatest.match(new RegExp(`^${escapeRegExp(baseVersion)}-beta\\.(\\d+)$`));
35+
const betaMatch = normalizedLatest.match(
36+
new RegExp(`^${escapeRegExp(baseVersion)}-beta\\.(\\d+)$`),
37+
);
3338
if (betaMatch) {
3439
const nextNumber = Number(betaMatch[1]) + 1;
3540
return `${baseVersion}-beta.${nextNumber}`;
@@ -43,11 +48,16 @@ export function resolveNextBetaVersion(options) {
4348
export function resolvePackageReleaseBaseVersion(packageDir) {
4449
const manifestPath = path.join(getRepoRoot(), packageDir, "package.json");
4550
const manifest = JSON.parse(readFileSync(manifestPath, "utf8"));
46-
const version = requireValue(manifest.version, `${packageDir} package.json version`);
47-
const match = version.match(/^(\d+\.\d+\.\d+)(?:-.+)?$/);
51+
const version = requireValue(
52+
manifest.version,
53+
`${packageDir} package.json version`,
54+
);
55+
const match = version.match(PACKAGE_VERSION_PATTERN);
4856

4957
if (!match) {
50-
throw new Error(`Cannot derive release base from ${packageDir} package version (${version}).`);
58+
throw new Error(
59+
`Cannot derive release base from ${packageDir} package version (${version}).`,
60+
);
5161
}
5262

5363
return match[1];
@@ -79,7 +89,7 @@ function isOlderReleaseLine(latest, baseVersion) {
7989
}
8090

8191
function parseVersionCore(version) {
82-
const match = version.match(/^(\d+)\.(\d+)\.(\d+)(?:-.+)?$/);
92+
const match = version.match(VERSION_CORE_PATTERN);
8393

8494
if (!match) {
8595
return undefined;
@@ -139,34 +149,45 @@ function main() {
139149
const baseVersion = resolvePackageReleaseBaseVersion(packageDir);
140150

141151
if (command === "dev") {
142-
process.stdout.write(`version=${resolveDevVersion({
143-
baseVersion,
144-
runNumber: options["run-number"],
145-
runAttempt: options["run-attempt"],
146-
})}\n`);
152+
process.stdout.write(
153+
`version=${resolveDevVersion({
154+
baseVersion,
155+
runNumber: options["run-number"],
156+
runAttempt: options["run-attempt"],
157+
})}\n`,
158+
);
147159
return;
148160
}
149161

150162
if (command === "pr") {
151-
process.stdout.write(`version=${resolvePrVersion({
152-
baseVersion,
153-
prNumber: options["pr-number"],
154-
sha: options.sha,
155-
})}\n`);
163+
process.stdout.write(
164+
`version=${resolvePrVersion({
165+
baseVersion,
166+
prNumber: options["pr-number"],
167+
sha: options.sha,
168+
})}\n`,
169+
);
156170
return;
157171
}
158172

159173
if (command === "next-beta") {
160174
const latest = options.latest ?? "";
161175
process.stdout.write(`latest=${latest}\n`);
162-
process.stdout.write(`version=${resolveNextBetaVersion({ baseVersion, latest })}\n`);
176+
process.stdout.write(
177+
`version=${resolveNextBetaVersion({ baseVersion, latest })}\n`,
178+
);
163179
return;
164180
}
165181

166-
throw new Error("Usage: resolve-package-version.mjs <dev|pr|next-beta> [--package-dir <path>] [options]");
182+
throw new Error(
183+
"Usage: resolve-package-version.mjs <dev|pr|next-beta> [--package-dir <path>] [options]",
184+
);
167185
}
168186

169-
if (process.argv[1] && fileURLToPath(import.meta.url) === path.resolve(process.argv[1])) {
187+
if (
188+
process.argv[1] &&
189+
fileURLToPath(import.meta.url) === path.resolve(process.argv[1])
190+
) {
170191
try {
171192
main();
172193
} catch (error) {

0 commit comments

Comments
 (0)