Skip to content

Commit 1fa5dee

Browse files
authored
Merge pull request #309 from nitrobass24/release/v0.14.2
Release v0.14.2 — Security, type safety, E2E testing
2 parents f96e41d + 1d90032 commit 1fa5dee

80 files changed

Lines changed: 2493 additions & 1087 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/ci.yml

Lines changed: 37 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ jobs:
4949
uses: actions/checkout@v6
5050

5151
- name: Set up Python
52-
uses: actions/setup-python@v5
52+
uses: actions/setup-python@v6
5353
with:
5454
python-version: "3.12"
5555

@@ -67,18 +67,18 @@ jobs:
6767
python-typecheck:
6868
name: Python Type Check
6969
runs-on: ubuntu-latest
70-
continue-on-error: true
7170
steps:
7271
- name: Checkout
7372
uses: actions/checkout@v6
7473

7574
- name: Set up Python
76-
uses: actions/setup-python@v5
75+
uses: actions/setup-python@v6
7776
with:
7877
python-version: "3.12"
7978

80-
- name: Install Pyright
81-
run: pip install pyright
79+
- name: Install dependencies
80+
working-directory: src/python
81+
run: pip install -r requirements.txt pyright
8282

8383
- name: Pyright
8484
working-directory: src/python
@@ -93,7 +93,7 @@ jobs:
9393
uses: actions/checkout@v6
9494

9595
- name: Set up Python
96-
uses: actions/setup-python@v5
96+
uses: actions/setup-python@v6
9797
with:
9898
python-version: "3.12"
9999
cache: pip
@@ -172,16 +172,42 @@ jobs:
172172
cache-from: type=gha,scope=amd64
173173
cache-to: type=gha,scope=amd64,mode=max
174174

175-
- name: Test container starts
175+
- name: Start container
176176
run: |
177-
docker run -d --name test-container -p 8800:8800 seedsync:test
177+
docker run -d --name test-container -p 8800:8800 -e SEEDSYNC_DISABLE_RATE_LIMIT=1 seedsync:test
178178
for i in $(seq 1 30); do
179179
curl -sf http://localhost:8800/ && break
180180
[ "$i" -eq 30 ] && { echo "Container failed to become ready"; docker logs test-container; exit 1; }
181181
sleep 1
182182
done
183183
docker logs test-container
184-
docker stop test-container
184+
185+
- name: Set up Node.js
186+
uses: actions/setup-node@v6
187+
with:
188+
node-version: 22
189+
190+
- name: Install Playwright
191+
working-directory: src/e2e-playwright
192+
run: |
193+
npm install
194+
npx playwright install --with-deps chromium
195+
196+
- name: Run E2E tests
197+
working-directory: src/e2e-playwright
198+
run: npx playwright test
199+
200+
- name: Upload Playwright report
201+
if: failure()
202+
uses: actions/upload-artifact@v7
203+
with:
204+
name: playwright-report
205+
path: src/e2e-playwright/playwright-report/
206+
retention-days: 7
207+
208+
- name: Stop container
209+
if: always()
210+
run: docker stop test-container
185211

186212
build-amd64:
187213
name: Build (amd64)
@@ -334,10 +360,11 @@ jobs:
334360
&& (startsWith(github.ref, 'refs/tags/v') || (github.ref == 'refs/heads/develop' && github.event_name == 'push') || github.event_name == 'workflow_dispatch')
335361
&& needs.unit-test.result == 'success'
336362
&& needs.python-lint.result == 'success'
363+
&& needs.python-typecheck.result == 'success'
337364
&& needs.python-test.result == 'success'
338365
&& needs.build-amd64.result == 'success'
339366
&& needs.build-arm64.result == 'success'
340-
needs: [unit-test, python-lint, python-test, build-amd64, build-arm64]
367+
needs: [unit-test, python-lint, python-typecheck, python-test, build-amd64, build-arm64]
341368
runs-on: ubuntu-latest
342369
permissions:
343370
contents: read

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,4 @@ package-lock.json
88
src/python/build
99
src/python/site
1010
dev-config/
11+
/test-results/

