Skip to content

Commit a444532

Browse files
NookieAIclaude
andcommitted
Release v2.4.5 — bug fixes, security hardening & UX polish
Bug fixes: - Fix undefined err() crash in PS5 auto-connect error path - offScanProgress now removes only its own listener (was removeAllListeners) - PPSA-only layout conflict check now includes version suffix (matches transfer path) Security: - Local API CORS restricted to localhost origins (was Access-Control-Allow-Origin: *) - API request bodies over 512KB are now rejected and the socket destroyed (no buffering) Reliability: - Windows auto-update retry loop is now bounded (was infinite on permanent copy failure) UI/UX: - Esc + backdrop close on all modals; keyboard shortcuts no longer fire while typing - Toast timeouts no longer stack; light-theme row hover/zebra now visible - aria-labels on dropdowns; for= on FTP form labels Housekeeping: - Remove dead FtpConnectionPool + duplicated skip-list; hoist FTP skip-list to module constant - .gitignore excludes runtime _logs/ and archives - CI consolidated into build-all.yml (Windows + macOS + Linux); build-mac-linux.yml is manual-only - Fix macOS build: mac.icon -> assets/icon.png (icon.icns was missing) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent bebb402 commit a444532

24 files changed

Lines changed: 16279 additions & 1466 deletions

.github/workflows/build-all.yml

