From f8c703ae96ab5eb3c511c2b952b51715fcfab02e Mon Sep 17 00:00:00 2001 From: Oleksandr Khotemskyi Date: Thu, 26 Feb 2026 16:29:03 +0200 Subject: [PATCH 1/6] feat: bumped nodejs to 26 --- .github/workflows/pull_request.yml | 10 +++++++--- .nvmrc | 2 +- Dockerfile | 2 +- package-lock.json | 4 ++-- package.json | 4 ++-- 5 files changed, 13 insertions(+), 9 deletions(-) diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index b701ccd2..9d304694 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -11,7 +11,7 @@ jobs: - name: Set up Node.js uses: actions/setup-node@v6 with: - node-version: '20' + node-version: '26' - name: Install dependencies run: npm ci - name: Run prettier @@ -25,7 +25,7 @@ jobs: - name: Set up Node.js uses: actions/setup-node@v6 with: - node-version: '20' + node-version: '26' - name: Install dependencies run: npm ci - name: Run eslint @@ -40,7 +40,7 @@ jobs: # - name: Set up Node.js # uses: actions/setup-node@v6 # with: - # node-version: '20' + # node-version: '26' # - name: Install dependencies # run: npm ci # - name: Run unit tests @@ -52,6 +52,10 @@ jobs: steps: - name: Checkout repository uses: actions/checkout@v6 + - name: Set up Node.js + uses: actions/setup-node@v6 + with: + node-version: '26' - name: Install dependencies run: npm ci - name: Execute API tests diff --git a/.nvmrc b/.nvmrc index 2bd5a0a9..6f4247a6 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -22 +26 diff --git a/Dockerfile b/Dockerfile index 009363db..0293dec2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM node:22-alpine AS base +FROM node:26-alpine AS base # Install dependencies only when needed FROM base AS deps diff --git a/package-lock.json b/package-lock.json index 3d1ab135..b8a94932 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "playwright-reports-server", - "version": "5.7.4", + "version": "5.8.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "playwright-reports-server", - "version": "5.7.4", + "version": "5.8.0", "dependencies": { "@heroui/link": "2.2.12", "@heroui/navbar": "2.2.13", diff --git a/package.json b/package.json index c272d16a..d12d098a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "playwright-reports-server", - "version": "5.7.4", + "version": "5.8.0", "description": "Playwright Reports Server: Can be used to accept blobs, merge them, store and view Playwright reports", "scripts": { "build": "next build", @@ -78,6 +78,6 @@ "typescript": "5.2.2" }, "engines": { - "node": ">=22.0.0" + "node": ">=26.0.0" } } From fedc76543d446fcb8bbdcc913c63bf7e5cb7b08a Mon Sep 17 00:00:00 2001 From: Oleksandr Khotemskyi Date: Thu, 26 Feb 2026 17:29:24 +0200 Subject: [PATCH 2/6] Update pull_request.yml --- .github/workflows/pull_request.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 9d304694..3ba4bc57 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -11,7 +11,7 @@ jobs: - name: Set up Node.js uses: actions/setup-node@v6 with: - node-version: '26' + node-version: 26 - name: Install dependencies run: npm ci - name: Run prettier @@ -25,7 +25,7 @@ jobs: - name: Set up Node.js uses: actions/setup-node@v6 with: - node-version: '26' + node-version: 26 - name: Install dependencies run: npm ci - name: Run eslint @@ -55,7 +55,7 @@ jobs: - name: Set up Node.js uses: actions/setup-node@v6 with: - node-version: '26' + node-version: 26 - name: Install dependencies run: npm ci - name: Execute API tests From a67f79eb2b02b9935eac7ae4c8b7b82f80c333f8 Mon Sep 17 00:00:00 2001 From: Oleksandr Khotemskyi Date: Thu, 26 Feb 2026 20:59:34 +0200 Subject: [PATCH 3/6] switch to 25.7 --- .github/workflows/pull_request.yml | 8 ++++---- .nvmrc | 2 +- Dockerfile | 2 +- package-lock.json | 3 +-- package.json | 2 +- 5 files changed, 8 insertions(+), 9 deletions(-) diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 3ba4bc57..04adc79f 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -11,7 +11,7 @@ jobs: - name: Set up Node.js uses: actions/setup-node@v6 with: - node-version: 26 + node-version: '25.7.0' - name: Install dependencies run: npm ci - name: Run prettier @@ -25,7 +25,7 @@ jobs: - name: Set up Node.js uses: actions/setup-node@v6 with: - node-version: 26 + node-version: '25.7.0' - name: Install dependencies run: npm ci - name: Run eslint @@ -40,7 +40,7 @@ jobs: # - name: Set up Node.js # uses: actions/setup-node@v6 # with: - # node-version: '26' + # node-version: '25.7.0' # - name: Install dependencies # run: npm ci # - name: Run unit tests @@ -55,7 +55,7 @@ jobs: - name: Set up Node.js uses: actions/setup-node@v6 with: - node-version: 26 + node-version: '25.7.0' - name: Install dependencies run: npm ci - name: Execute API tests diff --git a/.nvmrc b/.nvmrc index 6f4247a6..82a97dd3 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -26 +25.7.0 diff --git a/Dockerfile b/Dockerfile index 0293dec2..5e7dc1fd 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM node:26-alpine AS base +FROM node:25.7.0-alpine AS base # Install dependencies only when needed FROM base AS deps diff --git a/package-lock.json b/package-lock.json index b8a94932..0c61bfe9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -73,7 +73,7 @@ "typescript": "5.2.2" }, "engines": { - "node": ">=22.0.0" + "node": ">=22" } }, "node_modules/@alloc/quick-lru": { @@ -13565,7 +13565,6 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, "hasInstallScript": true, "license": "MIT", "optional": true, diff --git a/package.json b/package.json index d12d098a..25a5d7f5 100644 --- a/package.json +++ b/package.json @@ -78,6 +78,6 @@ "typescript": "5.2.2" }, "engines": { - "node": ">=26.0.0" + "node": ">=22" } } From 953ef905c9fef23117b6b65b38f0858a699ffca4 Mon Sep 17 00:00:00 2001 From: Oleksandr Khotemskyi Date: Thu, 26 Feb 2026 21:08:19 +0200 Subject: [PATCH 4/6] Update icons.tsx --- app/components/icons.tsx | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/app/components/icons.tsx b/app/components/icons.tsx index 6ecfa719..fcfc71da 100644 --- a/app/components/icons.tsx +++ b/app/components/icons.tsx @@ -55,6 +55,14 @@ export const CyborgTestIcon: FC = ({ size = 40, width, height, ... ); }; +export const SlackIcon: FC = ({ size = 40, width, height, ...props }) => { + return ( + + + + ); +}; + export const TelegramIcon: FC = ({ size = 40, width, height, ...props }) => { return ( From 606fec99cb04f4df6de343ebdc3cc2273f668131 Mon Sep 17 00:00:00 2001 From: Oleksandr Khotemskyi Date: Thu, 26 Feb 2026 21:24:34 +0200 Subject: [PATCH 5/6] Update fs.ts --- app/lib/storage/fs.ts | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/app/lib/storage/fs.ts b/app/lib/storage/fs.ts index c957b7e4..ace04362 100644 --- a/app/lib/storage/fs.ts +++ b/app/lib/storage/fs.ts @@ -220,18 +220,28 @@ export async function readReports(input?: ReadReportsInput): Promise !entry.isDirectory() && entry.name === 'index.html' && !(entry as any).path.endsWith('trace')) - .filter((entry) => (input?.ids ? input.ids.some((id) => (entry as any).path.includes(id)) : entry)) - .filter((entry) => (input?.project ? (entry as any).path.includes(input.project) : entry)); + .filter((entry) => { + const entryPath = (entry as any).path ?? (entry as any).parentPath; + return ( + !entry.isDirectory() && + entry.name === 'index.html' && + entryPath != null && + !entryPath.endsWith('trace') && + (input?.ids ? input.ids.some((id: string) => entryPath.includes(id)) : true) && + (input?.project ? entryPath.includes(input.project) : true) + ); + }); const stats = await processBatch( {}, reportEntries, 20, async (file) => { - const stat = await fs.stat((file as any).path); + const filePath = (file as any).path ?? (file as any).parentPath; + + const stat = await fs.stat(filePath); - return Object.assign(stat, { filePath: (file as any).path, createdAt: stat.birthtime }); + return Object.assign(stat, { filePath, createdAt: stat.birthtime }); }, ); From 6492cb478a3b35d5c19115a5e3131e7880d2e870 Mon Sep 17 00:00:00 2001 From: Oleksandr Khotemskyi Date: Thu, 26 Feb 2026 21:26:57 +0200 Subject: [PATCH 6/6] Update fs.ts --- app/lib/storage/fs.ts | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/app/lib/storage/fs.ts b/app/lib/storage/fs.ts index ace04362..3f552258 100644 --- a/app/lib/storage/fs.ts +++ b/app/lib/storage/fs.ts @@ -219,18 +219,17 @@ export async function readReports(input?: ReadReportsInput): Promise { - const entryPath = (entry as any).path ?? (entry as any).parentPath; - return ( - !entry.isDirectory() && - entry.name === 'index.html' && - entryPath != null && - !entryPath.endsWith('trace') && - (input?.ids ? input.ids.some((id: string) => entryPath.includes(id)) : true) && - (input?.project ? entryPath.includes(input.project) : true) - ); - }); + const reportEntries = entries.filter((entry) => { + const entryPath = (entry as any).path ?? (entry as any).parentPath; + return ( + !entry.isDirectory() && + entry.name === 'index.html' && + entryPath != null && + !entryPath.endsWith('trace') && + (input?.ids ? input.ids.some((id: string) => entryPath.includes(id)) : true) && + (input?.project ? entryPath.includes(input.project) : true) + ); + }); const stats = await processBatch( {},