chore(testing): Flock lock for playwright tests; Pin node version for OHIF; add more workers (#6099)
* update Cypress apt deps for Ubuntu Noble (drop libgconf-2-4, libasound2→libasound2t64)
This commit is contained in:
parent
75488298cd
commit
c205965f87
@ -8,7 +8,7 @@ orbs:
|
|||||||
|
|
||||||
defaults: &defaults
|
defaults: &defaults
|
||||||
docker:
|
docker:
|
||||||
- image: cimg/node:24.0.0
|
- image: cimg/node:24.15.0
|
||||||
environment:
|
environment:
|
||||||
TERM: xterm
|
TERM: xterm
|
||||||
QUICK_BUILD: true
|
QUICK_BUILD: true
|
||||||
@ -421,7 +421,7 @@ jobs:
|
|||||||
-o Acquire::Retries=3 \
|
-o Acquire::Retries=3 \
|
||||||
-o Acquire::http::Timeout=20 \
|
-o Acquire::http::Timeout=20 \
|
||||||
-o Acquire::https::Timeout=20
|
-o Acquire::https::Timeout=20
|
||||||
sudo apt-get install -y xvfb libgtk2.0-0 libgtk-3-0 libgbm-dev libnotify-dev libgconf-2-4 libnss3 libxss1 libasound2 libxtst6
|
sudo apt-get install -y xvfb libgtk2.0-0 libgtk-3-0 libgbm-dev libnotify-dev libnss3 libxss1 libasound2t64 libxtst6
|
||||||
- run:
|
- run:
|
||||||
name: Start Xvfb
|
name: Start Xvfb
|
||||||
command: Xvfb :99 -screen 0 1920x1080x24 &
|
command: Xvfb :99 -screen 0 1920x1080x24 &
|
||||||
|
|||||||
2
.github/workflows/build-docs.yml
vendored
2
.github/workflows/build-docs.yml
vendored
@ -27,7 +27,7 @@ jobs:
|
|||||||
- uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6.0.8
|
- uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6.0.8
|
||||||
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
||||||
with:
|
with:
|
||||||
node-version: 24
|
node-version: 24.15.0
|
||||||
cache: pnpm
|
cache: pnpm
|
||||||
|
|
||||||
- name: Configure git for private repos
|
- name: Configure git for private repos
|
||||||
|
|||||||
4
.github/workflows/playwright.yml
vendored
4
.github/workflows/playwright.yml
vendored
@ -27,7 +27,7 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
node-version: [24]
|
node-version: [24.15.0]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
||||||
with:
|
with:
|
||||||
@ -133,7 +133,7 @@ jobs:
|
|||||||
- name: Run Playwright tests
|
- name: Run Playwright tests
|
||||||
run: |
|
run: |
|
||||||
export NODE_OPTIONS="--max_old_space_size=10192"
|
export NODE_OPTIONS="--max_old_space_size=10192"
|
||||||
pnpm run test:e2e:coverage
|
bash .scripts/ci/with-nashua-lock.sh pnpm run test:e2e:coverage
|
||||||
|
|
||||||
# ── Common: collect test results and coverage ───────────────────────
|
# ── Common: collect test results and coverage ───────────────────────
|
||||||
- name: Create directory of test results
|
- name: Create directory of test results
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
24
|
24.15.0
|
||||||
|
|||||||
54
.scripts/ci/with-nashua-lock.sh
Normal file
54
.scripts/ci/with-nashua-lock.sh
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
#
|
||||||
|
# Run a command while holding the nashua Playwright mutex.
|
||||||
|
#
|
||||||
|
# Only one Playwright run may execute at a time on the shared nashua self-hosted
|
||||||
|
# runner — across THIS repo (OHIF) AND the cornerstone3D repo. GitHub's
|
||||||
|
# `concurrency:` is scoped per-repository and cannot coordinate across the two
|
||||||
|
# orgs, so the mutex lives on the box's filesystem.
|
||||||
|
#
|
||||||
|
# This is OHIF's own copy (the script can't be shared across separate repos). It
|
||||||
|
# MUST use the SAME lock path as cornerstone3D's copy (NASHUA_LOCK_FILE default
|
||||||
|
# below) — if the paths differ, the mutex silently does nothing.
|
||||||
|
#
|
||||||
|
# flock holds the lock via fd 9 and it releases automatically when the wrapped
|
||||||
|
# command exits — including on job cancel / timeout / SIGKILL — so there are no
|
||||||
|
# stale locks to clean up.
|
||||||
|
#
|
||||||
|
# Usage: .scripts/ci/with-nashua-lock.sh <command> [args...]
|
||||||
|
|
||||||
|
# Strict mode: -e abort on any unhandled command failure, -u treat use of an
|
||||||
|
# unset variable as an error, -o pipefail make a pipeline fail if ANY stage
|
||||||
|
# fails (not just the last). Catches mistakes early instead of pressing on.
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
LOCK="${NASHUA_LOCK_FILE:-/var/tmp/nashua-playwright.lock}" # MUST match cornerstone3D's copy
|
||||||
|
LOCK_WAIT="${NASHUA_LOCK_WAIT:-5400}" # max seconds to wait
|
||||||
|
|
||||||
|
# Guard: a command to wrap is required. With no arguments there is nothing to
|
||||||
|
# run, so print usage and exit instead of silently grabbing and releasing the
|
||||||
|
# lock for no reason (which would mask a mis-wired workflow step).
|
||||||
|
if [ "$#" -eq 0 ]; then
|
||||||
|
echo "usage: $0 <command> [args...]" >&2
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Open the lock file on fd 9 (read-write, create if missing, never truncate).
|
||||||
|
exec 9<>"$LOCK" || { echo "::error::cannot open lock file $LOCK"; exit 1; }
|
||||||
|
|
||||||
|
# Try instantly; if busy, report who holds it, then block up to LOCK_WAIT.
|
||||||
|
if ! flock -n 9; then
|
||||||
|
echo "nashua Playwright runner busy — held by: $(cat "${LOCK}.info" 2>/dev/null || echo unknown). Waiting up to ${LOCK_WAIT}s…"
|
||||||
|
if ! flock -w "$LOCK_WAIT" 9; then
|
||||||
|
echo "::error::Timed out after ${LOCK_WAIT}s waiting for the nashua Playwright lock"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Record the current holder for other jobs' "held by" message (best-effort).
|
||||||
|
echo "${GITHUB_REPOSITORY:-local}#${GITHUB_RUN_ID:-0} @ $(date -u +%FT%TZ 2>/dev/null || true)" > "${LOCK}.info" 2>/dev/null || true
|
||||||
|
echo "✅ Acquired nashua Playwright lock ($LOCK); running: $*"
|
||||||
|
|
||||||
|
# Replace the shell with the command. fd 9 is inherited (not close-on-exec), so
|
||||||
|
# the lock is held for the whole command and released when it exits.
|
||||||
|
exec "$@"
|
||||||
@ -23,7 +23,7 @@
|
|||||||
# Stage 1: Build the application
|
# Stage 1: Build the application
|
||||||
# docker build -t ohif/viewer:latest .
|
# docker build -t ohif/viewer:latest .
|
||||||
# Copy Files
|
# Copy Files
|
||||||
FROM node:24-slim as builder
|
FROM node:24.15.0-slim as builder
|
||||||
|
|
||||||
RUN apt-get update && apt-get install -y --no-install-recommends build-essential python3 \
|
RUN apt-get update && apt-get install -y --no-install-recommends build-essential python3 \
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|||||||
@ -15,7 +15,7 @@
|
|||||||
[build.environment]
|
[build.environment]
|
||||||
# If 'production', `pnpm install` does not install devDependencies
|
# If 'production', `pnpm install` does not install devDependencies
|
||||||
NODE_ENV = "development"
|
NODE_ENV = "development"
|
||||||
NODE_VERSION = "24"
|
NODE_VERSION = "24.15.0"
|
||||||
|
|
||||||
[[headers]]
|
[[headers]]
|
||||||
for = "/*"
|
for = "/*"
|
||||||
|
|||||||
@ -7,7 +7,7 @@ export default defineConfig({
|
|||||||
forbidOnly: !!process.env.CI,
|
forbidOnly: !!process.env.CI,
|
||||||
retries: process.env.CI ? 1 : 0,
|
retries: process.env.CI ? 1 : 0,
|
||||||
maxFailures: process.env.CI ? 10 : undefined,
|
maxFailures: process.env.CI ? 10 : undefined,
|
||||||
workers: process.env.CI ? 8 : undefined,
|
workers: process.env.CI ? 18 : undefined,
|
||||||
snapshotPathTemplate: './tests/screenshots{/projectName}/{testFilePath}/{arg}{ext}',
|
snapshotPathTemplate: './tests/screenshots{/projectName}/{testFilePath}/{arg}{ext}',
|
||||||
outputDir: './tests/test-results',
|
outputDir: './tests/test-results',
|
||||||
reporter: [['html', { outputFolder: './tests/playwright-report' }]],
|
reporter: [['html', { outputFolder: './tests/playwright-report' }]],
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user