From 9219d5e1c088f4835c974804fec65ecd9c659496 Mon Sep 17 00:00:00 2001 From: Nate Moore Date: Sat, 19 Mar 2022 12:33:24 -0500 Subject: [PATCH] Release bot (#2836) * fix(ci): improve release-bot message by dynamically generating packageMap * fix(ci): update changeset to refresh lockfile after version --- .github/workflows/ci.yml | 2 ++ scripts/notify/index.js | 30 +++++++++++++++--------------- 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 84a7828d56..6d1d3c305d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -224,6 +224,8 @@ jobs: id: changesets uses: changesets/action@v1 with: + # Note: pnpm install after versioning is necessary to refresh lockfile + version: pnpm exec changeset version && pnpm install publish: pnpm exec changeset publish commit: '[ci] release' title: '[ci] release' diff --git a/scripts/notify/index.js b/scripts/notify/index.js index e9bb693002..c8e8a242bb 100755 --- a/scripts/notify/index.js +++ b/scripts/notify/index.js @@ -1,3 +1,7 @@ +import { globby as glob } from 'globby'; +import { fileURLToPath } from 'node:url'; +import { readFile } from 'node:fs/promises' + const baseUrl = new URL('https://github.com/withastro/astro/blob/main/'); const emojis = ['🎉', '🥳', '🚀', '🧑‍🚀', '🎊', '🏆', '✅', '🤩', '🤖', '🙌']; @@ -50,23 +54,19 @@ function singularlize(text) { return text.replace(/(\[([^\]]+)\])/gm, (_, _full, match) => `${match}`); } -const packageMap = new Map([ - ['astro', './packages/astro'], - ['@astrojs/parser', './packages/astro-parser'], - ['@astrojs/prism', './packages/astro-prism'], - ['create-astro', './packages/create-astro'], - ['@astrojs/markdown-remark', './packages/markdown/remark'], - ['@astrojs/renderer-lit', './packages/renderers/renderer-lit'], - ['@astrojs/renderer-preact', './packages/renderers/renderer-preact'], - ['@astrojs/renderer-react', './packages/renderers/renderer-react'], - ['@astrojs/renderer-solid', './packages/renderers/renderer-solid'], - ['@astrojs/renderer-solid', './packages/renderers/renderer-solid'], - ['@astrojs/renderer-svelte', './packages/renderers/renderer-svelte'], - ['@astrojs/renderer-vue', './packages/renderers/renderer-vue'], - ['@astrojs/webapi', './packages/webapi'], -]); +const packageMap = new Map(); +async function generatePackageMap() { + const packageRoot = new URL('../../packages/', import.meta.url); + const packages = await glob(['*/package.json', '*/*/package.json'], { cwd: fileURLToPath(packageRoot) }) + await Promise.all(packages.map(async (pkg) => { + const pkgFile = fileURLToPath(new URL(pkg, packageRoot)); + const content = await readFile(pkgFile).then(res => JSON.parse(res.toString())) + packageMap.set(content.name, `./packages/${pkg.replace('/package.json', '')}`); + })) +} async function run() { + await generatePackageMap(); const releases = process.argv.slice(2)[0]; const data = JSON.parse(releases); const packages = await Promise.all(