summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorおさむのひと <46447427+samunohito@users.noreply.github.com>2024-04-04 22:25:28 +0900
committerGitHub <noreply@github.com>2024-04-04 22:25:28 +0900
commitefa42a1624b0727232263f4ec196e4908ef1e712 (patch)
tree2e317815908f82403eece7041f9e89f7ae2cc102
parentMerge pull request from GHSA-fpvp-74wx-35p3 (diff)
downloadmisskey-efa42a1624b0727232263f4ec196e4908ef1e712.tar.gz
misskey-efa42a1624b0727232263f4ec196e4908ef1e712.tar.bz2
misskey-efa42a1624b0727232263f4ec196e4908ef1e712.zip
fix(backend): バックエンドのpnpm devによるビルド後にbuild-assetsを行うようにする (#13659)
* moveto scripts * add scripts/dev.mjs
-rw-r--r--packages/backend/package.json8
-rw-r--r--packages/backend/scripts/check_connect.js (renamed from packages/backend/check_connect.js)2
-rw-r--r--packages/backend/scripts/dev.mjs61
-rw-r--r--packages/backend/scripts/generate_api_json.js (renamed from packages/backend/generate_api_json.js)4
-rw-r--r--packages/backend/scripts/watch.mjs (renamed from packages/backend/watch.mjs)0
-rw-r--r--pnpm-lock.yaml6
6 files changed, 71 insertions, 10 deletions
diff --git a/packages/backend/package.json b/packages/backend/package.json
index d64fcc3d2a..7f70ae0c97 100644
--- a/packages/backend/package.json
+++ b/packages/backend/package.json
@@ -11,14 +11,14 @@
"start:test": "cross-env NODE_ENV=test node ./built/boot/entry.js",
"migrate": "pnpm typeorm migration:run -d ormconfig.js",
"revert": "pnpm typeorm migration:revert -d ormconfig.js",
- "check:connect": "node ./check_connect.js",
+ "check:connect": "node ./scripts/check_connect.js",
"build": "swc src -d built -D",
"build:test": "swc test-server -d built-test -D --config-file test-server/.swcrc",
"watch:swc": "swc src -d built -D -w",
"build:tsc": "tsc -p tsconfig.json && tsc-alias -p tsconfig.json",
- "watch": "node watch.mjs",
+ "watch": "node ./scripts/watch.mjs",
"restart": "pnpm build && pnpm start",
- "dev": "nodemon -w src -e ts,js,mjs,cjs,json --exec \"cross-env NODE_ENV=development pnpm run restart\"",
+ "dev": "node ./scripts/dev.mjs",
"typecheck": "tsc --noEmit && tsc -p test --noEmit",
"eslint": "eslint --quiet \"src/**/*.ts\"",
"lint": "pnpm typecheck && pnpm eslint",
@@ -31,7 +31,7 @@
"test:e2e": "pnpm build && pnpm build:test && pnpm jest:e2e",
"test-and-coverage": "pnpm jest-and-coverage",
"test-and-coverage:e2e": "pnpm build && pnpm build:test && pnpm jest-and-coverage:e2e",
- "generate-api-json": "pnpm build && node ./generate_api_json.js"
+ "generate-api-json": "pnpm build && node ./scripts/generate_api_json.js"
},
"optionalDependencies": {
"@swc/core-android-arm64": "1.3.11",
diff --git a/packages/backend/check_connect.js b/packages/backend/scripts/check_connect.js
index d88e649c09..ba25fd416c 100644
--- a/packages/backend/check_connect.js
+++ b/packages/backend/scripts/check_connect.js
@@ -4,7 +4,7 @@
*/
import Redis from 'ioredis';
-import { loadConfig } from './built/config.js';
+import { loadConfig } from '../built/config.js';
const config = loadConfig();
const redis = new Redis(config.redis);
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/generate_api_json.js b/packages/backend/scripts/generate_api_json.js
index 602ced1d75..b4769ef801 100644
--- a/packages/backend/generate_api_json.js
+++ b/packages/backend/scripts/generate_api_json.js
@@ -3,8 +3,8 @@
* SPDX-License-Identifier: AGPL-3.0-only
*/
-import { loadConfig } from './built/config.js'
-import { genOpenapiSpec } from './built/server/api/openapi/gen-spec.js'
+import { loadConfig } from '../built/config.js'
+import { genOpenapiSpec } from '../built/server/api/openapi/gen-spec.js'
import { writeFileSync } from "node:fs";
const config = loadConfig();
diff --git a/packages/backend/watch.mjs b/packages/backend/scripts/watch.mjs
index a0ccea3b16..a0ccea3b16 100644
--- a/packages/backend/watch.mjs
+++ b/packages/backend/scripts/watch.mjs
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 46512784c3..91c2a704e2 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -6678,7 +6678,7 @@ packages:
ts-dedent: 2.2.0
type-fest: 2.19.0
vue: 3.4.21(typescript@5.3.3)
- vue-component-type-helpers: 2.0.6
+ vue-component-type-helpers: 2.0.7
transitivePeerDependencies:
- encoding
- supports-color
@@ -19348,8 +19348,8 @@ packages:
resolution: {integrity: sha512-6bnLkn8O0JJyiFSIF0EfCogzeqNXpnjJ0vW/SZzNHfe6sPx30lTtTXlE5TFs2qhJlAtDFybStVNpL73cPe3OMQ==}
dev: true
- /vue-component-type-helpers@2.0.6:
- resolution: {integrity: sha512-qdGXCtoBrwqk1BT6r2+1Wcvl583ZVkuSZ3or7Y1O2w5AvWtlvvxwjGhmz5DdPJS9xqRdDlgTJ/38ehWnEi0tFA==}
+ /vue-component-type-helpers@2.0.7:
+ resolution: {integrity: sha512-7e12Evdll7JcTIocojgnCgwocX4WzIYStGClBQ+QuWPinZo/vQolv2EMq4a3lg16TKfwWafLimG77bxb56UauA==}
dev: true
/vue-demi@0.14.7(vue@3.4.21):