ci(scripts): misc improvements
This commit is contained in:
@@ -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
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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?')
|
||||||
|
|||||||
Reference in New Issue
Block a user