CHANGELOG.md

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,30 @@
11
# Changelog
22

3+
## [0.14.2] - 2026-03-23
4+
5+
### Added
6+
7+
- **Playwright E2E test suite** — Replaced legacy Protractor tests with Playwright; 55 tests covering all pages, navigation, themes, and settings (#250)
8+
- **Pyright type checking enforced in CI** — Completed Pyright phases 3 & 4, fixing 166 type errors to reach 0 errors in basic mode; Pyright check is now required in CI (#249)
9+
10+
### Fixed
11+
12+
- **ModelFile nullable size fields**`local_size` and `remote_size` are now correctly typed as `number | null` to match the Python backend JSON contract
13+
14+
### Security
15+
16+
- **Reject control characters in filenames** — Decoded filenames containing control characters are now rejected to prevent corrupted file entries and queue command injection (#300)
17+
- **Redact sensitive credentials from API** — SSH password and key passphrase are no longer exposed in API responses; set handler rejects the redacted sentinel value (#257)
18+
19+
### Changed
20+
21+
- **Angular dependency updates** — Bumped Angular group to latest, jsdom to 29.0.1 (#307, #308)
22+
- **CI: actions/setup-python v6** — Bumped setup-python action from v5 to v6 (#306)
23+
24+
### Removed
25+
26+
- **Legacy Docker E2E infrastructure** — Cleaned up Protractor Docker Compose files, test images, and fixture data
27+
328
## [0.14.1] - 2026-03-18
429

530
### Fixed

Makefile

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# SeedSync Makefile - Docker Only
22
# Simplified build system for containerized deployment
33

4-
.PHONY: all build build-fresh run stop logs clean test test-image size shell help
4+
.PHONY: all build build-fresh run stop logs clean test test-image test-e2e test-e2e-headed test-e2e-report size shell help
55

66
# Default target
77
all: build
@@ -41,6 +41,32 @@ test:
4141
docker run --rm -v $(PWD)/src/python:/app/python seedsync-test \
4242
pytest tests/unittests -v --tb=short
4343

44+
# Run Playwright E2E tests with a throwaway Docker container
45+
test-e2e-docker:
46+
@docker rm -f seedsync-e2e-test 2>/dev/null || true
47+
docker run -d --name seedsync-e2e-test -p 8801:8800 -e SEEDSYNC_DISABLE_RATE_LIMIT=1 ghcr.io/nitrobass24/seedsync:latest
48+
@echo "Waiting for container to start..."
49+
@for i in $$(seq 1 30); do \
50+
curl -sf http://localhost:8801/ > /dev/null 2>&1 && break; \
51+
sleep 1; \
52+
done
53+
cd src/e2e-playwright && BASE_URL=http://localhost:8801 npx playwright test; \
54+
exit_code=$$?; \
55+
docker rm -f seedsync-e2e-test; \
56+
exit $$exit_code
57+
58+
# Run Playwright E2E tests (headless, requires running container on port 8800)
59+
test-e2e:
60+
cd src/e2e-playwright && npx playwright test
61+
62+
# Run Playwright E2E tests (headed, for debugging)
63+
test-e2e-headed:
64+
cd src/e2e-playwright && npx playwright test --headed
65+
66+
# Show Playwright HTML report
67+
test-e2e-report:
68+
cd src/e2e-playwright && npx playwright show-report
69+
4470
# Show image size
4571
size:
4672
@docker images seedsync-seedsync --format "Image size: {{.Size}}"
@@ -64,5 +90,9 @@ help:
6490
@echo " clean - Remove containers and images"
6591
@echo " test - Run Python unit tests (in Docker)"
6692
@echo " test-image - Build cached test image"
93+
@echo " test-e2e-docker - Run E2E tests inside a fresh Docker container"
94+
@echo " test-e2e - Run Playwright E2E tests (headless)"
95+
@echo " test-e2e-headed - Run E2E tests with browser visible"
96+
@echo " test-e2e-report - Show Playwright HTML report"
6797
@echo " size - Show image size"
6898
@echo " shell - Open shell in running container"

0 commit comments

Comments
 (0)