diff --git a/.github/workflows/storybook.yml b/.github/workflows/storybook.yml index e6273e5473..ac5b8ba876 100644 --- a/.github/workflows/storybook.yml +++ b/.github/workflows/storybook.yml @@ -36,23 +36,9 @@ jobs: - name: Build storybook run: pnpm --filter frontend build-storybook - name: Publish to Chromatic - id: chromatic - uses: chromaui/action@v1 - with: - debug: true - exitOnceUploaded: true - externals: | - - "assets/**" - - "fluent-emojis/**" - - "locales/**" - - "misskey-assets/**" - - "packages/frontend/assets/**" - - "packages/frontend/public/**" - - "pnpm-lock.yaml" - onlyChanged: "!(master)" - projectToken: ${{ secrets.CHROMATIC_PROJECT_TOKEN }} - workingDir: packages/frontend - traceChanged: extended + run: pnpm --filter frontend chromatic --exit-once-uploaded --externals "assets/**" --externals "fluent-emojis/**" --externals "locales/**" --externals "misskey-assets/**" --externals "packages/frontend/assets/**" --externals "packages/frontend/public/**" --externals "pnpm-lock.yaml" --only-changed "!(master)" $(node packages/frontend/.storybook/changes.js $(git diff-tree --no-commit-id --name-only -r HEAD | xargs)) + env: + CHROMATIC_PROJECT_TOKEN: ${{ secrets.CHROMATIC_PROJECT_TOKEN }} - name: Upload Artifacts uses: actions/upload-artifact@v3 with: diff --git a/packages/frontend/.storybook/changes.ts b/packages/frontend/.storybook/changes.ts new file mode 100644 index 0000000000..e1f470bd80 --- /dev/null +++ b/packages/frontend/.storybook/changes.ts @@ -0,0 +1,24 @@ +import fs from 'node:fs/promises'; +import path from 'node:path'; + +fs.readFile(path.resolve(__dirname, '../storybook-static/preview-stats.json')) + .then((buffer) => { + const stats = JSON.parse(buffer.toString()); + const modules = new Set(process.argv.slice(2).map((arg) => path.resolve(__dirname, '..', arg))); + for (;;) { + const oldSize = modules.size; + for (const module of Array.from(modules)) { + if (stats.modules[module]) { + for (const reason of stats.modules[module].reasons) { + modules.add(reason.moduleName); + } + } + } + if (modules.size === oldSize) { + break; + } + } + for (const file of Array.from(modules)) { + process.stdout.write(`--only-story-files ${file}`); + } + }) diff --git a/packages/frontend/.storybook/tsconfig.json b/packages/frontend/.storybook/tsconfig.json index 01aa9db6eb..2db2f1eabe 100644 --- a/packages/frontend/.storybook/tsconfig.json +++ b/packages/frontend/.storybook/tsconfig.json @@ -18,5 +18,10 @@ "jsx": "react", "jsxFactory": "h" }, - "files": ["./generate.tsx", "./preload-locale.ts", "./preload-theme.ts"] + "files": [ + "./changes.ts", + "./generate.tsx", + "./preload-locale.ts", + "./preload-theme.ts" + ] }