From 13d5f11c4dce3c644fd1a44666062be9a4cd10bb Mon Sep 17 00:00:00 2001 From: Vladimir Eremin Date: Sat, 31 Jan 2026 00:53:24 +0300 Subject: [PATCH] ci: Fix Storybook job for www --- .../workflows/services-www-next-required.yml | 52 +++-- .../services-www-releases-required.yml | 189 ++++++++++++++---- pnpm-lock.yaml | 18 ++ services/www/.storybook/main.ts | 10 + services/www/package.json | 6 + services/www/src/widgets/Welcome.stories.tsx | 13 ++ services/www/src/widgets/Welcome.tsx | 10 + 7 files changed, 245 insertions(+), 53 deletions(-) create mode 100644 services/www/src/widgets/Welcome.stories.tsx create mode 100644 services/www/src/widgets/Welcome.tsx diff --git a/.github/workflows/services-www-next-required.yml b/.github/workflows/services-www-next-required.yml index c50c9b2..5b7f762 100644 --- a/.github/workflows/services-www-next-required.yml +++ b/.github/workflows/services-www-next-required.yml @@ -163,7 +163,42 @@ jobs: retention-days: 1 test-www: - name: Test - WWW & Storybook + name: Test - Unit + needs: build-configs + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Install pnpm + uses: pnpm/action-setup@v4 + with: + version: 9.12.3 + - uses: actions/setup-node@v4 + with: + node-version: 20 + cache: 'pnpm' + - name: Install dependencies + run: pnpm install --frozen-lockfile + - name: Download Config Artifacts + uses: actions/download-artifact@v4 + with: + name: config-artifacts + path: packages + - name: Test STL package + run: pnpm --filter @ermnvldmr/stl test:coverage + - name: Test UI package + run: pnpm --filter @ermnvldmr/ui test:coverage + - name: Test WWW service + run: pnpm --filter @ermnvldmr/www test:coverage + - name: Upload Unit coverage to Codecov + uses: codecov/codecov-action@v4 + with: + files: ./services/www/coverage/lcov.info + flags: www + env: + CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} + + test-storybook: + name: Test - Storybook needs: build-storybook runs-on: ubuntu-latest steps: @@ -185,19 +220,6 @@ jobs: path: packages - name: Install Playwright browsers run: pnpm --filter @ermnvldmr/www exec playwright install --with-deps chromium - - name: Test STL package - run: pnpm --filter @ermnvldmr/stl test:coverage - - name: Test UI package - run: pnpm --filter @ermnvldmr/ui test:coverage - - name: Test WWW service - run: pnpm --filter @ermnvldmr/www test:coverage - - name: Upload Unit coverage to Codecov - uses: codecov/codecov-action@v4 - with: - files: ./services/www/coverage/lcov.info - flags: www - env: - CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} - name: Download Storybook build uses: actions/download-artifact@v4 with: @@ -271,4 +293,4 @@ jobs: file: ci/docker/www/Dockerfile push: true tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} + labels: ${{ steps.meta.outputs.labels }} \ No newline at end of file diff --git a/.github/workflows/services-www-releases-required.yml b/.github/workflows/services-www-releases-required.yml index aeb5133..dc2b547 100644 --- a/.github/workflows/services-www-releases-required.yml +++ b/.github/workflows/services-www-releases-required.yml @@ -12,18 +12,30 @@ jobs: setup-stage: name: Setup - Stage runs-on: ubuntu-latest + outputs: + cache-hit: ${{ steps.cache-pnpm-store.outputs.cache-hit }} steps: - name: Checkout repository uses: actions/checkout@v4 + - name: Install pnpm uses: pnpm/action-setup@v4 with: version: 9.12.3 + - name: Setup Node.js with pnpm cache uses: actions/setup-node@v4 with: node-version: 20 cache: 'pnpm' + + - name: Cache pnpm store + id: cache-pnpm-store + uses: actions/cache@v3 + with: + path: ~/.pnpm-store + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} + - name: Install dependencies run: pnpm install --frozen-lockfile @@ -43,14 +55,24 @@ jobs: cache: 'pnpm' - name: Install dependencies run: pnpm install --frozen-lockfile - - name: Build configs - run: | - pnpm --filter @ermnvldmr/jest-config build - pnpm --filter @ermnvldmr/vite-config build - pnpm --filter @ermnvldmr/storybook-config build + - name: Build Jest config + run: pnpm --filter @ermnvldmr/jest-config build + - name: Build Vite config + run: pnpm --filter @ermnvldmr/vite-config build + - name: Build Storybook config + run: pnpm --filter @ermnvldmr/storybook-config build + - name: Upload Config Artifacts + uses: actions/upload-artifact@v4 + with: + name: config-artifacts + path: | + packages/jest-config/dist + packages/vite-config/dist + packages/storybook-config/dist + retention-days: 1 - build-dependencies: - name: Build - Dependencies + lint-www: + name: Lint - WWW & Deps needs: build-configs runs-on: ubuntu-latest steps: @@ -65,17 +87,21 @@ jobs: cache: 'pnpm' - name: Install dependencies run: pnpm install --frozen-lockfile - - name: Build dependencies - run: | - pnpm --filter @ermnvldmr/jest-config build - pnpm --filter @ermnvldmr/vite-config build - pnpm --filter @ermnvldmr/storybook-config build - pnpm --filter @ermnvldmr/stl build - pnpm --filter @ermnvldmr/ui build + - name: Download Config Artifacts + uses: actions/download-artifact@v4 + with: + name: config-artifacts + path: packages + - name: Lint STL package + run: pnpm --filter @ermnvldmr/stl lint + - name: Lint UI package + run: pnpm --filter @ermnvldmr/ui lint + - name: Lint WWW service + run: pnpm --filter @ermnvldmr/www lint - test-www: - name: Test - WWW & Deps - needs: build-dependencies + typecheck-www: + name: Typecheck - WWW & Deps + needs: build-configs runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 @@ -89,22 +115,110 @@ jobs: cache: 'pnpm' - name: Install dependencies run: pnpm install --frozen-lockfile - - name: Build dependencies - run: | - pnpm --filter @ermnvldmr/jest-config build - pnpm --filter @ermnvldmr/vite-config build - pnpm --filter @ermnvldmr/storybook-config build - pnpm --filter @ermnvldmr/stl build - pnpm --filter @ermnvldmr/ui build - - name: Run tests - run: | - pnpm --filter @ermnvldmr/stl test:coverage - pnpm --filter @ermnvldmr/ui test:coverage - pnpm --filter @ermnvldmr/www test:coverage + - name: Download Config Artifacts + uses: actions/download-artifact@v4 + with: + name: config-artifacts + path: packages + - name: Typecheck STL package + run: pnpm --filter @ermnvldmr/stl typecheck + - name: Typecheck UI package + run: pnpm --filter @ermnvldmr/ui typecheck + - name: Typecheck WWW service + run: pnpm --filter @ermnvldmr/www typecheck + + build-storybook: + name: Build - Storybook + needs: build-configs + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Install pnpm + uses: pnpm/action-setup@v4 + with: + version: 9.12.3 + - uses: actions/setup-node@v4 + with: + node-version: 20 + cache: 'pnpm' + - name: Install dependencies + run: pnpm install --frozen-lockfile + - name: Download Config Artifacts + uses: actions/download-artifact@v4 + with: + name: config-artifacts + path: packages + - name: Build WWW Storybook + run: pnpm --filter @ermnvldmr/www build-storybook + - name: Upload Storybook build + uses: actions/upload-artifact@v4 + with: + name: storybook-static + path: services/www/storybook-static/ + retention-days: 1 + + test-www: + name: Test - Unit + needs: build-configs + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Install pnpm + uses: pnpm/action-setup@v4 + with: + version: 9.12.3 + - uses: actions/setup-node@v4 + with: + node-version: 20 + cache: 'pnpm' + - name: Install dependencies + run: pnpm install --frozen-lockfile + - name: Download Config Artifacts + uses: actions/download-artifact@v4 + with: + name: config-artifacts + path: packages + - name: Test STL package + run: pnpm --filter @ermnvldmr/stl test:coverage + - name: Test UI package + run: pnpm --filter @ermnvldmr/ui test:coverage + - name: Test WWW service + run: pnpm --filter @ermnvldmr/www test:coverage + + test-storybook: + name: Test - Storybook + needs: build-storybook + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Install pnpm + uses: pnpm/action-setup@v4 + with: + version: 9.12.3 + - uses: actions/setup-node@v4 + with: + node-version: 20 + cache: 'pnpm' + - name: Install dependencies + run: pnpm install --frozen-lockfile + - name: Download Config Artifacts + uses: actions/download-artifact@v4 + with: + name: config-artifacts + path: packages + - name: Install Playwright browsers + run: pnpm --filter @ermnvldmr/www exec playwright install --with-deps chromium + - name: Download Storybook build + uses: actions/download-artifact@v4 + with: + name: storybook-static + path: services/www/storybook-static/ + - name: Serve Storybook and run tests + run: pnpm --filter @ermnvldmr/www test:storybook:ci build-www: name: Build - WWW Service - needs: build-dependencies + needs: build-configs runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 @@ -118,14 +232,13 @@ jobs: cache: 'pnpm' - name: Install dependencies run: pnpm install --frozen-lockfile + - name: Download Config Artifacts + uses: actions/download-artifact@v4 + with: + name: config-artifacts + path: packages - name: Build WWW service - run: | - pnpm --filter @ermnvldmr/jest-config build - pnpm --filter @ermnvldmr/vite-config build - pnpm --filter @ermnvldmr/storybook-config build - pnpm --filter @ermnvldmr/stl build - pnpm --filter @ermnvldmr/ui build - pnpm --filter @ermnvldmr/www build + run: pnpm --filter @ermnvldmr/www build release-rc-docker: name: Release - RC Docker Image @@ -169,4 +282,4 @@ jobs: file: ci/docker/www/Dockerfile push: true tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} + labels: ${{ steps.meta.outputs.labels }} \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d2d4623..d9d550d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -421,12 +421,30 @@ importers: '@ermnvldmr/storybook-config': specifier: workspace:* version: link:../../packages/storybook-config + '@storybook/addon-a11y': + specifier: ^8.6.15 + version: 8.6.15(storybook@8.6.15(prettier@3.5.3)) + '@storybook/addon-coverage': + specifier: ^3.0.0 + version: 3.0.0(vite@7.3.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)) + '@storybook/addon-essentials': + specifier: ^8.6.15 + version: 8.6.15(@types/react@19.2.9)(storybook@8.6.15(prettier@3.5.3)) + '@storybook/addon-interactions': + specifier: ^8.6.15 + version: 8.6.15(storybook@8.6.15(prettier@3.5.3)) + '@storybook/addon-themes': + specifier: ^8.6.15 + version: 8.6.15(storybook@8.6.15(prettier@3.5.3)) '@storybook/react': specifier: ^8.6.15 version: 8.6.15(@storybook/test@8.6.15(storybook@8.6.15(prettier@3.5.3)))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(storybook@8.6.15(prettier@3.5.3))(typescript@5.8.3) '@storybook/react-vite': specifier: ^8.6.15 version: 8.6.15(@storybook/test@8.6.15(storybook@8.6.15(prettier@3.5.3)))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(rollup@4.56.0)(storybook@8.6.15(prettier@3.5.3))(typescript@5.8.3)(vite@7.3.1(@types/node@25.0.10)(jiti@2.6.1)(lightningcss@1.30.2)) + '@storybook/test': + specifier: ^8.6.15 + version: 8.6.15(storybook@8.6.15(prettier@3.5.3)) '@storybook/test-runner': specifier: ^0.19.1 version: 0.19.1(@swc/helpers@0.5.18)(@types/node@25.0.10)(storybook@8.6.15(prettier@3.5.3))(ts-node@10.9.2(@swc/core@1.15.10(@swc/helpers@0.5.18))(@types/node@25.0.10)(typescript@5.8.3)) diff --git a/services/www/.storybook/main.ts b/services/www/.storybook/main.ts index 141c3f8..01912a0 100644 --- a/services/www/.storybook/main.ts +++ b/services/www/.storybook/main.ts @@ -25,6 +25,16 @@ const config: StorybookConfig = { propFilter: (prop) => (prop.parent ? !/node_modules/.test(prop.parent.fileName) : true), }, }, + async viteFinal(config) { + config.resolve = config.resolve || {}; + config.resolve.alias = { + ...config.resolve.alias, + '#': path.resolve(__dirname, '../src'), + '@ermnvldmr/stl': path.resolve(__dirname, '../../../packages/stl/src'), + '@ermnvldmr/ui': path.resolve(__dirname, '../../../packages/ui/src'), + }; + return config; + }, }; export default config; diff --git a/services/www/package.json b/services/www/package.json index e2b4bac..28ec077 100644 --- a/services/www/package.json +++ b/services/www/package.json @@ -40,8 +40,14 @@ "@ermnvldmr/eslint-config": "workspace:*", "@ermnvldmr/jest-config": "workspace:*", "@ermnvldmr/storybook-config": "workspace:*", + "@storybook/addon-a11y": "^8.6.15", + "@storybook/addon-coverage": "^3.0.0", + "@storybook/addon-essentials": "^8.6.15", + "@storybook/addon-interactions": "^8.6.15", + "@storybook/addon-themes": "^8.6.15", "@storybook/react": "^8.6.15", "@storybook/react-vite": "^8.6.15", + "@storybook/test": "^8.6.15", "@storybook/test-runner": "^0.19.1", "@tailwindcss/vite": "^4.1.4", "@testing-library/jest-dom": "^6.9.1", diff --git a/services/www/src/widgets/Welcome.stories.tsx b/services/www/src/widgets/Welcome.stories.tsx new file mode 100644 index 0000000..65b52f1 --- /dev/null +++ b/services/www/src/widgets/Welcome.stories.tsx @@ -0,0 +1,13 @@ +import type { Meta, StoryObj } from '@storybook/react'; +import { Welcome } from './Welcome'; + +const meta: Meta = { + title: 'WWW/Widgets/Welcome', + component: Welcome, + tags: ['autodocs'], +}; + +export default meta; +type Story = StoryObj; + +export const Default: Story = {}; diff --git a/services/www/src/widgets/Welcome.tsx b/services/www/src/widgets/Welcome.tsx new file mode 100644 index 0000000..0ef414c --- /dev/null +++ b/services/www/src/widgets/Welcome.tsx @@ -0,0 +1,10 @@ +import React from 'react'; + +export const Welcome: React.FC = () => { + return ( +
+

Welcome to WWW Service

+

This is a placeholder component for Storybook.

+
+ ); +};