diff options
| author | おさむのひと <46447427+samunohito@users.noreply.github.com> | 2024-04-04 22:25:28 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-04-04 22:25:28 +0900 |
| commit | efa42a1624b0727232263f4ec196e4908ef1e712 (patch) | |
| tree | 2e317815908f82403eece7041f9e89f7ae2cc102 /packages/backend/scripts | |
| parent | Merge pull request from GHSA-fpvp-74wx-35p3 (diff) | |
| download | sharkey-efa42a1624b0727232263f4ec196e4908ef1e712.tar.gz sharkey-efa42a1624b0727232263f4ec196e4908ef1e712.tar.bz2 sharkey-efa42a1624b0727232263f4ec196e4908ef1e712.zip | |
fix(backend): バックエンドのpnpm devによるビルド後にbuild-assetsを行うようにする (#13659)
* moveto scripts
* add scripts/dev.mjs
Diffstat (limited to 'packages/backend/scripts')
| -rw-r--r-- | packages/backend/scripts/check_connect.js | 15 | ||||
| -rw-r--r-- | packages/backend/scripts/dev.mjs | 61 | ||||
| -rw-r--r-- | packages/backend/scripts/generate_api_json.js | 13 | ||||
| -rw-r--r-- | packages/backend/scripts/watch.mjs | 28 |
4 files changed, 117 insertions, 0 deletions
diff --git a/packages/backend/scripts/check_connect.js b/packages/backend/scripts/check_connect.js new file mode 100644 index 0000000000..ba25fd416c --- /dev/null +++ b/packages/backend/scripts/check_connect.js @@ -0,0 +1,15 @@ +/* + * SPDX-FileCopyrightText: syuilo and misskey-project + * SPDX-License-Identifier: AGPL-3.0-only + */ + +import Redis from 'ioredis'; +import { loadConfig } from '../built/config.js'; + +const config = loadConfig(); +const redis = new Redis(config.redis); + +redis.on('connect', () => redis.disconnect()); +redis.on('error', (e) => { + throw e; +}); diff --git a/packages/backend/scripts/dev.mjs b/packages/backend/scripts/dev.mjs new file mode 100644 index 0000000000..2d0de0f916 --- /dev/null +++ b/packages/backend/scripts/dev.mjs @@ -0,0 +1,61 @@ +/* + * SPDX-FileCopyrightText: syuilo and misskey-project + * SPDX-License-Identifier: AGPL-3.0-only + */ + +import { execa, execaNode } from 'execa'; + +/** @type {import('execa').ExecaChildProcess | undefined} */ +let backendProcess; + +async function execBuildAssets() { + await execa('pnpm', ['run', 'build-assets'], { + cwd: '../../', + stdout: process.stdout, + stderr: process.stderr, + }) +} + +function execStart() { + // pnpm run start を呼び出したいが、windowsだとプロセスグループ単位でのkillが出来ずゾンビプロセス化するので + // 上記と同等の動きをするコマンドで子・孫プロセスを作らないようにしたい + backendProcess = execaNode('./built/boot/entry.js', [], { + stdout: process.stdout, + stderr: process.stderr, + env: { + 'NODE_ENV': 'development', + }, + }); +} + +async function killProc() { + if (backendProcess) { + backendProcess.kill(); + await new Promise(resolve => backendProcess.on('exit', resolve)); + backendProcess = undefined; + } +} + +(async () => { + execaNode( + './node_modules/nodemon/bin/nodemon.js', + [ + '-w', 'src', + '-e', 'ts,js,mjs,cjs,json', + '--exec', 'pnpm', 'run', 'build', + ], + { + stdio: [process.stdin, process.stdout, process.stderr, 'ipc'], + }) + .on('message', async (message) => { + if (message.type === 'exit') { + // かならずbuild->build-assetsの順番で呼び出したいので、 + // 少々トリッキーだがnodemonからのexitイベントを利用してbuild-assets->startを行う。 + // pnpm restartをbuildが終わる前にbuild-assetsが動いてしまうので、バラバラに呼び出す必要がある + + await killProc(); + await execBuildAssets(); + execStart(); + } + }) +})(); diff --git a/packages/backend/scripts/generate_api_json.js b/packages/backend/scripts/generate_api_json.js new file mode 100644 index 0000000000..b4769ef801 --- /dev/null +++ b/packages/backend/scripts/generate_api_json.js @@ -0,0 +1,13 @@ +/* + * SPDX-FileCopyrightText: syuilo and misskey-project + * SPDX-License-Identifier: AGPL-3.0-only + */ + +import { loadConfig } from '../built/config.js' +import { genOpenapiSpec } from '../built/server/api/openapi/gen-spec.js' +import { writeFileSync } from "node:fs"; + +const config = loadConfig(); +const spec = genOpenapiSpec(config, true); + +writeFileSync('./built/api.json', JSON.stringify(spec), 'utf-8'); diff --git a/packages/backend/scripts/watch.mjs b/packages/backend/scripts/watch.mjs new file mode 100644 index 0000000000..a0ccea3b16 --- /dev/null +++ b/packages/backend/scripts/watch.mjs @@ -0,0 +1,28 @@ +/* + * SPDX-FileCopyrightText: syuilo and misskey-project + * SPDX-License-Identifier: AGPL-3.0-only + */ + +import { execa } from 'execa'; + +(async () => { + // なぜかchokidarが動かない影響で、watchされない + /* + execa('tsc-alias', ['-w', '-p', 'tsconfig.json'], { + stdout: process.stdout, + stderr: process.stderr, + }); + */ + + setInterval(() => { + execa('tsc-alias', ['-p', 'tsconfig.json'], { + stdout: process.stdout, + stderr: process.stderr, + }); + }, 3000); + + execa('tsc', ['-w', '-p', 'tsconfig.json'], { + stdout: process.stdout, + stderr: process.stderr, + }); +})(); |