2a70972001
release: bump to 1.0.009
2026-07-08 10:00:00 +00:00
1aad0d838f
release: bump to 1.0.008
2026-07-08 09:00:03 +00:00
c02be42339
release: bump to 1.0.007
2026-07-08 08:00:04 +00:00
f526f6c056
release: bump to 1.0.006
2026-07-08 07:00:00 +00:00
db9b3d7403
release: bump to 1.0.005
2026-07-08 06:00:03 +00:00
c6189cba06
release: bump to 1.0.004
2026-07-08 05:00:03 +00:00
bd36ed75d1
release: bump to 1.0.003
2026-07-08 04:00:04 +00:00
f132b926f7
release: bump to 1.0.002
2026-07-08 03:00:04 +00:00
2352e02fc9
fix: start archive scheduler in background thread when serving
2026-07-08 02:45:50 +00:00
60e99e521d
ci: trigger fresh run
2026-07-08 02:22:09 +00:00
13dbb6b058
release: bump to 1.0.001
2026-07-08 02:00:03 +00:00
1882d63b31
fix(ci): mount entire tests/playwright dir to fix config resolution
2026-07-08 01:57:58 +00:00
59d0545808
fix: convert playwright config to JS, add git credentials to release push
2026-07-08 01:50:34 +00:00
72903dc6dd
fix(ci): fix indentation in Playwright test step (YAML parse error)
2026-07-08 00:44:30 +00:00
7135d8b808
ci: trigger workflow run
2026-07-08 00:43:07 +00:00
35f67723d4
fix(ci): mount test files individually, install playwright@1.51.0 in container to avoid node_modules version conflict
2026-07-08 00:28:18 +00:00
771facb878
chore(ci): remove redundant pr-check.yml, ci.yml covers all workflows
2026-07-08 00:22:26 +00:00
cae5c4f4a0
fix(ci): pin playwright@1.51.0 and set PLAYWRIGHT_BROWSERS_PATH for baked-in browsers
2026-07-08 00:20:40 +00:00
fec577ef23
fix(ci): replace grep -oP with portable grep -oE for BusyBox
2026-07-08 00:13:48 +00:00
cf3101e18f
ci: trigger pipeline
2026-07-07 23:45:56 +00:00
d7e7c02838
feat: reserved CI port range 10000-10099, document convention
2026-07-07 23:27:12 +00:00
c27bd399ec
feat: CI auto-detects and shifts port to avoid production conflicts
2026-07-07 23:15:11 +00:00
e47dd2315e
fix: skip e2e on push to main, improve timeline CSS
2026-07-07 23:09:31 +00:00
31035119fe
feat: timeline layout with dates on left grouped by day
2026-07-07 23:01:16 +00:00
1298f88df8
fix(ci): isolate e2e container name to prevent killing production
2026-07-07 22:54:17 +00:00
9c2ffabfbf
fix: remove stale container before e2e app start
2026-07-07 22:47:20 +00:00
80ff136c31
feat: add Playwright E2E tests to CI
...
- 15 tests: home, listing, detail, nav, status, RSS/Atom, theme toggle
- CI e2e job seeds test DB (80 articles, 3 sources) in Docker container
- Tests run in mcr.microsoft.com/playwright:v1.51.0-jammy image
- Port 5000 published for health check from runner
- node_modules + test-results excluded from git
2026-07-07 22:45:52 +00:00
4c5e936ca8
fix: stable named volume for data persistence across deploys
2026-07-07 22:05:56 +00:00
5efa6e4284
fix: use pure shell instead of python3 for version parsing in runner
2026-07-07 21:18:07 +00:00
3fc5b2d58f
fix: use GITHUB_OUTPUT file in bump step too
2026-07-07 20:05:33 +00:00
7fbb84dce2
fix: use python3 instead of jq for JSON parsing in runner
2026-07-07 20:05:13 +00:00
3a32a89e34
fix: add missing import os for environ access
2026-07-07 19:47:25 +00:00
f7fdcb374a
ci: use Gitea container registry instead of release branches
2026-07-07 19:36:39 +00:00
54f57a0668
Merge pull request 'ci: add PR check and release/deploy workflows' ( #39 ) from ci-fix into main
...
Reviewed-on: https://git.example.com/jarianc/NewsArchiverV2/pulls/39
2026-07-07 14:25:55 -05:00
b3dfe17ef9
ci: add CODEOWNERS for official reviews
2026-07-07 19:20:54 +00:00
0ae66c921b
Merge branch 'main' into ci-fix
2026-07-07 19:19:34 +00:00
1c4f6b809e
fix: lowercase docker image name for uppercase repo
2026-07-07 19:18:10 +00:00
0ad3fbb68d
ci: add PR check and release/deploy workflows with version.json
2026-07-07 18:35:30 +00:00
5aa4a98e51
Merge pull request 'fix: fix docker build for CI' ( #37 ) from ci-fix into main
...
Reviewed-on: https://git.example.com/jarianc/NewsArchiverV2/pulls/37
2026-07-05 19:14:03 -05:00
976e29087f
fix: fix docker build for CI
2026-07-05 23:59:38 +00:00
c68b3012dc
Merge pull request 'Fix meta tags ( #30 ), favicon ( #31 ), aria-labels ( #29 )' ( #36 ) from fix/ope-hardening-2 into main
2026-07-04 23:27:05 -05:00
11a91ee297
fix: add meta tags ( #30 ), favicon ( #31 ), aria-labels ( #29 )
2026-07-05 04:26:50 +00:00
1ce7dc94a1
Merge pull request 'OPE hardening: logging, Docker, deps, scheduler, cleanup' ( #35 ) from fix/ope-hardening into main
2026-07-04 23:14:23 -05:00
a7936b8b11
fix: OPE hardening - logging, Docker, deps, scheduler, cleanup
...
- #12 : Remove duplicate logging.basicConfig() from 10 modules
- #15 : Remove redundant import re in rebuild_database.py
- #17 : rglob('*') → rglob('*.html/json/txt/xml/md') for speed
- #18 : Dockerfile individual COPY → glob COPY *.py/*.json + .dockerignore
- #19 : Remove deprecated docker-compose version field
- #20 : Pin requirements.txt versions (flask, requests, etc.)
- #22 : SIGALRM → threading.Timer for multi-threaded safety
- #23 : AP regex parsing → BeautifulSoup selectors
2026-07-05 04:14:05 +00:00
db9fa92c40
Merge pull request 'Security hardening: auth, CSRF, path traversal, XSS, tests' ( #34 ) from fix/security-and-tests into main
2026-07-04 23:08:51 -05:00
7565366138
fix: tests + URL-encoded path traversal fix + fix test files
...
- Add URL-decode in validate_archive_path to block ..%2F encoded traversal
- Rewrite test_storage_manager.py (was corrupted, #14 )
- Rewrite test_path_handling.py (remove hardcoded macOS path, #13 )
- Add test_web_interface.py (auth, CSRF, headers, XSS tests)
- All 11 tests pass
- Fixes : #1 path traversal, #2 XSS, #13 hardcoded path, #14 corrupted tests
2026-07-05 04:06:06 +00:00
0a411d13cf
Merge pull request 'CI: remove --no-cache for docker layer caching' ( #33 ) from ci-fix-nocache into main
...
Reviewed-on: https://git.example.com/jarianc/NewsArchiverV2/pulls/33
2026-07-04 22:23:44 -05:00
5afeb290a7
CI: remove --no-cache for docker layer caching
2026-07-05 03:13:52 +00:00
aa7fc1f1e6
CI: add generalized workflow
2026-07-05 02:46:35 +00:00
e93b5cee3e
fix: security hardening - auth, CSRF, path traversal, XSS, secrets, headers
...
- #3 : Path traversal fix in /archive and /archive-file routes via resolve() check
- #4 : SSRF mitigation - env-based SERVER_URL, no hardcoded internal IPs
- #5 : Stored XSS fix - remove |safe filter from article.html template
- #6 : Missing import os in scheduler.py (crash on import)
- #7 : Flask auth (password via NEWSARCHIVER_PASSWORD) + CSRF tokens
- #8 : Same as #5 (template XSS via |safe)
- #9 : Motley Fool API key removed - use env var interpolation
- #10 : Hardcoded paths in setup_cron.sh, stop_services.sh - use BASH_SOURCE
- #11 : Hardcoded user paths in singlefile_archive.py - use Path.home()
- #16 : HTTP RSS feeds updated to HTTPS (Barchart, Guardian, BBC, MarketWatch)
- #24 : SSRF - replace hardcoded 192.168.8.150:5000 with NEWSARCHIVER_SERVER_URL
- #25 : Command execution details sanitized in error messages
- #26 : Security headers (X-Content-Type-Options, X-Frame-Options, X-XSS-Protection, Referrer-Policy, CSP)
- #27 : Auth guard on all routes except RSS/Atom feeds
- archive_engine.py: Add missing import os
2026-07-04 05:23:05 +00:00