From 7ef5493414451d3e813ea6f8e8d33a4704f5492b Mon Sep 17 00:00:00 2001 From: Elliot DeNolf Date: Wed, 24 Apr 2024 21:04:12 -0400 Subject: [PATCH] ci(scripts): misc improvements --- scripts/lib/getPackageDetails.ts | 24 +++++++++++++--------- scripts/lib/getPackageRegistryVersions.ts | 25 +++++++++++++++-------- scripts/release.ts | 6 ++++-- 3 files changed, 35 insertions(+), 20 deletions(-) diff --git a/scripts/lib/getPackageDetails.ts b/scripts/lib/getPackageDetails.ts index 5845b05275..dbf6530064 100644 --- a/scripts/lib/getPackageDetails.ts +++ b/scripts/lib/getPackageDetails.ts @@ -1,17 +1,18 @@ import fse from 'fs-extra' -import path from 'path' +import globby from 'globby' +import path, { dirname } from 'path' import { fileURLToPath } from 'url' const __filename = fileURLToPath(import.meta.url) const __dirname = path.dirname(__filename) -const packagesDir = path.resolve(__dirname, '../../packages') +const projectRoot = path.resolve(__dirname, '../../') export type PackageDetails = { /** Name in package.json / npm registry */ name: string - /** Full path to package */ - packagePath: string + /** Full path to package relative to project root */ + packagePath: `packages/${string}` /** Short name is the directory name */ shortName: string /** Version in package.json */ @@ -19,20 +20,23 @@ export type PackageDetails = { } export const getPackageDetails = async (packages: string[]): Promise => { - const packageDirs = fse.readdirSync(packagesDir).filter((d) => packages.includes(d)) + const packageJsons = await globby('packages/*/package.json', { + cwd: projectRoot, + absolute: true, + }) const packageDetails = await Promise.all( - packageDirs.map(async (dirName) => { - const packageJson = await fse.readJson(`${packagesDir}/${dirName}/package.json`) + packageJsons.map(async (packageJsonPath) => { + const packageJson = await fse.readJson(packageJsonPath) const isPublic = packageJson.private !== true if (!isPublic) return null return { name: packageJson.name as string, - packagePath: path.resolve(packagesDir, dirName), - shortName: dirName, + packagePath: path.relative(projectRoot, dirname(packageJsonPath)), + shortName: path.dirname(packageJsonPath), version: packageJson.version, - } + } as PackageDetails }), ) diff --git a/scripts/lib/getPackageRegistryVersions.ts b/scripts/lib/getPackageRegistryVersions.ts index a69c402aa4..7f06677072 100644 --- a/scripts/lib/getPackageRegistryVersions.ts +++ b/scripts/lib/getPackageRegistryVersions.ts @@ -1,7 +1,10 @@ import chalk from 'chalk' +import pLimit from 'p-limit' import { getPackageDetails } from './getPackageDetails.js' +const npmRequestLimit = pLimit(40) + const packages = [ 'payload', 'translations', @@ -37,15 +40,21 @@ const packages = [ export const getPackageRegistryVersions = async (): Promise => { const packageDetails = await getPackageDetails(packages) - await Promise.all( - packageDetails.map(async (pkg) => { - // Get published version from npm - const json = await fetch(`https://registry.npmjs.org/${pkg.name}`).then((res) => res.json()) - const { latest = 'N/A', beta = 'N/A', alpha = 'N/A' } = json['dist-tags'] ?? {} - const msg = `${chalk.bold(pkg.name.padEnd(32))} latest: ${latest?.padEnd(16)} beta: ${beta?.padEnd(16)} alpha: ${alpha}` - console.log(msg) - }), + const results = await Promise.all( + packageDetails.map(async (pkg) => + npmRequestLimit(async () => { + // Get published version from npm + const json = await fetch(`https://registry.npmjs.org/${pkg.name}`).then((res) => res.json()) + const { latest = 'N/A', beta = 'N/A', alpha = 'N/A' } = json['dist-tags'] ?? {} + const msg = `${chalk.bold(pkg.name.padEnd(32))} latest: ${latest?.padEnd( + 16, + )} beta: ${beta?.padEnd(16)} alpha: ${alpha}` + return msg + }), + ), ) + + console.log(results.join('\n')) } if (import.meta.url === new URL(import.meta.url).href) { diff --git a/scripts/release.ts b/scripts/release.ts index acfa63d4c5..b9274edf87 100755 --- a/scripts/release.ts +++ b/scripts/release.ts @@ -17,7 +17,7 @@ import type { PackageDetails } from './lib/getPackageDetails.js' import { getPackageDetails } from './lib/getPackageDetails.js' import { updateChangelog } from './utils/updateChangelog.js' -const npmPublishLimit = pLimit(5) +const npmPublishLimit = pLimit(10) // Update this list with any packages to publish const packageWhitelist = [ @@ -142,7 +142,9 @@ async function main() { console.log(chalk.bold.yellow(` Tag: ${tag}\n`)) console.log(chalk.bold.green(` Changes (${packageDetails.length} packages):\n`)) console.log( - `${packageDetails.map((p) => ` - ${p.name.padEnd(32)} ${p.version} => ${chalk.green(nextReleaseVersion)}`).join('\n')}\n`, + `${packageDetails + .map((p) => ` - ${p.name.padEnd(32)} ${p.version} => ${chalk.green(nextReleaseVersion)}`) + .join('\n')}\n`, ) const confirmPublish = await confirm('Are you sure you want to create these versions?')