From edac41e6bfd97fefe2dc9b1ff558c14f91ad67d6 Mon Sep 17 00:00:00 2001
From: wordingone <126381556+wordingone@users.noreply.github.com>
Date: Fri, 29 Aug 2025 20:22:40 -0700
Subject: [PATCH] feat: scaffold separated e2e packages
---
.github/workflows/ci.yml | 42 +++++++++++++++++++++++++
LumenIO/bootstrap.xml | 17 ++++++++++
e2e/e2e-mobile/package.json | 10 ++++++
e2e/e2e-mobile/playwright.config.js | 8 +++++
e2e/e2e-mobile/tests/smoke.spec.ts | 5 +++
e2e/e2e-mobileproj/package.json | 10 ++++++
e2e/e2e-mobileproj/playwright.config.js | 8 +++++
e2e/e2e-mobileproj/tests/smoke.spec.ts | 5 +++
e2e/e2e-pc/package.json | 10 ++++++
e2e/e2e-pc/playwright.config.js | 8 +++++
e2e/e2e-pc/tests/smoke.spec.ts | 5 +++
e2e/e2e-pcproj/package.json | 10 ++++++
e2e/e2e-pcproj/playwright.config.js | 8 +++++
e2e/e2e-pcproj/tests/smoke.spec.ts | 5 +++
e2e/e2e-standalone/package.json | 10 ++++++
e2e/e2e-standalone/playwright.config.js | 8 +++++
e2e/e2e-standalone/tests/smoke.spec.ts | 5 +++
e2e/e2e-wearables/package.json | 10 ++++++
e2e/e2e-wearables/playwright.config.js | 8 +++++
e2e/e2e-wearables/tests/smoke.spec.ts | 5 +++
scripts/scaffold-mobile.sh | 26 +++++++++++++++
scripts/scaffold-mobileproj.sh | 26 +++++++++++++++
scripts/scaffold-pc.sh | 26 +++++++++++++++
scripts/scaffold-pcproj.sh | 26 +++++++++++++++
scripts/scaffold-standalone.sh | 26 +++++++++++++++
scripts/scaffold-wearables.sh | 26 +++++++++++++++
26 files changed, 353 insertions(+)
create mode 100644 .github/workflows/ci.yml
create mode 100644 e2e/e2e-mobile/package.json
create mode 100644 e2e/e2e-mobile/playwright.config.js
create mode 100644 e2e/e2e-mobile/tests/smoke.spec.ts
create mode 100644 e2e/e2e-mobileproj/package.json
create mode 100644 e2e/e2e-mobileproj/playwright.config.js
create mode 100644 e2e/e2e-mobileproj/tests/smoke.spec.ts
create mode 100644 e2e/e2e-pc/package.json
create mode 100644 e2e/e2e-pc/playwright.config.js
create mode 100644 e2e/e2e-pc/tests/smoke.spec.ts
create mode 100644 e2e/e2e-pcproj/package.json
create mode 100644 e2e/e2e-pcproj/playwright.config.js
create mode 100644 e2e/e2e-pcproj/tests/smoke.spec.ts
create mode 100644 e2e/e2e-standalone/package.json
create mode 100644 e2e/e2e-standalone/playwright.config.js
create mode 100644 e2e/e2e-standalone/tests/smoke.spec.ts
create mode 100644 e2e/e2e-wearables/package.json
create mode 100644 e2e/e2e-wearables/playwright.config.js
create mode 100644 e2e/e2e-wearables/tests/smoke.spec.ts
create mode 100755 scripts/scaffold-mobile.sh
create mode 100755 scripts/scaffold-mobileproj.sh
create mode 100755 scripts/scaffold-pc.sh
create mode 100755 scripts/scaffold-pcproj.sh
create mode 100755 scripts/scaffold-standalone.sh
create mode 100755 scripts/scaffold-wearables.sh
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 0000000..380fc71
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,42 @@
+name: CI
+
+on:
+ push:
+ branches: [ main ]
+ pull_request:
+
+jobs:
+ core:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: actions/setup-node@v4
+ with:
+ node-version: 20
+ - run: cd core && npm test
+
+ variants:
+ needs: core
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ variant: [ pc, mobile, pcproj, mobileproj, standalone, wearables ]
+ steps:
+ - uses: actions/checkout@v4
+ - uses: actions/setup-node@v4
+ with:
+ node-version: 20
+ - run: cd variants/${{ matrix.variant }} && npm test
+
+ e2e:
+ needs: variants
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ package: [ e2e-pc, e2e-mobile, e2e-pcproj, e2e-mobileproj, e2e-standalone, e2e-wearables ]
+ steps:
+ - uses: actions/checkout@v4
+ - uses: actions/setup-node@v4
+ with:
+ node-version: 20
+ - run: cd e2e/${{ matrix.package }} && npm test
diff --git a/LumenIO/bootstrap.xml b/LumenIO/bootstrap.xml
index 75981f5..fb6ee39 100644
--- a/LumenIO/bootstrap.xml
+++ b/LumenIO/bootstrap.xml
@@ -24,6 +24,23 @@
WebRTC/WebGPU/WebXR
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
LumenIO
bootstrap.xml
diff --git a/e2e/e2e-mobile/package.json b/e2e/e2e-mobile/package.json
new file mode 100644
index 0000000..7fe7f75
--- /dev/null
+++ b/e2e/e2e-mobile/package.json
@@ -0,0 +1,10 @@
+{
+ "name": "@lumenio/e2e-mobile",
+ "private": true,
+ "devDependencies": {
+ "@playwright/test": "^1.41.1"
+ },
+ "scripts": {
+ "test": "playwright test"
+ }
+}
diff --git a/e2e/e2e-mobile/playwright.config.js b/e2e/e2e-mobile/playwright.config.js
new file mode 100644
index 0000000..2c128c9
--- /dev/null
+++ b/e2e/e2e-mobile/playwright.config.js
@@ -0,0 +1,8 @@
+import { defineConfig, devices } from '@playwright/test';
+
+export default defineConfig({
+ testDir: './tests',
+ projects: [
+ { name: 'Pixel 5', use: { ...devices['Pixel 5'] } }
+ ]
+});
diff --git a/e2e/e2e-mobile/tests/smoke.spec.ts b/e2e/e2e-mobile/tests/smoke.spec.ts
new file mode 100644
index 0000000..ff68a50
--- /dev/null
+++ b/e2e/e2e-mobile/tests/smoke.spec.ts
@@ -0,0 +1,5 @@
+import { test, expect } from '@playwright/test';
+
+test('smoke', async () => {
+ expect(true).toBeTruthy();
+});
diff --git a/e2e/e2e-mobileproj/package.json b/e2e/e2e-mobileproj/package.json
new file mode 100644
index 0000000..adef00c
--- /dev/null
+++ b/e2e/e2e-mobileproj/package.json
@@ -0,0 +1,10 @@
+{
+ "name": "@lumenio/e2e-mobileproj",
+ "private": true,
+ "devDependencies": {
+ "@playwright/test": "^1.41.1"
+ },
+ "scripts": {
+ "test": "playwright test"
+ }
+}
diff --git a/e2e/e2e-mobileproj/playwright.config.js b/e2e/e2e-mobileproj/playwright.config.js
new file mode 100644
index 0000000..2c128c9
--- /dev/null
+++ b/e2e/e2e-mobileproj/playwright.config.js
@@ -0,0 +1,8 @@
+import { defineConfig, devices } from '@playwright/test';
+
+export default defineConfig({
+ testDir: './tests',
+ projects: [
+ { name: 'Pixel 5', use: { ...devices['Pixel 5'] } }
+ ]
+});
diff --git a/e2e/e2e-mobileproj/tests/smoke.spec.ts b/e2e/e2e-mobileproj/tests/smoke.spec.ts
new file mode 100644
index 0000000..ff68a50
--- /dev/null
+++ b/e2e/e2e-mobileproj/tests/smoke.spec.ts
@@ -0,0 +1,5 @@
+import { test, expect } from '@playwright/test';
+
+test('smoke', async () => {
+ expect(true).toBeTruthy();
+});
diff --git a/e2e/e2e-pc/package.json b/e2e/e2e-pc/package.json
new file mode 100644
index 0000000..0935db1
--- /dev/null
+++ b/e2e/e2e-pc/package.json
@@ -0,0 +1,10 @@
+{
+ "name": "@lumenio/e2e-pc",
+ "private": true,
+ "devDependencies": {
+ "@playwright/test": "^1.41.1"
+ },
+ "scripts": {
+ "test": "playwright test"
+ }
+}
diff --git a/e2e/e2e-pc/playwright.config.js b/e2e/e2e-pc/playwright.config.js
new file mode 100644
index 0000000..81e11d4
--- /dev/null
+++ b/e2e/e2e-pc/playwright.config.js
@@ -0,0 +1,8 @@
+import { defineConfig, devices } from '@playwright/test';
+
+export default defineConfig({
+ testDir: './tests',
+ projects: [
+ { name: 'Desktop Chrome', use: { ...devices['Desktop Chrome'] } }
+ ]
+});
diff --git a/e2e/e2e-pc/tests/smoke.spec.ts b/e2e/e2e-pc/tests/smoke.spec.ts
new file mode 100644
index 0000000..ff68a50
--- /dev/null
+++ b/e2e/e2e-pc/tests/smoke.spec.ts
@@ -0,0 +1,5 @@
+import { test, expect } from '@playwright/test';
+
+test('smoke', async () => {
+ expect(true).toBeTruthy();
+});
diff --git a/e2e/e2e-pcproj/package.json b/e2e/e2e-pcproj/package.json
new file mode 100644
index 0000000..07403f3
--- /dev/null
+++ b/e2e/e2e-pcproj/package.json
@@ -0,0 +1,10 @@
+{
+ "name": "@lumenio/e2e-pcproj",
+ "private": true,
+ "devDependencies": {
+ "@playwright/test": "^1.41.1"
+ },
+ "scripts": {
+ "test": "playwright test"
+ }
+}
diff --git a/e2e/e2e-pcproj/playwright.config.js b/e2e/e2e-pcproj/playwright.config.js
new file mode 100644
index 0000000..81e11d4
--- /dev/null
+++ b/e2e/e2e-pcproj/playwright.config.js
@@ -0,0 +1,8 @@
+import { defineConfig, devices } from '@playwright/test';
+
+export default defineConfig({
+ testDir: './tests',
+ projects: [
+ { name: 'Desktop Chrome', use: { ...devices['Desktop Chrome'] } }
+ ]
+});
diff --git a/e2e/e2e-pcproj/tests/smoke.spec.ts b/e2e/e2e-pcproj/tests/smoke.spec.ts
new file mode 100644
index 0000000..ff68a50
--- /dev/null
+++ b/e2e/e2e-pcproj/tests/smoke.spec.ts
@@ -0,0 +1,5 @@
+import { test, expect } from '@playwright/test';
+
+test('smoke', async () => {
+ expect(true).toBeTruthy();
+});
diff --git a/e2e/e2e-standalone/package.json b/e2e/e2e-standalone/package.json
new file mode 100644
index 0000000..48e22c3
--- /dev/null
+++ b/e2e/e2e-standalone/package.json
@@ -0,0 +1,10 @@
+{
+ "name": "@lumenio/e2e-standalone",
+ "private": true,
+ "devDependencies": {
+ "@playwright/test": "^1.41.1"
+ },
+ "scripts": {
+ "test": "playwright test"
+ }
+}
diff --git a/e2e/e2e-standalone/playwright.config.js b/e2e/e2e-standalone/playwright.config.js
new file mode 100644
index 0000000..81e11d4
--- /dev/null
+++ b/e2e/e2e-standalone/playwright.config.js
@@ -0,0 +1,8 @@
+import { defineConfig, devices } from '@playwright/test';
+
+export default defineConfig({
+ testDir: './tests',
+ projects: [
+ { name: 'Desktop Chrome', use: { ...devices['Desktop Chrome'] } }
+ ]
+});
diff --git a/e2e/e2e-standalone/tests/smoke.spec.ts b/e2e/e2e-standalone/tests/smoke.spec.ts
new file mode 100644
index 0000000..ff68a50
--- /dev/null
+++ b/e2e/e2e-standalone/tests/smoke.spec.ts
@@ -0,0 +1,5 @@
+import { test, expect } from '@playwright/test';
+
+test('smoke', async () => {
+ expect(true).toBeTruthy();
+});
diff --git a/e2e/e2e-wearables/package.json b/e2e/e2e-wearables/package.json
new file mode 100644
index 0000000..90fca35
--- /dev/null
+++ b/e2e/e2e-wearables/package.json
@@ -0,0 +1,10 @@
+{
+ "name": "@lumenio/e2e-wearables",
+ "private": true,
+ "devDependencies": {
+ "@playwright/test": "^1.41.1"
+ },
+ "scripts": {
+ "test": "playwright test"
+ }
+}
diff --git a/e2e/e2e-wearables/playwright.config.js b/e2e/e2e-wearables/playwright.config.js
new file mode 100644
index 0000000..2c128c9
--- /dev/null
+++ b/e2e/e2e-wearables/playwright.config.js
@@ -0,0 +1,8 @@
+import { defineConfig, devices } from '@playwright/test';
+
+export default defineConfig({
+ testDir: './tests',
+ projects: [
+ { name: 'Pixel 5', use: { ...devices['Pixel 5'] } }
+ ]
+});
diff --git a/e2e/e2e-wearables/tests/smoke.spec.ts b/e2e/e2e-wearables/tests/smoke.spec.ts
new file mode 100644
index 0000000..ff68a50
--- /dev/null
+++ b/e2e/e2e-wearables/tests/smoke.spec.ts
@@ -0,0 +1,5 @@
+import { test, expect } from '@playwright/test';
+
+test('smoke', async () => {
+ expect(true).toBeTruthy();
+});
diff --git a/scripts/scaffold-mobile.sh b/scripts/scaffold-mobile.sh
new file mode 100755
index 0000000..1b26472
--- /dev/null
+++ b/scripts/scaffold-mobile.sh
@@ -0,0 +1,26 @@
+#!/bin/bash
+set -e
+NAME="mobile"
+DIR="variants/mobile"
+mkdir -p "$DIR/tests"
+cat > "$DIR/package.json" <<'JSON'
+{
+ "name": "@lumenio/mobile",
+ "private": true,
+ "scripts": {
+ "test": "vitest"
+ },
+ "devDependencies": {
+ "vitest": "^1.0.0"
+ }
+}
+JSON
+cat > "$DIR/tests/sample.spec.ts" <<'TS'
+import { describe, it, expect } from 'vitest';
+
+describe('sample', () => {
+ it('works', () => {
+ expect(true).toBe(true);
+ });
+});
+TS
diff --git a/scripts/scaffold-mobileproj.sh b/scripts/scaffold-mobileproj.sh
new file mode 100755
index 0000000..1ab8b72
--- /dev/null
+++ b/scripts/scaffold-mobileproj.sh
@@ -0,0 +1,26 @@
+#!/bin/bash
+set -e
+NAME="mobileproj"
+DIR="variants/mobileproj"
+mkdir -p "$DIR/tests"
+cat > "$DIR/package.json" <<'JSON'
+{
+ "name": "@lumenio/mobileproj",
+ "private": true,
+ "scripts": {
+ "test": "vitest"
+ },
+ "devDependencies": {
+ "vitest": "^1.0.0"
+ }
+}
+JSON
+cat > "$DIR/tests/sample.spec.ts" <<'TS'
+import { describe, it, expect } from 'vitest';
+
+describe('sample', () => {
+ it('works', () => {
+ expect(true).toBe(true);
+ });
+});
+TS
diff --git a/scripts/scaffold-pc.sh b/scripts/scaffold-pc.sh
new file mode 100755
index 0000000..e365666
--- /dev/null
+++ b/scripts/scaffold-pc.sh
@@ -0,0 +1,26 @@
+#!/bin/bash
+set -e
+NAME="pc"
+DIR="variants/pc"
+mkdir -p "$DIR/tests"
+cat > "$DIR/package.json" <<'JSON'
+{
+ "name": "@lumenio/pc",
+ "private": true,
+ "scripts": {
+ "test": "vitest"
+ },
+ "devDependencies": {
+ "vitest": "^1.0.0"
+ }
+}
+JSON
+cat > "$DIR/tests/sample.spec.ts" <<'TS'
+import { describe, it, expect } from 'vitest';
+
+describe('sample', () => {
+ it('works', () => {
+ expect(true).toBe(true);
+ });
+});
+TS
diff --git a/scripts/scaffold-pcproj.sh b/scripts/scaffold-pcproj.sh
new file mode 100755
index 0000000..d8fb9c5
--- /dev/null
+++ b/scripts/scaffold-pcproj.sh
@@ -0,0 +1,26 @@
+#!/bin/bash
+set -e
+NAME="pcproj"
+DIR="variants/pcproj"
+mkdir -p "$DIR/tests"
+cat > "$DIR/package.json" <<'JSON'
+{
+ "name": "@lumenio/pcproj",
+ "private": true,
+ "scripts": {
+ "test": "vitest"
+ },
+ "devDependencies": {
+ "vitest": "^1.0.0"
+ }
+}
+JSON
+cat > "$DIR/tests/sample.spec.ts" <<'TS'
+import { describe, it, expect } from 'vitest';
+
+describe('sample', () => {
+ it('works', () => {
+ expect(true).toBe(true);
+ });
+});
+TS
diff --git a/scripts/scaffold-standalone.sh b/scripts/scaffold-standalone.sh
new file mode 100755
index 0000000..2c76921
--- /dev/null
+++ b/scripts/scaffold-standalone.sh
@@ -0,0 +1,26 @@
+#!/bin/bash
+set -e
+NAME="standalone"
+DIR="variants/standalone"
+mkdir -p "$DIR/tests"
+cat > "$DIR/package.json" <<'JSON'
+{
+ "name": "@lumenio/standalone",
+ "private": true,
+ "scripts": {
+ "test": "vitest"
+ },
+ "devDependencies": {
+ "vitest": "^1.0.0"
+ }
+}
+JSON
+cat > "$DIR/tests/sample.spec.ts" <<'TS'
+import { describe, it, expect } from 'vitest';
+
+describe('sample', () => {
+ it('works', () => {
+ expect(true).toBe(true);
+ });
+});
+TS
diff --git a/scripts/scaffold-wearables.sh b/scripts/scaffold-wearables.sh
new file mode 100755
index 0000000..981978e
--- /dev/null
+++ b/scripts/scaffold-wearables.sh
@@ -0,0 +1,26 @@
+#!/bin/bash
+set -e
+NAME="wearables"
+DIR="variants/wearables"
+mkdir -p "$DIR/tests"
+cat > "$DIR/package.json" <<'JSON'
+{
+ "name": "@lumenio/wearables",
+ "private": true,
+ "scripts": {
+ "test": "vitest"
+ },
+ "devDependencies": {
+ "vitest": "^1.0.0"
+ }
+}
+JSON
+cat > "$DIR/tests/sample.spec.ts" <<'TS'
+import { describe, it, expect } from 'vitest';
+
+describe('sample', () => {
+ it('works', () => {
+ expect(true).toBe(true);
+ });
+});
+TS