From 64d34f595cb5dcef3f6880cba3c39147a48539c6 Mon Sep 17 00:00:00 2001 From: trivernis Date: Sun, 24 Dec 2023 17:16:24 +0100 Subject: [PATCH] Change loadConfig to load all yaml files in the config directory --- package.json | 6 +- packages/backend/package.json | 3 +- packages/backend/src/config.ts | 24 +++++--- pnpm-lock.yaml | 109 +++++---------------------------- 4 files changed, 38 insertions(+), 104 deletions(-) diff --git a/package.json b/package.json index 6fad6f8bf..f267db967 100644 --- a/package.json +++ b/package.json @@ -45,8 +45,8 @@ "lodash": "4.17.21" }, "dependencies": { - "execa": "8.0.1", "cssnano": "6.0.2", + "execa": "8.0.1", "js-yaml": "4.1.0", "postcss": "8.4.32", "terser": "5.26.0", @@ -58,7 +58,7 @@ "cross-env": "7.0.3", "cypress": "13.6.1", "eslint": "8.56.0", - "start-server-and-test": "2.0.3", - "ncp": "2.0.0" + "ncp": "2.0.0", + "start-server-and-test": "2.0.3" } } diff --git a/packages/backend/package.json b/packages/backend/package.json index aaf30bef1..cda2da911 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -109,6 +109,7 @@ "file-type": "18.7.0", "fluent-ffmpeg": "2.1.2", "form-data": "4.0.0", + "glob": "^10.3.10", "got": "14.0.0", "happy-dom": "10.0.3", "hpagent": "1.2.0", @@ -122,8 +123,8 @@ "json5": "2.2.3", "jsonld": "8.3.2", "jsrsasign": "10.9.0", - "meilisearch": "0.36.0", "megalodon": "workspace:*", + "meilisearch": "0.36.0", "microformats-parser": "2.0.2", "mime-types": "2.1.35", "misskey-js": "workspace:*", diff --git a/packages/backend/src/config.ts b/packages/backend/src/config.ts index 4a4d7e831..9b6c2afde 100644 --- a/packages/backend/src/config.ts +++ b/packages/backend/src/config.ts @@ -8,6 +8,7 @@ import { fileURLToPath } from 'node:url'; import { dirname, resolve } from 'node:path'; import * as yaml from 'js-yaml'; import type { RedisOptions } from 'ioredis'; +import { globSync } from 'glob'; type RedisOptionsSource = Partial & { host: string; @@ -185,19 +186,26 @@ const dir = `${_dirname}/../../../.config`; /** * Path of configuration file */ -const path = process.env.MISSKEY_CONFIG_YML - ? resolve(dir, process.env.MISSKEY_CONFIG_YML) +const cfgDir = process.env.MISSKEY_CONFIG_DIR + ? resolve(dir, process.env.MISSKEY_CONFIG_DIR) : process.env.NODE_ENV === 'test' - ? resolve(dir, 'test.yml') - : resolve(dir, 'default.yml'); + ? resolve(dir, './test/') + : dir; export function loadConfig(): Config { const meta = JSON.parse(fs.readFileSync(`${_dirname}/../../../built/meta.json`, 'utf-8')); - const clientManifestExists = fs.existsSync(_dirname + '/../../../built/_vite_/manifest.json'); - const clientManifest = clientManifestExists ? - JSON.parse(fs.readFileSync(`${_dirname}/../../../built/_vite_/manifest.json`, 'utf-8')) + const clientManifestExists = fs.existsSync(`${_dirname}/../../../built/_vite_/manifest.json`); + const clientManifest = clientManifestExists + ? JSON.parse(fs.readFileSync(`${_dirname}/../../../built/_vite_/manifest.json`, 'utf-8')) : { 'src/_boot_.ts': { file: 'src/_boot_.ts' } }; - const config = yaml.load(fs.readFileSync(path, 'utf-8')) as Source; + + const config = globSync(`${cfgDir}/*.{yaml,yml}`) + .map(path => fs.readFileSync(path, 'utf-8')) + .map(contents => yaml.load(contents) as Source) + .reduce( + (acc: Source, cur: Source) => Object.assign(acc, cur), + {} as Source, + ) as Source; const url = tryCreateUrl(config.url); const version = meta.version; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ec05ad348..193d294f2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -208,6 +208,9 @@ importers: form-data: specifier: 4.0.0 version: 4.0.0 + glob: + specifier: ^10.3.10 + version: 10.3.10 got: specifier: 14.0.0 version: 14.0.0 @@ -870,10 +873,10 @@ importers: version: 7.6.5 '@storybook/vue3': specifier: 7.6.5 - version: 7.6.5(@vue/compiler-core@3.3.8)(vue@3.3.12) + version: 7.6.5(@vue/compiler-core@3.3.12)(vue@3.3.12) '@storybook/vue3-vite': specifier: 7.6.5 - version: 7.6.5(@vue/compiler-core@3.3.8)(typescript@5.3.3)(vite@5.0.10)(vue@3.3.12) + version: 7.6.5(@vue/compiler-core@3.3.12)(typescript@5.3.3)(vite@5.0.10)(vue@3.3.12) '@testing-library/vue': specifier: 8.0.1 version: 8.0.1(@vue/compiler-sfc@3.3.12)(vue@3.3.12) @@ -978,7 +981,7 @@ importers: version: 7.6.5 storybook-addon-misskey-theme: specifier: github:misskey-dev/storybook-addon-misskey-theme - version: github.com/misskey-dev/storybook-addon-misskey-theme/cf583db098365b2ccc81a82f63ca9c93bc32b640(@storybook/blocks@7.6.5)(@storybook/components@7.5.3)(@storybook/core-events@7.6.5)(@storybook/manager-api@7.6.5)(@storybook/preview-api@7.6.5)(@storybook/theming@7.6.5)(@storybook/types@7.6.5)(react-dom@18.2.0)(react@18.2.0) + version: github.com/misskey-dev/storybook-addon-misskey-theme/cf583db098365b2ccc81a82f63ca9c93bc32b640(@storybook/blocks@7.6.5)(@storybook/components@7.6.5)(@storybook/core-events@7.6.5)(@storybook/manager-api@7.6.5)(@storybook/preview-api@7.6.5)(@storybook/theming@7.6.5)(@storybook/types@7.6.5)(react-dom@18.2.0)(react@18.2.0) summaly: specifier: github:misskey-dev/summaly version: github.com/misskey-dev/summaly/d2a3e07205c3c9769bc5a7b42031c8884b5a25c8 @@ -6691,17 +6694,6 @@ packages: - supports-color dev: true - /@storybook/channels@7.5.3: - resolution: {integrity: sha512-dhWuV2o2lmxH0RKuzND8jxYzvSQTSmpE13P0IT/k8+I1up/rSNYOBQJT6SalakcNWXFAMXguo/8E7ApmnKKcEw==} - dependencies: - '@storybook/client-logger': 7.5.3 - '@storybook/core-events': 7.5.3 - '@storybook/global': 5.0.0 - qs: 6.11.1 - telejson: 7.2.0 - tiny-invariant: 1.3.1 - dev: true - /@storybook/channels@7.6.5: resolution: {integrity: sha512-FIlNkyfQy9uHoJfAFL2/wO3ASGJELFvBzURBE2rcEF/TS7GcUiqWnBfiDxAbwSEjSOm2F0eEq3UXhaZEjpJHDw==} dependencies: @@ -6765,12 +6757,6 @@ packages: - utf-8-validate dev: true - /@storybook/client-logger@7.5.3: - resolution: {integrity: sha512-vUFYALypjix5FoJ5M/XUP6KmyTnQJNW1poHdW7WXUVSg+lBM6E5eAtjTm0hdxNNDH8KSrdy24nCLra5h0X0BWg==} - dependencies: - '@storybook/global': 5.0.0 - dev: true - /@storybook/client-logger@7.6.5: resolution: {integrity: sha512-S5aROWgssqg7tcs9lgW5wmCAz4SxMAtioiyVj5oFecmPCbQtFVIAREYzeoxE4GfJL+plrfRkum4BzziANn8EhQ==} dependencies: @@ -6798,29 +6784,6 @@ packages: - supports-color dev: true - /@storybook/components@7.5.3(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-M3+cjvEsDGLUx8RvK5wyF6/13LNlUnKbMgiDE8Sxk/v/WPpyhOAIh/B8VmrU1psahS61Jd4MTkFmLf1cWau1vw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - dependencies: - '@radix-ui/react-select': 1.2.2(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-toolbar': 1.0.4(react-dom@18.2.0)(react@18.2.0) - '@storybook/client-logger': 7.5.3 - '@storybook/csf': 0.1.0 - '@storybook/global': 5.0.0 - '@storybook/theming': 7.5.3(react-dom@18.2.0)(react@18.2.0) - '@storybook/types': 7.5.3 - memoizerific: 1.11.3 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - use-resize-observer: 9.1.0(react-dom@18.2.0)(react@18.2.0) - util-deprecate: 1.0.2 - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - dev: true - /@storybook/components@7.6.5(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-w4ZucbBBZ+NKMWlJKVj2I/bMBBq7gzDp9lzc4+8QaQ3vUPXKqc1ilIPYo/7UR5oxwDVMZocmMSgl9L8lvf7+Mw==} peerDependencies: @@ -6882,12 +6845,6 @@ packages: - supports-color dev: true - /@storybook/core-events@7.5.3: - resolution: {integrity: sha512-DFOpyQ22JD5C1oeOFzL8wlqSWZzrqgDfDbUGP8xdO4wJu+FVTxnnWN6ZYLdTPB1u27DOhd7TzjQMfLDHLu7kbQ==} - dependencies: - ts-dedent: 2.2.0 - dev: true - /@storybook/core-events@7.6.5: resolution: {integrity: sha512-zk2q/qicYXAzHA4oV3GDbIql+Kd4TOHUgDE8e4jPCOPp856z2ScqEKUAbiJizs6eEJOH4nW9Db1kuzgrBVEykQ==} dependencies: @@ -6970,12 +6927,6 @@ packages: - supports-color dev: true - /@storybook/csf@0.1.0: - resolution: {integrity: sha512-uk+jMXCZ8t38jSTHk2o5btI+aV2Ksbvl6DoOv3r6VaCM1KZqeuMwtwywIQdflkA8/6q/dKT8z8L+g8hC4GC3VQ==} - dependencies: - type-fest: 2.19.0 - dev: true - /@storybook/csf@0.1.2: resolution: {integrity: sha512-ePrvE/pS1vsKR9Xr+o+YwdqNgHUyXvg+1Xjx0h9LrVx7Zq4zNe06pd63F5EvzTbCbJsHj7GHr9tkiaqm7U8WRA==} dependencies: @@ -7205,20 +7156,6 @@ packages: ts-dedent: 2.2.0 dev: true - /@storybook/theming@7.5.3(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-Cjmthe1MAk0z4RKCZ7m72gAD8YD0zTAH97z5ryM1Qv84QXjiCQ143fGOmYz1xEQdNFpOThPcwW6FEccLHTkVcg==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - dependencies: - '@emotion/use-insertion-effect-with-fallbacks': 1.0.0(react@18.2.0) - '@storybook/client-logger': 7.5.3 - '@storybook/global': 5.0.0 - memoizerific: 1.11.3 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: true - /@storybook/theming@7.6.5(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-RpcWT0YEgiobO41McVPDfQQHHFnjyr1sJnNTPJIvOUgSfURdgSj17mQVxtD5xcXcPWUdle5UhIOrCixHbL/NNw==} peerDependencies: @@ -7233,15 +7170,6 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: true - /@storybook/types@7.5.3: - resolution: {integrity: sha512-iu5W0Kdd6nysN5CPkY4GRl+0BpxRTdSfBIJak7mb6xCIHSB5t1tw4BOuqMQ5EgpikRY3MWJ4gY647QkWBX3MNQ==} - dependencies: - '@storybook/channels': 7.5.3 - '@types/babel__core': 7.20.5 - '@types/express': 4.17.17 - file-system-cache: 2.3.0 - dev: true - /@storybook/types@7.6.5: resolution: {integrity: sha512-Q757v+fYZZSaEpks/zDL5YgXRozxkgKakXFc+BoQHK5q5sVhJ+0jvpLJiAQAniIIaMIkqY/G24Kd6Uo6UdKBCg==} dependencies: @@ -7251,7 +7179,7 @@ packages: file-system-cache: 2.3.0 dev: true - /@storybook/vue3-vite@7.6.5(@vue/compiler-core@3.3.8)(typescript@5.3.3)(vite@5.0.10)(vue@3.3.12): + /@storybook/vue3-vite@7.6.5(@vue/compiler-core@3.3.12)(typescript@5.3.3)(vite@5.0.10)(vue@3.3.12): resolution: {integrity: sha512-7wUCq2Lrjlekftd5ha3hG0GSGbbzuc370cKkBqSmwFuOfI38z5+VeYt7nDtAlncxcpVSH7DejTGRuKTlC7NyYg==} engines: {node: ^14.18 || >=16} peerDependencies: @@ -7259,7 +7187,7 @@ packages: dependencies: '@storybook/builder-vite': 7.6.5(typescript@5.3.3)(vite@5.0.10) '@storybook/core-server': 7.6.5 - '@storybook/vue3': 7.6.5(@vue/compiler-core@3.3.8)(vue@3.3.12) + '@storybook/vue3': 7.6.5(@vue/compiler-core@3.3.12)(vue@3.3.12) '@vitejs/plugin-vue': 4.5.2(vite@5.0.10)(vue@3.3.12) magic-string: 0.30.5 vite: 5.0.10(@types/node@20.10.5)(sass@1.69.5)(terser@5.26.0) @@ -7276,7 +7204,7 @@ packages: - vue dev: true - /@storybook/vue3@7.6.5(@vue/compiler-core@3.3.8)(vue@3.3.12): + /@storybook/vue3@7.6.5(@vue/compiler-core@3.3.12)(vue@3.3.12): resolution: {integrity: sha512-tv/9rVc3XXDOJu5hfZtKhrhM8x4GTLKon62Rmaxlq06weqkGlfBi/V/g1EZ7OE71Pi+woKS/TX7p9qbRrvgahg==} engines: {node: '>=16.0.0'} peerDependencies: @@ -7288,7 +7216,7 @@ packages: '@storybook/global': 5.0.0 '@storybook/preview-api': 7.6.5 '@storybook/types': 7.6.5 - '@vue/compiler-core': 3.3.8 + '@vue/compiler-core': 3.3.12 lodash: 4.17.21 ts-dedent: 2.2.0 type-fest: 2.19.0 @@ -8048,6 +7976,7 @@ packages: /@types/node@20.10.5: resolution: {integrity: sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw==} + requiresBuild: true dependencies: undici-types: 5.26.5 @@ -12799,7 +12728,7 @@ packages: fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 - minimatch: 5.1.2 + minimatch: 5.1.6 once: 1.4.0 /global-dirs@3.0.1: @@ -15060,12 +14989,6 @@ packages: dependencies: brace-expansion: 1.1.11 - /minimatch@5.1.2: - resolution: {integrity: sha512-bNH9mmM9qsJ2X4r2Nat1B//1dJVcn3+iBLa3IgqJ7EbGaDNepL9QSHOxN4ng33s52VMMhhIfgCYDk3C4ZmlDAg==} - engines: {node: '>=10'} - dependencies: - brace-expansion: 2.0.1 - /minimatch@5.1.6: resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} engines: {node: '>=10'} @@ -17304,7 +17227,7 @@ packages: /readdir-glob@1.1.2: resolution: {integrity: sha512-6RLVvwJtVwEDfPdn6X6Ille4/lxGl0ATOY4FN/B9nxQcgOazvvI0nodiD19ScKq0PvA/29VpaOQML36o5IzZWA==} dependencies: - minimatch: 5.1.2 + minimatch: 5.1.6 dev: false /readdirp@3.6.0: @@ -18888,6 +18811,7 @@ packages: /ts-case-convert@2.0.2: resolution: {integrity: sha512-vdKfx1VAdpvEBOBv5OpVu5ZFqRg9HdTI4sYt6qqMeICBeNyXvitrarCnFWNDAki51IKwCyx+ZssY46Q9jH5otA==} dev: true + bundledDependencies: [] /ts-dedent@2.2.0: resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} @@ -19256,6 +19180,7 @@ packages: /undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + requiresBuild: true /undici@5.22.1: resolution: {integrity: sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw==} @@ -20281,7 +20206,7 @@ packages: sharp: 0.31.3 dev: false - github.com/misskey-dev/storybook-addon-misskey-theme/cf583db098365b2ccc81a82f63ca9c93bc32b640(@storybook/blocks@7.6.5)(@storybook/components@7.5.3)(@storybook/core-events@7.6.5)(@storybook/manager-api@7.6.5)(@storybook/preview-api@7.6.5)(@storybook/theming@7.6.5)(@storybook/types@7.6.5)(react-dom@18.2.0)(react@18.2.0): + github.com/misskey-dev/storybook-addon-misskey-theme/cf583db098365b2ccc81a82f63ca9c93bc32b640(@storybook/blocks@7.6.5)(@storybook/components@7.6.5)(@storybook/core-events@7.6.5)(@storybook/manager-api@7.6.5)(@storybook/preview-api@7.6.5)(@storybook/theming@7.6.5)(@storybook/types@7.6.5)(react-dom@18.2.0)(react@18.2.0): resolution: {tarball: https://codeload.github.com/misskey-dev/storybook-addon-misskey-theme/tar.gz/cf583db098365b2ccc81a82f63ca9c93bc32b640} id: github.com/misskey-dev/storybook-addon-misskey-theme/cf583db098365b2ccc81a82f63ca9c93bc32b640 name: storybook-addon-misskey-theme @@ -20303,7 +20228,7 @@ packages: optional: true dependencies: '@storybook/blocks': 7.6.5(react-dom@18.2.0)(react@18.2.0) - '@storybook/components': 7.5.3(react-dom@18.2.0)(react@18.2.0) + '@storybook/components': 7.6.5(react-dom@18.2.0)(react@18.2.0) '@storybook/core-events': 7.6.5 '@storybook/manager-api': 7.6.5(react-dom@18.2.0)(react@18.2.0) '@storybook/preview-api': 7.6.5