Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
c06efed
Vue 3 migration: Phase 0 — skeleton & dual-serving infrastructure (#1…
Tim020 May 13, 2026
771f0fd
Vue 3 migration: Phase 1 — core infrastructure (#1033) (#1037)
Tim020 May 14, 2026
91faa26
Migrate Phase 2 read-only pages to Vue 3 (Home, About, Help) (#1038)
Tim020 May 14, 2026
8d44a46
Vue 3 migration: Phase 3 — authentication pages (Login, ForcePassword…
Tim020 May 14, 2026
28e5ea5
Vue 3 migration: Phase 4 — user settings page (/me) (#1041)
Tim020 May 17, 2026
e69a7a9
Vue 3 migration: Phase 5 — system configuration page (/config) (#1042)
Tim020 May 17, 2026
5bbc5b1
Vue 3 migration: Phase 6 — show configuration foundation (#1043)
Tim020 May 17, 2026
4792a8f
Vue 3 migration: Phase 7 — show configuration basic tabs (#1044)
Tim020 May 17, 2026
ac335d2
Vue 3 migration: Phase 8 — Cues & Sessions config tabs (#1045)
Tim020 May 17, 2026
77a12f0
Vue 3 Migration Phase 9: Microphone Configuration (#1048)
Tim020 May 17, 2026
c16889c
Vue 3 migration: Phase 10 — Stage configuration (#1049)
Tim020 May 18, 2026
9f398bf
Vue 3 migration: Phase 11 — Script & Revisions configuration (#1057)
Tim020 May 18, 2026
c67ae7a
Merge branch 'dev' into feature/vue3-migration
Tim020 May 18, 2026
2bb49ec
Phase 12: Live Show View (Vue 3 migration) (#1058)
Tim020 May 19, 2026
2a89e5b
Phase 12: Integrate unplugin-icons with Material Design Icons (#1059)
Tim020 May 19, 2026
b4f3d64
Phase 12c: Dual-UI integration (#1061)
Tim020 May 23, 2026
b2b9ec2
Phase 13: Electron support for Vue 3 frontend (#1070)
Tim020 May 23, 2026
444f036
Merge branch 'dev' into feature/vue3-migration
Tim020 May 23, 2026
1fb7903
Fix CodeQL alert 1154 and add client-v3 to CI tooling (#1071)
Tim020 May 23, 2026
03ced15
Fix SonarCloud reliability issues (PR #1036) (#1072)
Tim020 May 23, 2026
5265bf3
fix: resolve SonarCloud HIGH and MEDIUM maintainability issues (#1073)
Tim020 May 23, 2026
dca8a5f
fix: address critical error handling issues from PR #1036 review (#1074)
Tim020 May 23, 2026
2f4317a
Post-merge review fixes: 401 queuing, revision toasts, ws.onopen, log…
Tim020 May 23, 2026
c66000e
Fix 88 SonarQube maintainability issues on Vue 3 migration PR (#1076)
Tim020 May 24, 2026
f53fe77
Fix remaining SonarQube maintainability issues (round 2) (#1077)
Tim020 May 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,15 @@ updates:
update-types: ["version-update:semver-major"]
versioning-strategy: increase
target-branch: dev
- package-ecosystem: "npm"
directory: "/client-v3"
schedule:
interval: "daily"
ignore:
- dependency-name: "*"
update-types: ["version-update:semver-major"]
versioning-strategy: increase
target-branch: dev
- package-ecosystem: "npm"
directory: "/electron"
schedule:
Expand Down
3 changes: 3 additions & 0 deletions .github/labeler.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,9 @@ labels:
- label: "client"
files:
- "electron/.*"
- label: "client-v3"
files:
- "client-v3/.*"
- label: "server"
files:
- "server/.*"
17 changes: 17 additions & 0 deletions .github/workflows/build-server.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,23 @@ jobs:
cd client
npm run build

- name: Setup Node.js (V3)
uses: actions/setup-node@v4
with:
node-version: '24'
cache: 'npm'
cache-dependency-path: 'client-v3/package-lock.json'

- name: Install dependencies (V3)
run: |
cd client-v3
npm ci

- name: Build frontend (V3)
run: |
cd client-v3
npm run build

- name: Upload frontend build
uses: actions/upload-artifact@v4
with:
Expand Down
22 changes: 21 additions & 1 deletion .github/workflows/client-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,24 @@ jobs:
if: always()
with:
check_name: 'Client Test Results'
junit_files: '**/client/junit/*.xml'
junit_files: '**/client/junit/*.xml'
run-client-v3-tests:
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./client-v3
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 24
- name: Install dependencies
run: npm ci
- name: Run tests
run: npm run test:run
- name: Publish Test Results
uses: EnricoMi/publish-unit-test-result-action@v2
if: always()
with:
check_name: 'Client V3 Test Results'
junit_files: '**/client-v3/junit/*.xml'
25 changes: 25 additions & 0 deletions .github/workflows/nodelint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -53,3 +53,28 @@ jobs:
node-version: 24
- run: npm ci
- run: npm run typecheck
run-node-lint-client-v3:
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./client-v3
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 24
- run: npm ci
- run: npm run ci-lint
run-typecheck-client-v3:
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./client-v3
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 24
- run: npm ci
- run: npm run typecheck

20 changes: 14 additions & 6 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
FROM node:24-bookworm AS node_build
FROM node:24-bookworm AS build_v2

# npm 11 bundled with Node 24, no separate install needed
RUN mkdir -p /server/static

COPY /client/package.json /client/package.json
COPY /client/package-lock.json /client/package-lock.json
COPY /client/.npmrc /client/.npmrc
Expand All @@ -12,7 +10,15 @@ COPY /client /client
COPY /docs /docs
RUN npm run build

COPY /server /server
FROM node:24-bookworm AS build_v3

RUN mkdir -p /server/static/ui-new
COPY /client-v3/package.json /client-v3/package.json
COPY /client-v3/package-lock.json /client-v3/package-lock.json
WORKDIR /client-v3
RUN npm ci
COPY /client-v3 /client-v3
RUN npm run build

FROM python:3.13-bookworm

Expand All @@ -22,8 +28,10 @@ RUN pip install -r requirements.txt
RUN apt update
RUN apt install -y nano

COPY --from=node_build /server /server
COPY /server /server
COPY --from=build_v2 /server/static /server/static
COPY --from=build_v3 /server/static/ui-new /server/static/ui-new
WORKDIR /server
RUN mkdir conf
EXPOSE 8080
ENTRYPOINT ["python3", "main.py"]
ENTRYPOINT ["python3", "main.py"]
7 changes: 7 additions & 0 deletions client-v3/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
node_modules/
dist/
dist-electron/
junit/
coverage/
*.backup
components.d.ts
13 changes: 13 additions & 0 deletions client-v3/.prettierignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# Dependencies
node_modules/

# Build outputs
dist/
../server/static/

# Test outputs
coverage/
junit/

# Backups
*.backup
97 changes: 97 additions & 0 deletions client-v3/eslint.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
import js from '@eslint/js';
import pluginVue from 'eslint-plugin-vue';
import vueParser from 'vue-eslint-parser';
import globals from 'globals';
import tsParser from '@typescript-eslint/parser';
import tsPlugin from '@typescript-eslint/eslint-plugin';
import prettierConfig from 'eslint-config-prettier';
import prettierPlugin from 'eslint-plugin-prettier';
import tseslint from 'typescript-eslint';

const sharedRules = {
'prettier/prettier': 'error',
...prettierConfig.rules,
'max-len': 'off',
'no-unused-vars': 'off',
'vue/no-unused-vars': 'off',
'no-plusplus': 'off',
'no-param-reassign': [
'error',
{
props: true,
ignorePropertyModificationsFor: ['state', 'acc', 'e'],
},
],
};

const tsRules = {
...Object.assign({}, ...tseslint.configs.recommended.map((c) => c.rules ?? {})),
'@typescript-eslint/no-explicit-any': 'off',
'@typescript-eslint/no-unused-vars': 'off',
};

const sharedGlobals = {
...globals.browser,
...globals.node,
...globals.es2021,
};

export default [
{
ignores: [
'**/node_modules/**',
'**/dist/**',
'../server/static/**',
'junit/**',
'*.backup',
],
},
js.configs.recommended,
...pluginVue.configs['flat/recommended'],
// TypeScript source files
{
files: ['**/*.ts'],
plugins: {
'@typescript-eslint': tsPlugin,
prettier: prettierPlugin,
},
languageOptions: {
parser: tsParser,
parserOptions: { ecmaVersion: 2022, sourceType: 'module' },
globals: sharedGlobals,
},
rules: { ...tsRules, ...sharedRules },
},
// Vue SFCs — all use <script lang="ts">
{
files: ['**/*.vue'],
plugins: {
'@typescript-eslint': tsPlugin,
prettier: prettierPlugin,
},
languageOptions: {
parser: vueParser,
parserOptions: {
parser: tsParser,
ecmaVersion: 2022,
sourceType: 'module',
},
globals: sharedGlobals,
},
rules: { ...tsRules, ...sharedRules },
},
// Test files — declare vitest globals
{
files: ['**/*.test.ts'],
languageOptions: {
globals: {
describe: 'readonly',
it: 'readonly',
expect: 'readonly',
vi: 'readonly',
beforeEach: 'readonly',
afterEach: 'readonly',
},
},
},
];
12 changes: 12 additions & 0 deletions client-v3/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>DigiScript</title>
</head>
<body>
<div id="app"></div>
<script type="module" src="./src/main.ts"></script>
</body>
</html>
Loading
Loading