Skip to content

RI-7955: add E2E tests workflow#5435

Open
KrumTy wants to merge 35 commits intomainfrom
feature/RI-7955/e2e-workflows
Open

RI-7955: add E2E tests workflow#5435
KrumTy wants to merge 35 commits intomainfrom
feature/RI-7955/e2e-workflows

Conversation

@KrumTy
Copy link
Contributor

@KrumTy KrumTy commented Feb 3, 2026

What

Introduces a new GitHub Actions workflow for running E2E Playwright tests across multiple environments:

  • Chromium (Dev) - Tests against local dev server (API + UI)
  • Docker - Tests against the Docker container image
  • Electron (Linux) - Tests against the Linux AppImage
Screenshot 2026-02-05 at 16 25 58

The workflow is modular, using reusable workflows for each test type:

  • tests-e2e-playwright-v2.yml - Main orchestration
  • tests-e2e-playwright-chromium.yml - Chromium (Dev) tests
  • tests-e2e-playwright-docker.yml - Docker tests
  • tests-e2e-playwright-electron.yml - Electron tests
  • tests-e2e-playwright-lint.yml - Lint & type check
  • /actions/setup-e2e-playwright/action.yml - Install and cache dependencies

Triggers:

  • Manual dispatch
  • PR with e2e-tests label added
  • Nightly schedule (0 AM UTC)

Optimizations:

  • Caching for node_modules and Playwright browsers via composite action
  • Lint job runs first - all tests/builds depend on it to fail fast
  • Concurrency control to cancel outdated runs

Testing

  1. Add e2e-tests label to trigger the workflow on a PR
  2. Or trigger manually via Actions tab (once deployed to main)
  3. Verify all three test modes pass (Chromium, Docker, Electron)

Note

Medium Risk
Mostly CI/workflow and test-harness changes, but it adds new scheduled/PR-triggered jobs and touches Electron test authentication setup, which could cause flaky runs or unexpected CI load if misconfigured.

Overview
Adds a new modular GitHub Actions Playwright E2E pipeline (tests-e2e-playwright-v2.yml) that can run on manual dispatch, nightly schedule, or when an e2e-tests label is added to a PR, orchestrating lint/type-check plus Chromium (dev server), Docker-image, and Linux Electron/AppImage test runs.

Introduces a composite action (setup-e2e-playwright) to install Node/Yarn deps and Playwright browsers with caching, and updates Playwright test fixtures/helpers to support Electron API auth via an X-Window-Id header (extracted from the first Electron window) while also skipping onboarding via localStorage; updates one browser-page locator to use a stable data-testid.

Written by Cursor Bugbot for commit 8209d44. This will update automatically on new commits. Configure here.

@KrumTy KrumTy added e2e-tests and removed e2e-tests labels Feb 3, 2026
@github-actions
Copy link
Contributor

github-actions bot commented Feb 3, 2026

Code Coverage - Backend unit tests

St.
Category Percentage Covered / Total
🟢 Statements 92.5% 14263/15419
🟡 Branches 74.37% 4395/5910
🟢 Functions 86.23% 2204/2556
🟢 Lines 92.31% 13633/14768

Test suite run success

3063 tests passing in 292 suites.

Report generated by 🧪jest coverage report action from 8209d44

@github-actions
Copy link
Contributor

github-actions bot commented Feb 3, 2026

Code Coverage - Integration Tests

Status Category Percentage Covered / Total
🟢 Statements 80.78% 16522/20451
🟡 Branches 63.68% 7482/11748
🟡 Functions 69.42% 2305/3320
🟢 Lines 80.39% 15537/19325

@KrumTy KrumTy added e2e-tests and removed e2e-tests labels Feb 3, 2026
@KrumTy KrumTy added e2e-tests and removed e2e-tests labels Feb 3, 2026
@KrumTy KrumTy added e2e-tests and removed e2e-tests labels Feb 3, 2026
@KrumTy KrumTy added e2e-tests and removed e2e-tests labels Feb 4, 2026
@KrumTy KrumTy added e2e-tests and removed e2e-tests labels Feb 4, 2026
@KrumTy KrumTy added e2e-tests and removed e2e-tests labels Feb 4, 2026
@KrumTy KrumTy added e2e-tests and removed e2e-tests labels Feb 4, 2026
@KrumTy KrumTy removed the e2e-tests label Feb 4, 2026
@KrumTy KrumTy added e2e-tests and removed e2e-tests labels Feb 5, 2026
@KrumTy KrumTy added e2e-tests and removed e2e-tests labels Feb 5, 2026
@KrumTy KrumTy added e2e-tests and removed e2e-tests labels Feb 5, 2026
@jit-ci

This comment has been minimized.

@KrumTy KrumTy added e2e-tests and removed e2e-tests labels Feb 5, 2026
@jit-ci

This comment has been minimized.

@KrumTy KrumTy added e2e-tests and removed e2e-tests labels Feb 5, 2026
@jit-ci

This comment has been minimized.

@KrumTy KrumTy added e2e-tests and removed e2e-tests labels Feb 5, 2026
@KrumTy KrumTy changed the title feat(e2e): add E2E tests workflow RI-7955: add E2E tests workflow Feb 5, 2026
@KrumTy KrumTy marked this pull request as ready for review February 5, 2026 14:31

# Nightly schedule (0 AM UTC)
schedule:
- cron: '0 0 * * *'
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

IMO, we can postpone this until we have a valuable suite, to prevent wasting resources

Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 2 potential issues.

uses: actions/cache@v4
with:
path: ${{ inputs.working-directory }}/node_modules
key: e2e-node-modules-${{ runner.os }}-${{ hashFiles('tests/e2e-playwright/yarn.lock') }}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cache keys ignore configurable working-directory input

Medium Severity

The cache keys for both node_modules and Playwright browsers hardcode tests/e2e-playwright/yarn.lock instead of using ${{ inputs.working-directory }}. The action accepts a configurable working-directory input and correctly uses it for the cache path and working-directory of commands, but the cache key still references the hardcoded path. If the input is ever set to a different directory, the cache would be keyed against the wrong yarn.lock file, potentially causing stale dependencies to be restored or cache misses when hits are expected.

Additional Locations (1)

Fix in Cursor Fix in Web

},

apiHelper: async ({ apiUrl, electronApp }, use) => {
void electronApp; // Ensure Electron app is ready before making API calls
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Electron app process leaks if initialization fails

Medium Severity

The electronApp fixture launches an Electron process at line 56, but the cleanup code at line 106 (electronApp.close()) only runs after use() completes. If any initialization code between lines 72-95 throws an exception (e.g., windowId not available, API health check fails, or timeout), the use() call is never reached and the teardown code never executes. This leaves orphaned Electron processes running. The launch and cleanup need to be wrapped in try/finally to ensure the app is closed even when initialization fails.

Fix in Cursor Fix in Web

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants