Skip to content

Commit d15aca2

Browse files
committed
Simplify
1 parent 03c4986 commit d15aca2

File tree

1 file changed

+30
-69
lines changed

1 file changed

+30
-69
lines changed

scripts/publish.mjs

Lines changed: 30 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -126,61 +126,40 @@ async function writePackageJson(packagePath, packageJson) {
126126
await fs.writeFile(path.join(packagePath, 'package.json'), content);
127127
}
128128

129-
/**
130-
* Update dependencies to point to canary versions
131-
*/
132-
function updateDependenciesToCanary(dependencies, canaryVersions) {
133-
if (!dependencies) {
134-
return dependencies;
135-
}
136-
137-
const updated = { ...dependencies };
138-
139-
for (const [depName, depVersion] of Object.entries(dependencies)) {
140-
if (canaryVersions.has(depName)) {
141-
updated[depName] = canaryVersions.get(depName);
142-
} else if (depVersion === 'workspace:*') {
143-
if (!canaryVersions.has(depName)) {
144-
throw new Error(
145-
`Cannot resolve workspace dependency "${depName}" - no canary version available`,
146-
);
147-
}
148-
updated[depName] = canaryVersions.get(depName);
149-
}
150-
}
151-
152-
return updated;
153-
}
154129

155-
/**
156-
* Publish a package
157-
*/
158-
async function publishPackage(packagePath, tag, options = {}) {
159-
const { provenance = false, dryRun = false } = options;
160-
const provenanceArgs = provenance ? ['--provenance'] : [];
161-
162-
await runCmd({ cwd: packagePath, dryRun })`pnpm publish --tag ${tag} ${provenanceArgs}`;
163-
}
164130

165131
/**
166132
* Publish regular versions that don't exist on npm
167133
*/
168134
async function publishRegularVersions(packages, packageVersionInfo, options = {}) {
169135
console.log('\n📦 Checking for unpublished regular versions...');
170136

171-
// run sequentially to avoid any rate limiting issues
172-
for (const pkg of packages) {
137+
const packagesToPublish = packages.filter(pkg => {
173138
const { currentVersionExists } = packageVersionInfo.get(pkg.name);
174-
175139
if (!currentVersionExists) {
176-
console.log(`📤 Publishing ${pkg.name}@${pkg.version}...`);
177-
// eslint-disable-next-line no-await-in-loop
178-
await publishPackage(pkg.path, 'latest', options);
179-
console.log(`✅ Published ${pkg.name}@${pkg.version}`);
140+
console.log(`📤 Will publish ${pkg.name}@${pkg.version}`);
141+
return true;
180142
} else {
181143
console.log(`⏭️ ${pkg.name}@${pkg.version} already exists, skipping`);
144+
return false;
182145
}
146+
});
147+
148+
if (packagesToPublish.length === 0) {
149+
console.log('No packages need to be published');
150+
return;
183151
}
152+
153+
// Use pnpm recursive publish with filters for specific packages
154+
const filterArgs = packagesToPublish.map(pkg => `--filter=${pkg.name}`);
155+
const provenanceArgs = options.provenance ? ['--provenance'] : [];
156+
157+
console.log(`Publishing ${packagesToPublish.length} packages...`);
158+
await runCmd(options)`pnpm -r publish --tag=latest ${filterArgs} ${provenanceArgs}`;
159+
160+
packagesToPublish.forEach(pkg => {
161+
console.log(`✅ Published ${pkg.name}@${pkg.version}`);
162+
});
184163
}
185164

186165
/**
@@ -219,28 +198,6 @@ async function publishCanaryVersions(packages, packageVersionInfo, options = {})
219198
gitSha,
220199
};
221200

222-
// Update dependencies to point to canary versions
223-
if (updatedPackageJson.dependencies) {
224-
updatedPackageJson.dependencies = updateDependenciesToCanary(
225-
originalPackageJson.dependencies,
226-
canaryVersions,
227-
);
228-
}
229-
230-
if (updatedPackageJson.devDependencies) {
231-
updatedPackageJson.devDependencies = updateDependenciesToCanary(
232-
originalPackageJson.devDependencies,
233-
canaryVersions,
234-
);
235-
}
236-
237-
if (updatedPackageJson.peerDependencies) {
238-
updatedPackageJson.peerDependencies = updateDependenciesToCanary(
239-
originalPackageJson.peerDependencies,
240-
canaryVersions,
241-
);
242-
}
243-
244201
await writePackageJson(pkg.path, updatedPackageJson);
245202

246203
console.log(`📝 Updated ${pkg.name} package.json for canary release`);
@@ -254,16 +211,20 @@ async function publishCanaryVersions(packages, packageVersionInfo, options = {})
254211
originalPackageJsons.set(pkg.name, originalPackageJson);
255212
}
256213

257-
// Third pass: publish all canary versions sequentially to avoid rate limits
214+
// Third pass: publish all canary versions using recursive publish
258215
let publishSuccess = false;
259216
try {
260-
for (const pkg of packages) {
217+
const filterArgs = packages.map(pkg => `--filter=${pkg.name}`);
218+
const provenanceArgs = options.provenance ? ['--provenance'] : [];
219+
const gitChecksArgs = ['--no-git-checks'];
220+
221+
console.log('📤 Publishing all canary versions...');
222+
await runCmd(options)`pnpm -r publish --tag=canary ${filterArgs} ${provenanceArgs} ${gitChecksArgs}`;
223+
224+
packages.forEach(pkg => {
261225
const canaryVersion = canaryVersions.get(pkg.name);
262-
console.log(`📤 Publishing ${pkg.name}@${canaryVersion} with canary tag...`);
263-
// eslint-disable-next-line no-await-in-loop
264-
await publishPackage(pkg.path, 'canary', options);
265226
console.log(`✅ Published ${pkg.name}@${canaryVersion}`);
266-
}
227+
});
267228
publishSuccess = true;
268229
} finally {
269230
// Always restore original package.json files in parallel

0 commit comments

Comments
 (0)