summaryrefslogtreecommitdiff
path: root/packages/backend/scripts
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 /packages/backend/scripts
parentMerge pull request from GHSA-fpvp-74wx-35p3 (diff)
downloadsharkey-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.js15
-rw-r--r--packages/backend/scripts/dev.mjs61
-rw-r--r--packages/backend/scripts/generate_api_json.js13
-rw-r--r--packages/backend/scripts/watch.mjs28
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,
+ });
+})();