enhance(backend): 起動前にconfigをjson化 (#16923)
* enhance(backend): 起動前にconfigをjson化 * fix * fix * fix * fix * fix * fix CHANGELOG.md * fix * Update CHANGELOG.md * get original
This commit is contained in:
parent
8d66cc006a
commit
1facca1ac5
|
|
@ -27,9 +27,9 @@
|
||||||
"build": "pnpm build-pre && pnpm -r build && pnpm build-assets",
|
"build": "pnpm build-pre && pnpm -r build && pnpm build-assets",
|
||||||
"build-storybook": "pnpm --filter frontend build-storybook",
|
"build-storybook": "pnpm --filter frontend build-storybook",
|
||||||
"build-misskey-js-with-types": "pnpm build-pre && pnpm --filter backend... --filter=!misskey-js build && pnpm --filter backend generate-api-json --no-build && ncp packages/backend/built/api.json packages/misskey-js/generator/api.json && pnpm --filter misskey-js update-autogen-code && pnpm --filter misskey-js build && pnpm --filter misskey-js api",
|
"build-misskey-js-with-types": "pnpm build-pre && pnpm --filter backend... --filter=!misskey-js build && pnpm --filter backend generate-api-json --no-build && ncp packages/backend/built/api.json packages/misskey-js/generator/api.json && pnpm --filter misskey-js update-autogen-code && pnpm --filter misskey-js build && pnpm --filter misskey-js api",
|
||||||
"start": "pnpm check:connect && cd packages/backend && node ./built/boot/entry.js",
|
"start": "pnpm check:connect && cd packages/backend && pnpm convert:config && node ./built/boot/entry.js",
|
||||||
"start:inspect": "cd packages/backend && node --inspect ./built/boot/entry.js",
|
"start:inspect": "cd packages/backend && pnpm convert:config && node --inspect ./built/boot/entry.js",
|
||||||
"start:test": "ncp ./.github/misskey/test.yml ./.config/test.yml && cd packages/backend && cross-env NODE_ENV=test node ./built/boot/entry.js",
|
"start:test": "ncp ./.github/misskey/test.yml ./.config/test.yml && cd packages/backend && pnpm convert:config && cross-env NODE_ENV=test node ./built/boot/entry.js",
|
||||||
"cli": "cd packages/backend && pnpm cli",
|
"cli": "cd packages/backend && pnpm cli",
|
||||||
"init": "pnpm migrate",
|
"init": "pnpm migrate",
|
||||||
"migrate": "cd packages/backend && pnpm migrate",
|
"migrate": "cd packages/backend && pnpm migrate",
|
||||||
|
|
|
||||||
|
|
@ -7,36 +7,37 @@
|
||||||
"node": "^22.15.0 || ^24.10.0"
|
"node": "^22.15.0 || ^24.10.0"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "node ./built/boot/entry.js",
|
"start": "pnpm convert:config && node ./built/boot/entry.js",
|
||||||
"start:inspect": "node --inspect ./built/boot/entry.js",
|
"start:inspect": "pnpm convert:config && node --inspect ./built/boot/entry.js",
|
||||||
"start:test": "cross-env NODE_ENV=test node ./built/boot/entry.js",
|
"start:test": "pnpm convert:config && cross-env NODE_ENV=test node ./built/boot/entry.js",
|
||||||
"migrate": "pnpm typeorm migration:run -d ormconfig.js",
|
"migrate": "pnpm convert:config && pnpm typeorm migration:run -d ormconfig.js",
|
||||||
"revert": "pnpm typeorm migration:revert -d ormconfig.js",
|
"revert": "pnpm convert:config && pnpm typeorm migration:revert -d ormconfig.js",
|
||||||
"cli": "node ./built/boot/cli.js",
|
"cli": "pnpm convert:config && node ./built/boot/cli.js",
|
||||||
"check:connect": "node ./scripts/check_connect.js",
|
"check:connect": "pnpm convert:config && node ./scripts/check_connect.js",
|
||||||
|
"convert:config": "node ./scripts/convert_config.js",
|
||||||
"build": "swc src -d built -D --strip-leading-paths",
|
"build": "swc src -d built -D --strip-leading-paths",
|
||||||
"build:test": "swc test-server -d built-test -D --config-file test-server/.swcrc --strip-leading-paths",
|
"build:test": "swc test-server -d built-test -D --config-file test-server/.swcrc --strip-leading-paths",
|
||||||
"watch:swc": "swc src -d built -D -w --strip-leading-paths",
|
"watch:swc": "swc src -d built -D -w --strip-leading-paths",
|
||||||
"build:tsc": "tsc -p tsconfig.json && tsc-alias -p tsconfig.json",
|
"build:tsc": "tsc -p tsconfig.json && tsc-alias -p tsconfig.json",
|
||||||
"watch": "node ./scripts/watch.mjs",
|
"watch": "pnpm convert:config && node ./scripts/watch.mjs",
|
||||||
"restart": "pnpm build && pnpm start",
|
"restart": "pnpm build && pnpm start",
|
||||||
"dev": "node ./scripts/dev.mjs",
|
"dev": "pnpm convert:config && node ./scripts/dev.mjs",
|
||||||
"typecheck": "tsc --noEmit && tsc -p test --noEmit && tsc -p test-federation --noEmit",
|
"typecheck": "tsc --noEmit && tsc -p test --noEmit && tsc -p test-federation --noEmit",
|
||||||
"eslint": "eslint --quiet \"{src,test-federation}/**/*.ts\"",
|
"eslint": "eslint --quiet \"{src,test-federation}/**/*.ts\"",
|
||||||
"lint": "pnpm typecheck && pnpm eslint",
|
"lint": "pnpm typecheck && pnpm eslint",
|
||||||
"jest": "cross-env NODE_ENV=test node ./jest.js --forceExit --config jest.config.unit.cjs",
|
"jest": "pnpm convert:config && cross-env NODE_ENV=test node ./jest.js --forceExit --config jest.config.unit.cjs",
|
||||||
"jest:e2e": "cross-env NODE_ENV=test node ./jest.js --forceExit --config jest.config.e2e.cjs",
|
"jest:e2e": "pnpm convert:config && cross-env NODE_ENV=test node ./jest.js --forceExit --config jest.config.e2e.cjs",
|
||||||
"jest:fed": "node ./jest.js --forceExit --config jest.config.fed.cjs",
|
"jest:fed": "pnpm convert:config && node ./jest.js --forceExit --config jest.config.fed.cjs",
|
||||||
"jest-and-coverage": "cross-env NODE_ENV=test node ./jest.js --coverage --forceExit --config jest.config.unit.cjs",
|
"jest-and-coverage": "pnpm convert:config && cross-env NODE_ENV=test node ./jest.js --coverage --forceExit --config jest.config.unit.cjs",
|
||||||
"jest-and-coverage:e2e": "cross-env NODE_ENV=test node ./jest.js --coverage --forceExit --config jest.config.e2e.cjs",
|
"jest-and-coverage:e2e": "pnpm convert:config && cross-env NODE_ENV=test node ./jest.js --coverage --forceExit --config jest.config.e2e.cjs",
|
||||||
"jest-clear": "cross-env NODE_ENV=test node ./jest.js --clearCache",
|
"jest-clear": "pnpm convert:config && cross-env NODE_ENV=test node ./jest.js --clearCache",
|
||||||
"test": "pnpm jest",
|
"test": "pnpm jest",
|
||||||
"test:e2e": "pnpm build && pnpm build:test && pnpm jest:e2e",
|
"test:e2e": "pnpm build && pnpm build:test && pnpm jest:e2e",
|
||||||
"test:fed": "pnpm jest:fed",
|
"test:fed": "pnpm jest:fed",
|
||||||
"test-and-coverage": "pnpm jest-and-coverage",
|
"test-and-coverage": "pnpm jest-and-coverage",
|
||||||
"test-and-coverage:e2e": "pnpm build && pnpm build:test && pnpm jest-and-coverage:e2e",
|
"test-and-coverage:e2e": "pnpm build && pnpm build:test && pnpm jest-and-coverage:e2e",
|
||||||
"check-migrations": "node scripts/check_migrations_clean.js",
|
"check-migrations": "node scripts/check_migrations_clean.js",
|
||||||
"generate-api-json": "node ./scripts/generate_api_json.js"
|
"generate-api-json": "pnpm convert:config && node ./scripts/generate_api_json.js"
|
||||||
},
|
},
|
||||||
"optionalDependencies": {
|
"optionalDependencies": {
|
||||||
"@swc/core-android-arm64": "1.3.11",
|
"@swc/core-android-arm64": "1.3.11",
|
||||||
|
|
@ -128,7 +129,6 @@
|
||||||
"ip-cidr": "4.0.2",
|
"ip-cidr": "4.0.2",
|
||||||
"ipaddr.js": "2.2.0",
|
"ipaddr.js": "2.2.0",
|
||||||
"is-svg": "6.1.0",
|
"is-svg": "6.1.0",
|
||||||
"js-yaml": "4.1.1",
|
|
||||||
"json5": "2.2.3",
|
"json5": "2.2.3",
|
||||||
"jsonld": "9.0.0",
|
"jsonld": "9.0.0",
|
||||||
"jsrsasign": "11.1.0",
|
"jsrsasign": "11.1.0",
|
||||||
|
|
@ -198,7 +198,6 @@
|
||||||
"@types/fluent-ffmpeg": "2.1.28",
|
"@types/fluent-ffmpeg": "2.1.28",
|
||||||
"@types/http-link-header": "1.0.7",
|
"@types/http-link-header": "1.0.7",
|
||||||
"@types/jest": "29.5.14",
|
"@types/jest": "29.5.14",
|
||||||
"@types/js-yaml": "4.0.9",
|
|
||||||
"@types/jsonld": "1.5.15",
|
"@types/jsonld": "1.5.15",
|
||||||
"@types/jsrsasign": "10.5.15",
|
"@types/jsrsasign": "10.5.15",
|
||||||
"@types/mime-types": "3.0.1",
|
"@types/mime-types": "3.0.1",
|
||||||
|
|
@ -233,6 +232,7 @@
|
||||||
"jest": "29.7.0",
|
"jest": "29.7.0",
|
||||||
"jest-mock": "29.7.0",
|
"jest-mock": "29.7.0",
|
||||||
"jest-util": "29.7.0",
|
"jest-util": "29.7.0",
|
||||||
|
"js-yaml": "4.1.1",
|
||||||
"nodemon": "3.1.11",
|
"nodemon": "3.1.11",
|
||||||
"pid-port": "2.0.0",
|
"pid-port": "2.0.0",
|
||||||
"simple-oauth2": "5.1.0",
|
"simple-oauth2": "5.1.0",
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,56 @@
|
||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: syuilo and misskey-project
|
||||||
|
* SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* YAMLファイルをJSONファイルに変換するスクリプト
|
||||||
|
* ビルド前に実行し、ランタイムにjs-yamlを含まないようにする
|
||||||
|
*/
|
||||||
|
|
||||||
|
import fs from 'node:fs';
|
||||||
|
import { resolve, dirname } from 'node:path';
|
||||||
|
import { fileURLToPath } from 'node:url';
|
||||||
|
import yaml from 'js-yaml';
|
||||||
|
|
||||||
|
const _filename = fileURLToPath(import.meta.url);
|
||||||
|
const _dirname = dirname(_filename);
|
||||||
|
|
||||||
|
const configDir = resolve(_dirname, '../../../.config');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* YAMLファイルをJSONファイルに変換
|
||||||
|
* @param {string} ymlPath - YAMLファイルのパス
|
||||||
|
* @param {string} jsonPath - JSONファイルの出力パス
|
||||||
|
*/
|
||||||
|
function convertYamlToJson(ymlPath, jsonPath) {
|
||||||
|
if (!fs.existsSync(ymlPath)) {
|
||||||
|
console.log(`${ymlPath} が見つからないためスキップします`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const yamlContent = fs.readFileSync(ymlPath, 'utf-8');
|
||||||
|
const jsonContent = yaml.load(yamlContent);
|
||||||
|
fs.writeFileSync(jsonPath, JSON.stringify(jsonContent, null, 2), 'utf-8');
|
||||||
|
console.log(`✓ ${ymlPath} → ${jsonPath}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
// default.yml と test.yml を変換
|
||||||
|
convertYamlToJson(
|
||||||
|
resolve(configDir, 'default.yml'),
|
||||||
|
resolve(configDir, 'default.json'),
|
||||||
|
);
|
||||||
|
|
||||||
|
convertYamlToJson(
|
||||||
|
resolve(configDir, 'test.yml'),
|
||||||
|
resolve(configDir, 'test.json'),
|
||||||
|
);
|
||||||
|
|
||||||
|
// MISSKEY_CONFIG_YML 環境変数が指定されている場合も変換
|
||||||
|
if (process.env.MISSKEY_CONFIG_YML) {
|
||||||
|
const customYmlPath = resolve(configDir, process.env.MISSKEY_CONFIG_YML);
|
||||||
|
const customJsonPath = customYmlPath.replace(/\.ya?ml$/i, '.json');
|
||||||
|
convertYamlToJson(customYmlPath, customJsonPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log('設定ファイルの変換が完了しました');
|
||||||
|
|
@ -6,7 +6,6 @@
|
||||||
import * as fs from 'node:fs';
|
import * as fs from 'node:fs';
|
||||||
import { fileURLToPath } from 'node:url';
|
import { fileURLToPath } from 'node:url';
|
||||||
import { dirname, resolve } from 'node:path';
|
import { dirname, resolve } from 'node:path';
|
||||||
import * as yaml from 'js-yaml';
|
|
||||||
import { type FastifyServerOptions } from 'fastify';
|
import { type FastifyServerOptions } from 'fastify';
|
||||||
import type * as Sentry from '@sentry/node';
|
import type * as Sentry from '@sentry/node';
|
||||||
import type * as SentryVue from '@sentry/vue';
|
import type * as SentryVue from '@sentry/vue';
|
||||||
|
|
@ -227,10 +226,10 @@ const dir = `${_dirname}/../../../.config`;
|
||||||
* Path of configuration file
|
* Path of configuration file
|
||||||
*/
|
*/
|
||||||
export const path = process.env.MISSKEY_CONFIG_YML
|
export const path = process.env.MISSKEY_CONFIG_YML
|
||||||
? resolve(dir, process.env.MISSKEY_CONFIG_YML)
|
? resolve(dir, process.env.MISSKEY_CONFIG_YML).replace(/\.ya?ml$/i, '.json')
|
||||||
: process.env.NODE_ENV === 'test'
|
: process.env.NODE_ENV === 'test'
|
||||||
? resolve(dir, 'test.yml')
|
? resolve(dir, 'test.json')
|
||||||
: resolve(dir, 'default.yml');
|
: resolve(dir, 'default.json');
|
||||||
|
|
||||||
export function loadConfig(): Config {
|
export function loadConfig(): Config {
|
||||||
const meta = JSON.parse(fs.readFileSync(`${_dirname}/../../../built/meta.json`, 'utf-8'));
|
const meta = JSON.parse(fs.readFileSync(`${_dirname}/../../../built/meta.json`, 'utf-8'));
|
||||||
|
|
@ -244,7 +243,7 @@ export function loadConfig(): Config {
|
||||||
JSON.parse(fs.readFileSync(`${_dirname}/../../../built/_frontend_embed_vite_/manifest.json`, 'utf-8'))
|
JSON.parse(fs.readFileSync(`${_dirname}/../../../built/_frontend_embed_vite_/manifest.json`, 'utf-8'))
|
||||||
: { 'src/boot.ts': { file: null } };
|
: { 'src/boot.ts': { file: null } };
|
||||||
|
|
||||||
const config = yaml.load(fs.readFileSync(path, 'utf-8')) as Source;
|
const config = JSON.parse(fs.readFileSync(path, 'utf-8')) as Source;
|
||||||
|
|
||||||
const url = tryCreateUrl(config.url ?? process.env.MISSKEY_URL ?? '');
|
const url = tryCreateUrl(config.url ?? process.env.MISSKEY_URL ?? '');
|
||||||
const version = meta.version;
|
const version = meta.version;
|
||||||
|
|
|
||||||
|
|
@ -40,6 +40,10 @@ services:
|
||||||
source: ./.config/a.test.default.yml
|
source: ./.config/a.test.default.yml
|
||||||
target: /misskey/.config/default.yml
|
target: /misskey/.config/default.yml
|
||||||
read_only: true
|
read_only: true
|
||||||
|
- type: bind
|
||||||
|
source: ../scripts/convert_config.js
|
||||||
|
target: /misskey/packages/backend/scripts/convert_config.js
|
||||||
|
read_only: true
|
||||||
|
|
||||||
db.a.test:
|
db.a.test:
|
||||||
extends:
|
extends:
|
||||||
|
|
|
||||||
|
|
@ -40,6 +40,10 @@ services:
|
||||||
source: ./.config/b.test.default.yml
|
source: ./.config/b.test.default.yml
|
||||||
target: /misskey/.config/default.yml
|
target: /misskey/.config/default.yml
|
||||||
read_only: true
|
read_only: true
|
||||||
|
- type: bind
|
||||||
|
source: ../scripts/convert_config.js
|
||||||
|
target: /misskey/packages/backend/scripts/convert_config.js
|
||||||
|
read_only: true
|
||||||
|
|
||||||
db.b.test:
|
db.b.test:
|
||||||
extends:
|
extends:
|
||||||
|
|
|
||||||
|
|
@ -42,6 +42,10 @@ services:
|
||||||
source: ../package.json
|
source: ../package.json
|
||||||
target: /misskey/packages/backend/package.json
|
target: /misskey/packages/backend/package.json
|
||||||
read_only: true
|
read_only: true
|
||||||
|
- type: bind
|
||||||
|
source: ../scripts/convert_config.js
|
||||||
|
target: /misskey/packages/backend/scripts/convert_config.js
|
||||||
|
read_only: true
|
||||||
- type: bind
|
- type: bind
|
||||||
source: ../../misskey-js/built
|
source: ../../misskey-js/built
|
||||||
target: /misskey/packages/misskey-js/built
|
target: /misskey/packages/misskey-js/built
|
||||||
|
|
|
||||||
|
|
@ -54,6 +54,10 @@ services:
|
||||||
source: ../jest.js
|
source: ../jest.js
|
||||||
target: /misskey/packages/backend/jest.js
|
target: /misskey/packages/backend/jest.js
|
||||||
read_only: true
|
read_only: true
|
||||||
|
- type: bind
|
||||||
|
source: ../scripts/convert_config.js
|
||||||
|
target: /misskey/packages/backend/scripts/convert_config.js
|
||||||
|
read_only: true
|
||||||
- type: bind
|
- type: bind
|
||||||
source: ../../misskey-js/built
|
source: ../../misskey-js/built
|
||||||
target: /misskey/packages/misskey-js/built
|
target: /misskey/packages/misskey-js/built
|
||||||
|
|
|
||||||
|
|
@ -267,9 +267,6 @@ importers:
|
||||||
is-svg:
|
is-svg:
|
||||||
specifier: 6.1.0
|
specifier: 6.1.0
|
||||||
version: 6.1.0
|
version: 6.1.0
|
||||||
js-yaml:
|
|
||||||
specifier: 4.1.1
|
|
||||||
version: 4.1.1
|
|
||||||
json5:
|
json5:
|
||||||
specifier: 2.2.3
|
specifier: 2.2.3
|
||||||
version: 2.2.3
|
version: 2.2.3
|
||||||
|
|
@ -472,9 +469,6 @@ importers:
|
||||||
'@types/jest':
|
'@types/jest':
|
||||||
specifier: 29.5.14
|
specifier: 29.5.14
|
||||||
version: 29.5.14
|
version: 29.5.14
|
||||||
'@types/js-yaml':
|
|
||||||
specifier: 4.0.9
|
|
||||||
version: 4.0.9
|
|
||||||
'@types/jsonld':
|
'@types/jsonld':
|
||||||
specifier: 1.5.15
|
specifier: 1.5.15
|
||||||
version: 1.5.15
|
version: 1.5.15
|
||||||
|
|
@ -577,6 +571,9 @@ importers:
|
||||||
jest-util:
|
jest-util:
|
||||||
specifier: 29.7.0
|
specifier: 29.7.0
|
||||||
version: 29.7.0
|
version: 29.7.0
|
||||||
|
js-yaml:
|
||||||
|
specifier: 4.1.1
|
||||||
|
version: 4.1.1
|
||||||
nodemon:
|
nodemon:
|
||||||
specifier: 3.1.11
|
specifier: 3.1.11
|
||||||
version: 3.1.11
|
version: 3.1.11
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue