Skip to content

Commit e510b68

Browse files
authored
Update release script (#3842)
1 parent 8cfaab2 commit e510b68

File tree

2 files changed

+37
-11
lines changed

2 files changed

+37
-11
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"packageManager": "[email protected]",
44
"displayName": "Prettier - Code formatter",
55
"description": "Code formatter using prettier",
6-
"version": "11.1.0-preview.1",
6+
"version": "12.0.0",
77
"publisher": "prettier",
88
"author": "Prettier <@prettiercode>",
99
"galleryBanner": {

scripts/release.mjs

Lines changed: 36 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66
* pnpm release major - Bump major version (11.0.0 -> 12.0.0)
77
* pnpm release minor - Bump minor version (11.0.0 -> 11.1.0)
88
* pnpm release patch - Bump patch version (11.0.0 -> 11.0.1)
9-
* pnpm release preview - Create preview release (11.0.0 -> 11.1.0-preview.1)
9+
* pnpm release preview - Create preview release (11.0.0 -> 11.0.0-preview.1)
10+
* pnpm release preview 12.0.0-preview.1 - Create preview with specific version
1011
*/
1112
import fs from "fs/promises";
1213
import { execSync } from "child_process";
@@ -45,9 +46,9 @@ function formatVersion({ major, minor, patch, prerelease, prereleaseNum }) {
4546
return version;
4647
}
4748

48-
async function updateChangelog(version) {
49+
async function updateChangelog(version, releaseType) {
4950
const CHANGELOG = "CHANGELOG.md";
50-
const isPrerelease = version.includes("-");
51+
const isPrerelease = releaseType === "preview" || version.includes("-");
5152

5253
if (isPrerelease) {
5354
console.log(`Skipping changelog update for prerelease version ${version}`);
@@ -126,11 +127,11 @@ function calculateNewVersion(currentVersion, releaseType) {
126127
prereleaseNum: v.prereleaseNum + 1,
127128
});
128129
}
129-
// Otherwise, bump minor and start preview.1
130+
// Otherwise, keep the same version and add preview.1
130131
return formatVersion({
131132
major: v.major,
132-
minor: v.minor + 1,
133-
patch: 0,
133+
minor: v.minor,
134+
patch: v.patch,
134135
prerelease: "preview",
135136
prereleaseNum: 1,
136137
});
@@ -142,18 +143,42 @@ function calculateNewVersion(currentVersion, releaseType) {
142143

143144
async function main() {
144145
const releaseType = process.argv[2];
146+
const manualVersion = process.argv[3];
145147

146148
if (!releaseType || !RELEASE_TYPES.includes(releaseType)) {
147-
console.error("Usage: pnpm release <major|minor|patch|preview>");
149+
console.error("Usage: pnpm release <major|minor|patch|preview> [version]");
148150
console.error("");
149151
console.error("Examples:");
150152
console.error(" pnpm release major - 11.0.0 -> 12.0.0");
151153
console.error(" pnpm release minor - 11.0.0 -> 11.1.0");
152154
console.error(" pnpm release patch - 11.0.0 -> 11.0.1");
153-
console.error(" pnpm release preview - 11.0.0 -> 11.1.0-preview.1");
155+
console.error(" pnpm release preview - 11.0.0 -> 11.0.0-preview.1");
156+
console.error(
157+
" pnpm release preview 12.0.0-preview.1 - Use specific version",
158+
);
154159
process.exit(1);
155160
}
156161

162+
// Validate manual version if provided
163+
if (manualVersion) {
164+
if (releaseType !== "preview") {
165+
console.error(
166+
"Error: Manual version can only be specified with 'preview' release type.",
167+
);
168+
process.exit(1);
169+
}
170+
// Validate format
171+
try {
172+
parseVersion(manualVersion);
173+
} catch {
174+
console.error(`Error: Invalid version format: ${manualVersion}`);
175+
console.error(
176+
"Expected format: X.Y.Z or X.Y.Z-prerelease.N (e.g., 12.0.0-preview.1)",
177+
);
178+
process.exit(1);
179+
}
180+
}
181+
157182
// Check for uncommitted changes
158183
const status = execQuiet("git status --porcelain");
159184
if (status) {
@@ -177,7 +202,8 @@ async function main() {
177202
// Read current version
178203
const packageJson = JSON.parse(await fs.readFile("package.json", "utf8"));
179204
const currentVersion = packageJson.version;
180-
const newVersion = calculateNewVersion(currentVersion, releaseType);
205+
const newVersion =
206+
manualVersion || calculateNewVersion(currentVersion, releaseType);
181207

182208
console.log(`\nRelease: ${releaseType}`);
183209
console.log(`Current version: ${currentVersion}`);
@@ -192,7 +218,7 @@ async function main() {
192218
console.log("Updated package.json");
193219

194220
// Update changelog (skip for prereleases)
195-
await updateChangelog(newVersion);
221+
await updateChangelog(newVersion, releaseType);
196222

197223
// Stage changes
198224
exec("git add package.json CHANGELOG.md");

0 commit comments

Comments
 (0)