Lines changed: 143 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
1+
name: Build All Platforms
2+
3+
on:
4+
workflow_dispatch:
5+
inputs:
6+
tag:
7+
description: 'Release tag (e.g. v2.1.0) — must already exist in Releases'
8+
required: true
9+
default: 'v2.1.0'
10+
push:
11+
tags:
12+
- 'v*'
13+
14+
jobs:
15+
# ── Windows ─────────────────────────────────────────────────────────────────
16+
build-windows:
17+
name: Build Windows (Portable EXE)
18+
runs-on: windows-latest
19+
permissions:
20+
contents: write
21+
22+
steps:
23+
- uses: actions/checkout@v4
24+
with:
25+
ref: main
26+
27+
- name: Setup Node.js
28+
uses: actions/setup-node@v4
29+
with:
30+
node-version: '20'
31+
cache: 'npm'
32+
33+
- name: Install dependencies
34+
run: npm ci
35+
36+
- name: Build Windows portable EXE
37+
run: npx electron-builder --win portable --x64
38+
env:
39+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
40+
41+
- name: Upload Windows artifacts
42+
uses: softprops/action-gh-release@v2
43+
with:
44+
tag_name: ${{ github.event.inputs.tag || github.ref_name }}
45+
files: |
46+
dist/*.exe
47+
fail_on_unmatched_files: false
48+
env:
49+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
50+
51+
# ── macOS ────────────────────────────────────────────────────────────────────
52+
build-macos:
53+
name: Build macOS (DMG — x64 + arm64)
54+
runs-on: macos-latest
55+
permissions:
56+
contents: write
57+
58+
steps:
59+
- uses: actions/checkout@v4
60+
with:
61+
ref: main
62+
63+
- name: Setup Node.js
64+
uses: actions/setup-node@v4
65+
with:
66+
node-version: '20'
67+
cache: 'npm'
68+
69+
- name: Install dependencies
70+
run: npm ci
71+
72+
- name: Build macOS DMG (x64 + arm64)
73+
run: npx electron-builder --mac dmg --x64 --arm64
74+
env:
75+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
76+
CSC_IDENTITY_AUTO_DISCOVERY: false # no Apple cert in CI — skip codesigning
77+
78+
- name: Upload macOS artifacts
79+
uses: softprops/action-gh-release@v2
80+
with:
81+
tag_name: ${{ github.event.inputs.tag || github.ref_name }}
82+
files: |
83+
dist/*.dmg
84+
fail_on_unmatched_files: false
85+
env:
86+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
87+
88+
# ── Linux ────────────────────────────────────────────────────────────────────
89+
build-linux:
90+
name: Build Linux (AppImage)
91+
runs-on: ubuntu-latest
92+
permissions:
93+
contents: write
94+
95+
steps:
96+
- uses: actions/checkout@v4
97+
with:
98+
ref: main
99+
100+
- name: Setup Node.js
101+
uses: actions/setup-node@v4
102+
with:
103+
node-version: '20'
104+
cache: 'npm'
105+
106+
- name: Install Linux build dependencies
107+
run: |
108+
sudo apt-get update -y
109+
sudo apt-get install -y \
110+
libgtk-3-dev \
111+
libxss1 \
112+
libasound2-dev \
113+
libgbm-dev \
114+
libxtst6 \
115+
libnss3-dev \
116+
libatk1.0-0 \
117+
libatk-bridge2.0-0 \
118+
libcups2 \
119+
libdrm2 \
120+
libxcomposite1 \
121+
libxdamage1 \
122+
libxrandr2 \
123+
libpango-1.0-0 \
124+
libcairo2 \
125+
fuse
126+
127+
- name: Install dependencies
128+
run: npm ci
129+
130+
- name: Build Linux AppImage (x64)
131+
run: npx electron-builder --linux AppImage --x64
132+
env:
133+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
134+
135+
- name: Upload Linux artifacts
136+
uses: softprops/action-gh-release@v2
137+
with:
138+
tag_name: ${{ github.event.inputs.tag || github.ref_name }}
139+
files: |
140+
dist/*.AppImage
141+
fail_on_unmatched_files: false
142+
env:
143+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

.github/workflows/build-mac-linux.yml

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,16 @@
1-
name: Build macOS & Linux
1+
name: Build macOS & Linux (manual only — superseded by build-all.yml)
22

3+
# NOTE: The cross-platform release build is handled by build-all.yml, which runs
4+
# on every `v*` tag push and builds Windows + macOS + Linux together. This file is
5+
# kept for manual, platform-specific reruns only and intentionally does NOT trigger
6+
# on tag pushes (doing so would double-build macOS/Linux and double-upload artifacts).
37
on:
4-
# Allow manual trigger to build for the current v2.1.0 release right now
58
workflow_dispatch:
69
inputs:
710
tag:
8-
description: 'Release tag to upload artifacts to (e.g. v2.1.0)'
11+
description: 'Release tag to upload artifacts to (e.g. v2.4.5) — must already exist in Releases'
912
required: true
10-
default: 'v2.1.0'
11-
12-
# Also run automatically on future version tags
13-
push:
14-
tags:
15-
- 'v*'
13+
default: 'v2.4.5'
1614

1715
jobs:
1816
# ── macOS ──────────────────────────────────────────────────────────────────
@@ -24,33 +22,32 @@ jobs:
2422
steps:
2523
- uses: actions/checkout@v4
2624
with:
27-
ref: ${{ github.event.inputs.tag || github.ref }}
25+
ref: main
2826

2927
- name: Setup Node.js
3028
uses: actions/setup-node@v4
3129
with:
3230
node-version: '20'
33-
cache: 'npm'
3431

3532
- name: Install dependencies
36-
run: npm ci
33+
run: npm install
3734

3835
- name: Build macOS (x64 + arm64 DMG)
3936
run: npx electron-builder --mac --x64 --arm64
4037
env:
4138
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
39+
CSC_IDENTITY_AUTO_DISCOVERY: false # no Apple cert in CI — skip codesigning
4240

4341
- name: Upload macOS artifacts to release
4442
uses: softprops/action-gh-release@v2
4543
with:
4644
tag_name: ${{ github.event.inputs.tag || github.ref_name }}
4745
files: dist/*.dmg
48-
# Do not overwrite existing assets (the Windows exe stays untouched)
4946
fail_on_unmatched_files: false
5047
env:
5148
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
5249

53-
# ── Linux ─────────────────────────────────────────────────────────────────
50+
# ── Linux ───────��──────────────────────────────────────────────────────────
5451
build-linux:
5552
name: Build Linux AppImage
5653
runs-on: ubuntu-latest
@@ -59,13 +56,12 @@ jobs:
5956
steps:
6057
- uses: actions/checkout@v4
6158
with:
62-
ref: ${{ github.event.inputs.tag || github.ref }}
59+
ref: main
6360

6461
- name: Setup Node.js
6562
uses: actions/setup-node@v4
6663
with:
6764
node-version: '20'
68-
cache: 'npm'
6965

7066
- name: Install Linux build dependencies
7167
run: |
@@ -89,7 +85,7 @@ jobs:
8985
fuse
9086
9187
- name: Install dependencies
92-
run: npm ci
88+
run: npm install
9389

9490
- name: Build Linux AppImage
9591
run: npx electron-builder --linux AppImage --x64

.gitignore

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
node_modules/
2+
dist/
3+
_logs/
4+
*.7z
5+
*.zip

0 commit comments

Comments
 (0)