From 1913d063b987cdd5957de756575b0849743103e1 Mon Sep 17 00:00:00 2001 From: Il Harper Date: Thu, 7 Mar 2024 19:51:55 +0800 Subject: [PATCH] ci: add build summary --- .github/workflows/build.yml | 6 ++++++ scripts/build.cts | 35 +++++++++++++++++++++++++++++++---- 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 3550ae7..e22ec21 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -54,6 +54,12 @@ jobs: name: engine-chronocat-event-${{ github.sha }} path: build/dist/engine-chronocat-event + - name: Upload Build Metadata + uses: actions/upload-artifact@v3 + with: + name: meta-${{ github.sha }} + path: build/meta + - name: Publish LiteLoaderQQNT-Plugin-Chronocat if: startsWith(github.ref, 'refs/tags/v') uses: peaceiris/actions-gh-pages@v3 diff --git a/scripts/build.cts b/scripts/build.cts index 6881f9a..befc871 100644 --- a/scripts/build.cts +++ b/scripts/build.cts @@ -1,12 +1,18 @@ import { analyzeMetafile, context } from 'esbuild' -import { join } from 'node:path' +import { appendFile, mkdir, writeFile } from 'node:fs/promises' +import { join, resolve } from 'node:path' import { cwd } from 'node:process' const wd = cwd() void (async () => { // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-var-requires - const { version } = require(join(wd, 'package.json')) + const packageJson = require(join(wd, 'package.json')) as { + name: string + version: string + } + + const name = packageJson.name.slice(11) const ctx = await context({ entryPoints: [join(wd, 'src/index.ts')], @@ -24,7 +30,7 @@ void (async () => { tsconfig: join(wd, 'tsconfig.json'), define: { - __DEFINE_CHRONO_VERSION__: `'${version}'`, + __DEFINE_CHRONO_VERSION__: `'${packageJson.version}'`, }, external: ['electron'], @@ -36,6 +42,27 @@ void (async () => { color: true, }) - console.log(await analyzeMetafile((await ctx.rebuild()).metafile)) + const result = await ctx.rebuild() + + const metafile = result.metafile + const metaLog = await analyzeMetafile(metafile) + const metaDir = resolve(__dirname, '../build/meta') + const metaFilePath = join(metaDir, `${name}.meta.json`) + + await mkdir(metaDir, { + recursive: true, + }) + + await writeFile(metaFilePath, JSON.stringify(metafile)) + + if ('GITHUB_ACTIONS' in process.env) { + // CI + const summary = `## ${name} 的构建一览\n\n\`\`\`txt\n${metaLog}\n\n\`\`\`\n\n要获得旭日图或火焰图,下载 \`meta-xxx.zip\` 后上传至 [Bundle Size Analyzer](https://esbuild.github.io/analyze/)。\n\n` + await appendFile(process.env['GITHUB_STEP_SUMMARY'] as string, summary) + } else { + // Local build + console.log(metaLog) + } + await ctx.dispose() })()