Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
484477b
Fix flaky test_scanner_process by retrying multiprocessing queue read
nitrobass24 Mar 18, 2026
793e01c
Fix 86 Pyright errors in security-critical paths (#249 Phase 3)
nitrobass24 Mar 18, 2026
be75a42
Merge pull request #301 from nitrobass24/chore/pyright-phase3-securit…
nitrobass24 Mar 18, 2026
28e2aa7
Fix final 80 Pyright errors — 0 errors in basic mode (#249 Phase 4)
nitrobass24 Mar 18, 2026
1ba27be
Make Pyright type check required in CI
nitrobass24 Mar 18, 2026
2c0aff4
Merge pull request #302 from nitrobass24/chore/pyright-phase4-complex…
nitrobass24 Mar 18, 2026
8bc7a98
Add Playwright E2E test suite, remove old Protractor (#250)
nitrobass24 Mar 19, 2026
f7d654f
Remove dead Docker E2E test infrastructure
nitrobass24 Mar 19, 2026
c620680
Improve Playwright test robustness
nitrobass24 Mar 19, 2026
8800c60
Fix SSE-related test timeouts and selector issues
nitrobass24 Mar 19, 2026
ff3a6f3
Add SEEDSYNC_DISABLE_RATE_LIMIT env var for E2E testing
nitrobass24 Mar 19, 2026
96e8b53
Fix page object selectors to match actual Angular DOM
nitrobass24 Mar 19, 2026
60d1371
Fix all Playwright test failures — 55 pass, 11 skip, 0 fail
nitrobass24 Mar 19, 2026
a9ae891
Remove test-results from git, update gitignore
nitrobass24 Mar 19, 2026
8be2ab1
Add Playwright E2E tests to CI
nitrobass24 Mar 19, 2026
0018a5c
Fix CI: use npm install instead of npm ci for Playwright
nitrobass24 Mar 19, 2026
aadd8a8
Clean up unused params, add try/finally for pair cleanup
nitrobass24 Mar 19, 2026
e7b5577
Merge pull request #303 from nitrobass24/feat/playwright-e2e-tests
nitrobass24 Mar 19, 2026
5d3a352
Reject control characters in decoded filenames (#300)
nitrobass24 Mar 19, 2026
19b1c46
Redact sensitive credentials from API responses (#257)
nitrobass24 Mar 19, 2026
5bfb18c
Assert queue_command not called on rejected filenames
nitrobass24 Mar 20, 2026
3054779
Fix pre-existing test failures and add assert_not_called checks
nitrobass24 Mar 20, 2026
224c793
Reject redacted sentinel in set handler, fix staticmethod
nitrobass24 Mar 20, 2026
9379184
chore(deps): bump actions/setup-python from 5 to 6
dependabot[bot] Mar 22, 2026
996fce9
chore(deps): bump the angular group in /src/angular with 9 updates
dependabot[bot] Mar 22, 2026
486364f
Merge pull request #307 from nitrobass24/dependabot/npm_and_yarn/src/…
nitrobass24 Mar 23, 2026
d6d8b71
Merge pull request #306 from nitrobass24/dependabot/github_actions/de…
nitrobass24 Mar 23, 2026
23e621f
chore(deps-dev): bump jsdom from 29.0.0 to 29.0.1 in /src/angular
dependabot[bot] Mar 23, 2026
cc25797
Merge pull request #308 from nitrobass24/dependabot/npm_and_yarn/src/…
nitrobass24 Mar 23, 2026
1853863
Merge pull request #305 from nitrobass24/fix/redact-credentials-api
nitrobass24 Mar 23, 2026
7f25cd7
Merge pull request #304 from nitrobass24/fix/reject-control-chars-fil…
nitrobass24 Mar 23, 2026
1f6c5af
Fix ModelFile type: local_size and remote_size are nullable
nitrobass24 Mar 13, 2026
f6c0a84
Prepare v0.14.2 release
nitrobass24 Mar 23, 2026
6abce01
Address PR review findings across security, tests, and code quality
nitrobass24 Mar 23, 2026
0f94a26
Fix CI failures and address second round of PR review findings
nitrobass24 Mar 23, 2026
d1a1c54
Harden E2E test cleanup and selector stability
nitrobass24 Mar 23, 2026
88eea56
Address fourth round PR review: exact name matching and safer test cl…
nitrobass24 Mar 23, 2026
1d90032
Harden settings E2E: select mutation in try, cleanup assertion, uniqu…
nitrobass24 Mar 23, 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
47 changes: 37 additions & 10 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ jobs:
uses: actions/checkout@v6

- name: Set up Python
uses: actions/setup-python@v5
uses: actions/setup-python@v6
with:
python-version: "3.12"

Expand All @@ -67,18 +67,18 @@ jobs:
python-typecheck:
name: Python Type Check
runs-on: ubuntu-latest
continue-on-error: true
steps:
- name: Checkout
uses: actions/checkout@v6

- name: Set up Python
uses: actions/setup-python@v5
uses: actions/setup-python@v6
with:
python-version: "3.12"

- name: Install Pyright
run: pip install pyright
- name: Install dependencies
working-directory: src/python
run: pip install -r requirements.txt pyright

- name: Pyright
working-directory: src/python
Expand All @@ -93,7 +93,7 @@ jobs:
uses: actions/checkout@v6

- name: Set up Python
uses: actions/setup-python@v5
uses: actions/setup-python@v6
with:
python-version: "3.12"
cache: pip
Expand Down Expand Up @@ -172,16 +172,42 @@ jobs:
cache-from: type=gha,scope=amd64
cache-to: type=gha,scope=amd64,mode=max

- name: Test container starts
- name: Start container
run: |
docker run -d --name test-container -p 8800:8800 seedsync:test
docker run -d --name test-container -p 8800:8800 -e SEEDSYNC_DISABLE_RATE_LIMIT=1 seedsync:test
for i in $(seq 1 30); do
curl -sf http://localhost:8800/ && break
[ "$i" -eq 30 ] && { echo "Container failed to become ready"; docker logs test-container; exit 1; }
sleep 1
done
docker logs test-container
docker stop test-container

- name: Set up Node.js
uses: actions/setup-node@v6
with:
node-version: 22

- name: Install Playwright
working-directory: src/e2e-playwright
run: |
npm install
npx playwright install --with-deps chromium

- name: Run E2E tests
working-directory: src/e2e-playwright
run: npx playwright test

- name: Upload Playwright report
if: failure()
uses: actions/upload-artifact@v7
with:
name: playwright-report
path: src/e2e-playwright/playwright-report/
retention-days: 7

- name: Stop container
if: always()
run: docker stop test-container

build-amd64:
name: Build (amd64)
Expand Down Expand Up @@ -334,10 +360,11 @@ jobs:
&& (startsWith(github.ref, 'refs/tags/v') || (github.ref == 'refs/heads/develop' && github.event_name == 'push') || github.event_name == 'workflow_dispatch')
&& needs.unit-test.result == 'success'
&& needs.python-lint.result == 'success'
&& needs.python-typecheck.result == 'success'
&& needs.python-test.result == 'success'
&& needs.build-amd64.result == 'success'
&& needs.build-arm64.result == 'success'
needs: [unit-test, python-lint, python-test, build-amd64, build-arm64]
needs: [unit-test, python-lint, python-typecheck, python-test, build-amd64, build-arm64]
runs-on: ubuntu-latest
permissions:
contents: read
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,4 @@ package-lock.json
src/python/build
src/python/site
dev-config/
/test-results/
25 changes: 25 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,30 @@
# Changelog

## [0.14.2] - 2026-03-23

### Added

- **Playwright E2E test suite** — Replaced legacy Protractor tests with Playwright; 55 tests covering all pages, navigation, themes, and settings (#250)
- **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)

### Fixed

- **ModelFile nullable size fields** — `local_size` and `remote_size` are now correctly typed as `number | null` to match the Python backend JSON contract

### Security

- **Reject control characters in filenames** — Decoded filenames containing control characters are now rejected to prevent corrupted file entries and queue command injection (#300)
- **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)

### Changed

- **Angular dependency updates** — Bumped Angular group to latest, jsdom to 29.0.1 (#307, #308)
- **CI: actions/setup-python v6** — Bumped setup-python action from v5 to v6 (#306)

### Removed

- **Legacy Docker E2E infrastructure** — Cleaned up Protractor Docker Compose files, test images, and fixture data

## [0.14.1] - 2026-03-18

### Fixed
Expand Down
32 changes: 31 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# SeedSync Makefile - Docker Only
# Simplified build system for containerized deployment

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

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

# Run Playwright E2E tests with a throwaway Docker container
test-e2e-docker:
@docker rm -f seedsync-e2e-test 2>/dev/null || true
docker run -d --name seedsync-e2e-test -p 8801:8800 -e SEEDSYNC_DISABLE_RATE_LIMIT=1 ghcr.io/nitrobass24/seedsync:latest
@echo "Waiting for container to start..."
@for i in $$(seq 1 30); do \
curl -sf http://localhost:8801/ > /dev/null 2>&1 && break; \
sleep 1; \
done
cd src/e2e-playwright && BASE_URL=http://localhost:8801 npx playwright test; \
exit_code=$$?; \
docker rm -f seedsync-e2e-test; \
exit $$exit_code

# Run Playwright E2E tests (headless, requires running container on port 8800)
test-e2e:
cd src/e2e-playwright && npx playwright test

# Run Playwright E2E tests (headed, for debugging)
test-e2e-headed:
cd src/e2e-playwright && npx playwright test --headed

# Show Playwright HTML report
test-e2e-report:
cd src/e2e-playwright && npx playwright show-report

# Show image size
size:
@docker images seedsync-seedsync --format "Image size: {{.Size}}"
Expand All @@ -64,5 +90,9 @@ help:
@echo " clean - Remove containers and images"
@echo " test - Run Python unit tests (in Docker)"
@echo " test-image - Build cached test image"
@echo " test-e2e-docker - Run E2E tests inside a fresh Docker container"
@echo " test-e2e - Run Playwright E2E tests (headless)"
@echo " test-e2e-headed - Run E2E tests with browser visible"
@echo " test-e2e-report - Show Playwright HTML report"
@echo " size - Show image size"
@echo " shell - Open shell in running container"
Loading
Loading