ci(scripts): misc improvements

This commit is contained in:
Elliot DeNolf
2024-04-24 21:04:12 -04:00
parent 6f6c1435c7
commit 7ef5493414
3 changed files with 35 additions and 20 deletions

View File

@@ -1,17 +1,18 @@
import fse from 'fs-extra' import fse from 'fs-extra'
import path from 'path' import globby from 'globby'
import path, { dirname } from 'path'
import { fileURLToPath } from 'url' import { fileURLToPath } from 'url'
const __filename = fileURLToPath(import.meta.url) const __filename = fileURLToPath(import.meta.url)
const __dirname = path.dirname(__filename) const __dirname = path.dirname(__filename)
const packagesDir = path.resolve(__dirname, '../../packages') const projectRoot = path.resolve(__dirname, '../../')
export type PackageDetails = { export type PackageDetails = {
/** Name in package.json / npm registry */ /** Name in package.json / npm registry */
name: string name: string
/** Full path to package */ /** Full path to package relative to project root */
packagePath: string packagePath: `packages/${string}`
/** Short name is the directory name */ /** Short name is the directory name */
shortName: string shortName: string
/** Version in package.json */ /** Version in package.json */
@@ -19,20 +20,23 @@ export type PackageDetails = {
} }
export const getPackageDetails = async (packages: string[]): Promise<PackageDetails[]> => { export const getPackageDetails = async (packages: string[]): Promise<PackageDetails[]> => {
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( const packageDetails = await Promise.all(
packageDirs.map(async (dirName) => { packageJsons.map(async (packageJsonPath) => {
const packageJson = await fse.readJson(`${packagesDir}/${dirName}/package.json`) const packageJson = await fse.readJson(packageJsonPath)
const isPublic = packageJson.private !== true const isPublic = packageJson.private !== true
if (!isPublic) return null if (!isPublic) return null
return { return {
name: packageJson.name as string, name: packageJson.name as string,
packagePath: path.resolve(packagesDir, dirName), packagePath: path.relative(projectRoot, dirname(packageJsonPath)),
shortName: dirName, shortName: path.dirname(packageJsonPath),
version: packageJson.version, version: packageJson.version,
} } as PackageDetails
}), }),
) )

View File

@@ -1,7 +1,10 @@
import chalk from 'chalk' import chalk from 'chalk'
import pLimit from 'p-limit'
import { getPackageDetails } from './getPackageDetails.js' import { getPackageDetails } from './getPackageDetails.js'
const npmRequestLimit = pLimit(40)
const packages = [ const packages = [
'payload', 'payload',
'translations', 'translations',
@@ -37,15 +40,21 @@ const packages = [
export const getPackageRegistryVersions = async (): Promise<void> => { export const getPackageRegistryVersions = async (): Promise<void> => {
const packageDetails = await getPackageDetails(packages) const packageDetails = await getPackageDetails(packages)
await Promise.all( const results = await Promise.all(
packageDetails.map(async (pkg) => { packageDetails.map(async (pkg) =>
// Get published version from npm npmRequestLimit(async () => {
const json = await fetch(`https://registry.npmjs.org/${pkg.name}`).then((res) => res.json()) // Get published version from npm
const { latest = 'N/A', beta = 'N/A', alpha = 'N/A' } = json['dist-tags'] ?? {} const json = await fetch(`https://registry.npmjs.org/${pkg.name}`).then((res) => res.json())
const msg = `${chalk.bold(pkg.name.padEnd(32))} latest: ${latest?.padEnd(16)} beta: ${beta?.padEnd(16)} alpha: ${alpha}` const { latest = 'N/A', beta = 'N/A', alpha = 'N/A' } = json['dist-tags'] ?? {}
console.log(msg) 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) { if (import.meta.url === new URL(import.meta.url).href) {

View File

@@ -17,7 +17,7 @@ import type { PackageDetails } from './lib/getPackageDetails.js'
import { getPackageDetails } from './lib/getPackageDetails.js' import { getPackageDetails } from './lib/getPackageDetails.js'
import { updateChangelog } from './utils/updateChangelog.js' import { updateChangelog } from './utils/updateChangelog.js'
const npmPublishLimit = pLimit(5) const npmPublishLimit = pLimit(10)
// Update this list with any packages to publish // Update this list with any packages to publish
const packageWhitelist = [ const packageWhitelist = [
@@ -142,7 +142,9 @@ async function main() {
console.log(chalk.bold.yellow(` Tag: ${tag}\n`)) console.log(chalk.bold.yellow(` Tag: ${tag}\n`))
console.log(chalk.bold.green(` Changes (${packageDetails.length} packages):\n`)) console.log(chalk.bold.green(` Changes (${packageDetails.length} packages):\n`))
console.log( 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?') const confirmPublish = await confirm('Are you sure you want to create these versions?')