Commit Graph

474 Commits

Author SHA1 Message Date
gronod d4ee3b8ef7 merge branch 'develop' into 'main' - Release v1.7.9
Create Release / release (push) Successful in 19s
Build and Push Docker Image / build (push) Successful in 1m51s
CI / Security audit (push) Successful in 2m12s
CI / Swagger Validation & Coverage (push) Successful in 2m41s
CI / Tests & coverage (push) Successful in 3m20s
v1.7.9
2026-05-23 20:58:20 +01:00
gronod 64c872423f chore: bump version to 1.7.9 and update CHANGELOG
Build and Push Docker Image / build (push) Successful in 2m12s
Docs Check / Markdown lint (push) Successful in 2m34s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 3m14s
CI / Security audit (push) Successful in 3m29s
Docs Check / Mermaid diagram parse check (push) Successful in 3m47s
CI / Swagger Validation & Coverage (push) Successful in 4m12s
CI / Tests & coverage (push) Successful in 4m57s
2026-05-23 20:58:09 +01:00
gronod 86c67bcf29 fix: support PascalCase properties in Ombi webhooks (#42) 2026-05-23 20:57:55 +01:00
gronod 9548eb41f5 merge branch 'develop' into 'main' - Release v1.7.8
Create Release / release (push) Successful in 30s
CI / Security audit (push) Successful in 2m9s
Build and Push Docker Image / build (push) Successful in 2m18s
CI / Swagger Validation & Coverage (push) Successful in 2m36s
CI / Tests & coverage (push) Successful in 3m15s
v1.7.8
2026-05-23 20:52:46 +01:00
gronod d1db3118f0 chore: bump version to 1.7.8 and update CHANGELOG
Build and Push Docker Image / build (push) Successful in 2m9s
CI / Security audit (push) Successful in 2m32s
Docs Check / Markdown lint (push) Successful in 2m34s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 3m4s
CI / Swagger Validation & Coverage (push) Successful in 3m55s
Docs Check / Mermaid diagram parse check (push) Successful in 4m18s
CI / Tests & coverage (push) Successful in 4m34s
2026-05-23 20:52:27 +01:00
gronod f8aa90011e merge branch 'develop' into 'main' - Release v1.7.7
Create Release / release (push) Successful in 22s
Build and Push Docker Image / build (push) Successful in 2m3s
CI / Security audit (push) Successful in 1m56s
CI / Tests & coverage (push) Successful in 2m28s
CI / Swagger Validation & Coverage (push) Successful in 2m21s
v1.7.7
2026-05-23 20:38:14 +01:00
gronod 82b3824658 chore: bump version to 1.7.7 and update CHANGELOG
Build and Push Docker Image / build (push) Successful in 2m17s
Docs Check / Markdown lint (push) Successful in 2m27s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 2m44s
CI / Security audit (push) Successful in 3m10s
Docs Check / Mermaid diagram parse check (push) Successful in 3m54s
CI / Tests & coverage (push) Successful in 4m6s
CI / Swagger Validation & Coverage (push) Successful in 4m23s
2026-05-23 20:38:05 +01:00
gronod 49e3261b59 ci: use RELEASE_TOKEN for Gitea Container Registry authentication
CI / Security audit (push) Successful in 2m21s
CI / Swagger Validation & Coverage (push) Successful in 2m36s
CI / Tests & coverage (push) Successful in 3m0s
Build and Push Docker Image / build (push) Successful in 2m30s
2026-05-23 19:43:28 +01:00
gronod 2934becf32 ci: publish Docker container image to Gitea Package Registry in parallel
CI / Security audit (push) Successful in 1m58s
CI / Swagger Validation & Coverage (push) Successful in 2m25s
CI / Tests & coverage (push) Successful in 3m0s
Build and Push Docker Image / build (push) Failing after 1m38s
2026-05-23 19:01:38 +01:00
gronod 6ff660b8af merge branch 'develop' into 'main' - Release v1.7.6
Create Release / release (push) Successful in 23s
Build and Push Docker Image / build (push) Successful in 1m35s
CI / Tests & coverage (push) Successful in 2m46s
CI / Security audit (push) Successful in 1m41s
CI / Swagger Validation & Coverage (push) Successful in 2m22s
v1.7.6
2026-05-23 18:55:18 +01:00
gronod 6ac0a8421e fix: resolve rate-limiting and Ombi requests caching bugs (fixes #42, fixes #43)
Build and Push Docker Image / build (push) Successful in 1m34s
Docs Check / Markdown lint (push) Successful in 2m14s
CI / Security audit (push) Successful in 2m30s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 2m40s
CI / Swagger Validation & Coverage (push) Successful in 3m22s
Docs Check / Mermaid diagram parse check (push) Successful in 3m43s
CI / Tests & coverage (push) Successful in 3m59s
2026-05-23 18:55:03 +01:00
gronod a021ceba47 merge branch 'develop' into 'main' - Release v1.7.5
Build and Push Docker Image / build (push) Successful in 43s
Create Release / release (push) Successful in 54s
CI / Security audit (push) Successful in 1m48s
CI / Tests & coverage (push) Successful in 2m41s
CI / Swagger Validation & Coverage (push) Successful in 2m30s
v1.7.5
2026-05-23 10:13:54 +01:00
gronod f8c7e35f31 chore: bump version to 1.7.5 and update CHANGELOG
Docs Check / Markdown lint (push) Successful in 42s
Docs Check / Mermaid diagram parse check (push) Successful in 1m51s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 1m3s
CI / Security audit (push) Successful in 4m17s
Build and Push Docker Image / build (push) Successful in 5m5s
CI / Swagger Validation & Coverage (push) Successful in 5m19s
CI / Tests & coverage (push) Successful in 6m27s
2026-05-23 10:13:25 +01:00
gronod de71580756 fix(ombi): retrieve and include settings ID in webhook enable payload (resolves #41)
Build and Push Docker Image / build (push) Successful in 1m10s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 4m35s
CI / Security audit (push) Successful in 5m8s
CI / Swagger Validation & Coverage (push) Successful in 6m50s
CI / Tests & coverage (push) Successful in 7m25s
2026-05-23 10:12:07 +01:00
gronod 2943afdbaf merge branch 'develop' into 'main' - Release v1.7.4
Build and Push Docker Image / build (push) Successful in 46s
Create Release / release (push) Successful in 52s
CI / Swagger Validation & Coverage (push) Successful in 2m53s
CI / Security audit (push) Successful in 1m34s
CI / Tests & coverage (push) Successful in 3m21s
v1.7.4
2026-05-23 10:00:59 +01:00
gronod 1d571b066d chore: bump version to 1.7.4 and update CHANGELOG
Docs Check / Markdown lint (push) Successful in 46s
Build and Push Docker Image / build (push) Successful in 1m44s
Docs Check / Mermaid diagram parse check (push) Successful in 1m42s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 1m28s
CI / Security audit (push) Successful in 2m37s
CI / Swagger Validation & Coverage (push) Successful in 3m9s
CI / Tests & coverage (push) Successful in 3m46s
2026-05-23 10:00:18 +01:00
gronod db809f2fb3 fix(ombi): register ombiRoutes in production server entry point (resolves #40)
Build and Push Docker Image / build (push) Successful in 1m6s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 2m18s
CI / Security audit (push) Successful in 2m41s
CI / Swagger Validation & Coverage (push) Successful in 3m5s
CI / Tests & coverage (push) Successful in 3m36s
2026-05-23 09:58:42 +01:00
gronod 9d91d85514 merge branch 'develop' into 'main' - Release v1.7.3
Build and Push Docker Image / build (push) Successful in 57s
CI / Security audit (push) Successful in 1m50s
CI / Tests & coverage (push) Successful in 2m3s
CI / Swagger Validation & Coverage (push) Successful in 1m40s
Create Release / release (push) Successful in 15s
v1.7.3
2026-05-23 09:40:54 +01:00
gronod f52a687a46 chore: bump version to 1.7.3 and update CHANGELOG
Docs Check / Markdown lint (push) Successful in 1m32s
Build and Push Docker Image / build (push) Successful in 1m57s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 2m28s
CI / Swagger Validation & Coverage (push) Successful in 3m21s
CI / Security audit (push) Successful in 3m23s
Docs Check / Mermaid diagram parse check (push) Successful in 3m36s
CI / Tests & coverage (push) Successful in 4m7s
2026-05-23 09:39:58 +01:00
gronod e3f90d54f4 fix(ui): add brand icons and type badges to download client filter dropdown (resolves #39)
Build and Push Docker Image / build (push) Successful in 50s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 1m37s
CI / Security audit (push) Successful in 2m2s
CI / Tests & coverage (push) Successful in 2m26s
CI / Swagger Validation & Coverage (push) Successful in 2m32s
2026-05-23 09:36:41 +01:00
gronod a006cb4a37 fix: resolve download client filter element ID mismatch and bind Select All/Deselect All (closes #38)
Build and Push Docker Image / build (push) Successful in 40s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 1m34s
CI / Security audit (push) Successful in 1m52s
CI / Swagger Validation & Coverage (push) Successful in 2m19s
CI / Tests & coverage (push) Successful in 2m31s
2026-05-22 22:49:36 +01:00
gronod 4ddd3036d9 fix: add missing copyright header to ombiHelpers.js
Build and Push Docker Image / build (push) Successful in 48s
CI / Swagger Validation & Coverage (push) Successful in 1m54s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 1m54s
CI / Security audit (push) Successful in 2m23s
CI / Tests & coverage (push) Successful in 2m35s
2026-05-22 22:45:23 +01:00
gronod 4cd9faaf25 docs: align swagger spec and README with Ombi features and blocklist eligibility (closes #37)
Build and Push Docker Image / build (push) Successful in 38s
Docs Check / Markdown lint (push) Successful in 1m18s
Licence Check / Licence compatibility and copyright header verification (push) Failing after 2m11s
CI / Security audit (push) Successful in 2m27s
Docs Check / Mermaid diagram parse check (push) Successful in 3m5s
CI / Swagger Validation & Coverage (push) Successful in 3m19s
CI / Tests & coverage (push) Successful in 3m34s
2026-05-22 22:42:44 +01:00
gronod 2e9fe8e049 fix: resolve multi-instance capability in proxy routes (fixes #33) 2026-05-22 22:31:47 +01:00
gronod 12c44a611e fix: optimize polling parallelism and resolve redundant SABnzbd requests (fixes #35, fixes #36) 2026-05-22 22:25:11 +01:00
gronod 614af9eb44 Fix #34: Allow non-admins to use blocklist-search under qualifying conditions
Build and Push Docker Image / build (push) Successful in 46s
Licence Check / Licence compatibility and copyright header verification (push) Failing after 1m40s
CI / Security audit (push) Successful in 2m4s
CI / Swagger Validation & Coverage (push) Successful in 2m10s
CI / Tests & coverage (push) Successful in 2m23s
- Expose ARR ID fields (arrQueueId, arrType, arrInstanceUrl, arrContentId, arrContentType) to non-admins in DownloadMatcher.js for blocklist functionality
- Replace blanket admin check in dashboard.js with canBlocklist() validation and server-side API key lookup
- Update integration tests to reflect new permission model
- Non-admins can now blocklist downloads with import issues or stale low-availability torrents
2026-05-22 22:13:24 +01:00
Gandalf b77c0d6ec0 Delete directory '.windsurf/skills/gitea-interaction'
Build and Push Docker Image / build (push) Successful in 34s
Docs Check / Markdown lint (push) Successful in 57s
CI / Security audit (push) Successful in 2m4s
CI / Swagger Validation & Coverage (push) Successful in 2m12s
Docs Check / Mermaid diagram parse check (push) Successful in 2m11s
CI / Tests & coverage (push) Successful in 2m35s
2026-05-22 19:25:01 +01:00
Gandalf 44c553709c Delete directory '.agents/rules'
Build and Push Docker Image / build (push) Successful in 57s
CI / Tests & coverage (push) Successful in 2m11s
CI / Security audit (push) Successful in 2m0s
Docs Check / Markdown lint (push) Successful in 1m10s
CI / Swagger Validation & Coverage (push) Successful in 2m27s
Docs Check / Mermaid diagram parse check (push) Successful in 2m44s
2026-05-22 19:24:47 +01:00
Gandalf 8376aa0c0b Update .gitignore
Build and Push Docker Image / build (push) Successful in 49s
CI / Security audit (push) Successful in 2m2s
CI / Swagger Validation & Coverage (push) Successful in 2m31s
CI / Tests & coverage (push) Successful in 3m5s
2026-05-22 19:24:11 +01:00
gronod e8a149427a feat: add Gitea CLI integration rules and interaction skill documentation
Build and Push Docker Image / build (push) Successful in 50s
Docs Check / Markdown lint (push) Successful in 1m22s
CI / Security audit (push) Successful in 2m11s
CI / Swagger Validation & Coverage (push) Successful in 2m53s
Docs Check / Mermaid diagram parse check (push) Successful in 3m3s
CI / Tests & coverage (push) Successful in 3m24s
2026-05-22 19:22:15 +01:00
gronod 548aca6bee fix: remediate audited defects (resolves #29, #30, #31, #32)
Build and Push Docker Image / build (push) Successful in 51s
Licence Check / Licence compatibility and copyright header verification (push) Failing after 1m48s
CI / Security audit (push) Successful in 2m27s
CI / Swagger Validation & Coverage (push) Successful in 2m27s
CI / Tests & coverage (push) Successful in 2m39s
- Fix permanent qBittorrent fallback degradation by resetting fallback flags during group-by polling (resolves #29)
- Fix Ombi webhook key mismatch in status endpoint and test mocks (resolves #30)
- Prevent timingSafeEqual TypeErrors on multi-byte CSRF token length mismatches (resolves #31)
- Eliminate duplicate write stream on server.log by delegating to index.js console override (resolves #32)
2026-05-22 16:01:20 +01:00
gronod 4aa3590017 test: remediate test suite, enable skipped frontend/SSE tests, and add comprehensive unit tests
Build and Push Docker Image / build (push) Successful in 53s
Docs Check / Markdown lint (push) Successful in 1m36s
Licence Check / Licence compatibility and copyright header verification (push) Failing after 2m31s
CI / Security audit (push) Successful in 2m55s
Docs Check / Mermaid diagram parse check (push) Successful in 3m24s
CI / Swagger Validation & Coverage (push) Successful in 3m30s
CI / Tests & coverage (push) Successful in 3m50s
- Deleted redundant unit test file tests/unit/dashboard.test.js
- Enabled skipped frontend DOM state and API tests in tests/frontend/state.test.js
- Fixed Supertest client socket abort exception in SSE stream integration tests using new graceful testClose parameter
- Consolidated duplicate helpers in server/routes/history.js and server/utils/arrRetrievers.js to unified services TagMatcher and DownloadAssembler
- Added comprehensive unit tests for loadSecrets.js, PollingSonarrRetriever.js, PollingRadarrRetriever.js, and ombiHelpers.js
- Achieved a 100% Vitest pass rate (834/834 tests) with robust code coverage
2026-05-22 13:33:21 +01:00
gronod d3d085d614 feat: Add Ombi request filtering and search
Build and Push Docker Image / build (push) Successful in 1m29s
Docs Check / Markdown lint (push) Successful in 1m51s
Licence Check / Licence compatibility and copyright header verification (push) Failing after 2m3s
CI / Security audit (push) Successful in 2m54s
CI / Swagger Validation & Coverage (push) Successful in 3m6s
Docs Check / Mermaid diagram parse check (push) Successful in 3m13s
CI / Tests & coverage (push) Successful in 3m31s
- Add request filters UI (type, status, sort, search)
- Implement dual-layer filtering (server + client)
- Add ombiFilters utility for consistent filtering logic
- Persist filter preferences in localStorage
- Add SSE support for real-time Ombi request updates
- Add webhook endpoints for Ombi integration
- Update OpenAPI spec for new endpoints
- Add unit tests for filter logic and UI
- Add integration tests for Ombi routes
2026-05-22 12:31:31 +01:00
gronod dbf45ec31d fix: secure webhook config endpoint and validate config on Ombi enable/test
Build and Push Docker Image / build (push) Successful in 1m4s
Docs Check / Markdown lint (push) Successful in 1m49s
Licence Check / Licence compatibility and copyright header verification (push) Failing after 2m22s
CI / Security audit (push) Successful in 2m44s
CI / Swagger Validation & Coverage (push) Successful in 2m59s
Docs Check / Mermaid diagram parse check (push) Successful in 3m11s
CI / Tests & coverage (push) Successful in 3m27s
- Add requireAuth to GET /api/webhook/config to enforce authentication
- Add SOFARR_BASE_URL and SOFARR_WEBHOOK_SECRET validation to POST /api/ombi/webhook/enable and /test
- Return 400 with descriptive errors when webhook config is missing on Ombi routes
- Clean up test environment in webhook.test.js afterEach
- Add regression tests for all new validation logic
- Update CHANGELOG.md with security fixes
2026-05-22 09:50:30 +01:00
gronod f1e0a77fad fix: add common webhook config check for SOFARR_BASE_URL and SOFARR_WEBHOOK_SECRET
- Ombi webhook status now checks for required environment variables
- Added GET /api/webhook/config endpoint for common webhook config validation
- Updated client-side fetchWebhookStatus to use common config check
- Added integration tests for new endpoint and Ombi webhook status checks
2026-05-22 09:16:23 +01:00
gronod 9862c0555c Handle Ombi API object-format requestedUser field
Build and Push Docker Image / build (push) Successful in 47s
Licence Check / Licence compatibility and copyright header verification (push) Failing after 1m24s
CI / Security audit (push) Successful in 1m47s
CI / Swagger Validation & Coverage (push) Successful in 2m11s
CI / Tests & coverage (push) Successful in 2m27s
The Ombi API returns requestedUser as an OmbiUser object instead of a string.
Add extractRequestedUser helper to extract username from various fields
(alias, userAlias, userName, normalizedUserName) with fallback to legacy string format.
Update client and server routes to use the helper for consistent username extraction.
2026-05-21 21:56:36 +01:00
gronod 26d9e429a9 test: comprehensive test coverage for Ombi webhook changes
Build and Push Docker Image / build (push) Successful in 46s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 1m21s
CI / Security audit (push) Successful in 1m37s
CI / Tests & coverage (push) Successful in 2m13s
CI / Swagger Validation & Coverage (push) Successful in 1m59s
This commit addresses code review findings and completes the test coverage
plan for the new Ombi webhook functionality introduced in recent commits.

Changes:
- Removed obsolete tests for getOmbiLink and getOmbiSearchLink functions
  (replaced by getOmbiDetailsLink in commit "Fix: Generate Ombi links directly
  from TMDB ID")
- Simplified DownloadMatcher.addOmbiMatching tests to match new synchronous
  implementation (no longer makes API calls, generates links from TMDB IDs)
- Added comprehensive integration tests for Ombi webhook endpoints:
  * GET /api/ombi/webhook/status (6 tests)
  * POST /api/ombi/webhook/enable (4 tests)
  * POST /api/ombi/webhook/test (3 tests)
- Added frontend state object tests for Ombi fields (7 tests)
- Added skipped SSE endpoint tests with documentation (2 tests)
- Added skipped frontend API/UI tests with documentation (5 tests)

Code review fixes:
- Fixed variable shadowing in ombi.test.js (reused outer scope variable)
- Removed redundant network error test (duplicate of previous test)
- Updated outdated documentation comment for skipped tests

Test results: 764 passing, 15 skipped, 34 test files

Skipped tests are documented with clear justifications:
- SSE endpoint: requires EventSource or manual SSE handling
- Frontend API functions: require complex mocking, covered by integration tests
- Frontend UI functions: tightly coupled to DOM, better suited for E2E testing
- GET /api/ombi/requests: requires complex arrRetrieverRegistry mocking

Generated with [Devin](https://cli.devin.ai/docs)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-05-21 21:27:51 +01:00
gronod 1dccda529a feat: add Ombi requests tab and webhook panel integration
- Add Ombi requests tab UI with movie/TV request display
- Add showAll parameter support for Ombi requests (API and SSE)
- Add Ombi webhook panel with enable/test functionality
- Add Ombi webhook status endpoint with metrics
- Add Ombi webhook test endpoint
- Change GET /api/ombi/requests to use OmbiRetriever instead of cache
- Add Ombi webhook state and API functions to frontend
- Update SSE payload to include Ombi baseUrl and requests
2026-05-21 20:59:06 +01:00
Gandalf a85747a4c5 Merge pull request 'feat(swagger): Add Swagger API reference, and fixes' (#28) from develop into main
CI / Security audit (push) Successful in 2m9s
CI / Swagger Validation & Coverage (push) Successful in 2m43s
CI / Tests & coverage (push) Failing after 2m51s
Reviewed-on: #28
2026-05-21 20:14:35 +01:00
gronod 884fb5285f Fix: Generate Ombi links directly from TMDB ID; show on downloads and history for all users
Build and Push Docker Image / build (push) Successful in 49s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 2m3s
CI / Security audit (push) Successful in 2m27s
CI / Swagger Validation & Coverage (push) Successful in 2m47s
CI / Tests & coverage (push) Failing after 2m49s
CI / Security audit (pull_request) Successful in 1m53s
CI / Swagger Validation & Coverage (pull_request) Successful in 2m36s
CI / Tests & coverage (pull_request) Failing after 2m46s
- Replace Ombi API-based matching with simple TMDB ID link generation
- Movies link to {ombiBaseUrl}/details/movie/{tmdbId}
- TV shows link to {ombiBaseUrl}/details/tv/{tmdbId}
- Add ombiLink to all history items (Sonarr + Radarr) for all users
- Add ombiLink to torrent history matches that were previously missing it
- addOmbiMatching is now synchronous (no Ombi API calls)
2026-05-21 19:43:34 +01:00
gronod e8037afbb8 fix: add arrType field to history items for admin icon display
Build and Push Docker Image / build (push) Successful in 1m7s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 2m20s
CI / Security audit (push) Successful in 2m45s
CI / Tests & coverage (push) Successful in 3m18s
CI / Swagger Validation & Coverage (push) Successful in 3m29s
Add arrType field to Sonarr and Radarr history items for admin users to enable proper icon display in the recently downloaded section. This mirrors the existing behavior in active downloads where arrType is set by DownloadMatcher.

Generated with [Devin](https://cli.devin.ai/docs)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-05-21 19:31:42 +01:00
gronod 4d860dc787 Fix: Add missing await before buildUserDownloads in SSE endpoint to resolve icon display issues
Build and Push Docker Image / build (push) Successful in 31s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 1m19s
CI / Security audit (push) Successful in 1m34s
CI / Swagger Validation & Coverage (push) Successful in 1m40s
CI / Tests & coverage (push) Successful in 1m51s
2026-05-21 19:12:35 +01:00
gronod ecaedbaf6a fix: make buildUserDownloads async to resolve test failures
Build and Push Docker Image / build (push) Successful in 50s
Docs Check / Markdown lint (push) Successful in 1m11s
CI / Security audit (push) Successful in 2m1s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 1m23s
CI / Tests & coverage (push) Successful in 2m30s
Docs Check / Mermaid diagram parse check (push) Successful in 2m9s
CI / Swagger Validation & Coverage (push) Successful in 4m2s
The buildUserDownloads function was calling async matcher functions
without awaiting them, causing Promise objects to be returned instead
of resolved arrays. This resulted in empty download lists and 17 failing
tests.

- Made buildUserDownloads async
- Added await to matchSabSlots, matchSabHistory, and matchTorrents calls
- Updated unit tests to await buildUserDownloads calls

All 759 tests now pass.
2026-05-21 18:58:11 +01:00
gronod 9621aec453 test: add comprehensive test suite for Ombi integration
- Add tests for Ombi configuration parsing (OMBI_INSTANCES JSON array, legacy fallback)
- Add tests for OmbiClient API methods (movie/TV requests, search by TMDB/IMDB/TVDB)
- Add tests for OmbiRetriever caching, queue, and search functionality
- Add tests for arrRetrieverRegistry initialization and retrieval methods
- Add tests for DownloadMatcher.addOmbiMatching integration
- Add tests for DownloadAssembler Ombi link generation utilities
- Export addOmbiMatching from DownloadMatcher module
2026-05-21 18:43:09 +01:00
gronod ed4237debb feat(ombi): Add Ombi PALDRA integration for request management
Docs Check / Markdown lint (push) Successful in 1m43s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 2m1s
CI / Security audit (push) Successful in 2m48s
Docs Check / Mermaid diagram parse check (push) Successful in 3m8s
CI / Tests & coverage (push) Failing after 3m33s
CI / Swagger Validation & Coverage (push) Successful in 3m34s
Build and Push Docker Image / build (push) Successful in 4m36s
- Add OmbiRetriever extending ArrRetriever for PALDRA compliance
- Add OmbiClient for low-level Ombi API communication
- Add getOmbiInstances() to config.js following multi-instance pattern
- Register Ombi in PALDRA registry with Ombi-specific methods
- Add external ID matching (TMDB/TVDB/IMDB) to Ombi requests
- Update DownloadMatcher to be async and enrich downloads with Ombi links
- Add getOmbiLink/getOmbiSearchLink helpers to DownloadAssembler
- Implement new service icon layout (Ombi + Sonarr/Radarr icons)
- Add CSS styling for service icons
- Update dashboard routes to include Ombi configuration
- Extend OpenAPI with Ombi tag and NormalizedDownload properties
- Update documentation (README, ARCHITECTURE, SECURITY, CHANGELOG)
- Add Ombi configuration to .env.sample
2026-05-21 17:00:04 +01:00
gronod de9a9284dc fix: replace client-side Swagger server detection with server-side dynamic spec
Licence Check / Licence compatibility and copyright header verification (push) Successful in 2m43s
CI / Security audit (push) Successful in 3m15s
Build and Push Docker Image / build (push) Successful in 4m6s
CI / Swagger Validation & Coverage (push) Successful in 4m14s
CI / Tests & coverage (push) Successful in 4m32s
- Change swaggerUi.setup to pass null and fetch spec from /api/swagger.json
- Update /api/swagger.json handler to dynamically set server URL based on request
- Remove dead client-side detection script (swagger-server-detection.js)
- Server-side detection respects TRUST_PROXY for reverse proxy scenarios
- req.protocol and req.get('host') automatically use X-Forwarded headers when configured
- Fixes issue where placeholder URL was never replaced due to window.ui being unavailable
2026-05-21 15:24:28 +01:00
gronod 52a75fd8cb feat: replace static Swagger UI server selector with dynamic client-side detection
Build and Push Docker Image / build (push) Successful in 56s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 1m18s
CI / Security audit (push) Successful in 2m9s
CI / Swagger Validation & Coverage (push) Successful in 2m25s
CI / Tests & coverage (push) Successful in 2m44s
- Update openapi.yaml to use single placeholder server URL
- Add swagger-server-detection.js to auto-detect current server URL from window.location
- Configure protocol, host, and port detection based on browser connection
- Fallback to placeholder URL if detection fails
- Include detection script in both app.js and index.js Swagger UI configurations
- /api/swagger.json endpoint returns static placeholder for external consumers
2026-05-21 14:52:04 +01:00
gronod 4941b69924 fix: resolve test failures - add missing emby route and fix YAML syntax errors
Build and Push Docker Image / build (push) Successful in 47s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 1m5s
CI / Security audit (push) Successful in 1m48s
CI / Swagger Validation & Coverage (push) Successful in 2m0s
CI / Tests & coverage (push) Successful in 2m15s
- Add GET /api/emby/users/:id endpoint to fetch individual user by ID
- Fix YAML semantic errors in dashboard.js and history.js by quoting parameter descriptions with colons
- Add x-integration-notes to /api/dashboard/stream endpoint description
- All 644 tests now passing
2026-05-21 14:34:45 +01:00
gronod 37bed1cd4e feat: add automated RAML 1.0 package generation to CI/CD pipeline
Docs Check / Markdown lint (push) Successful in 1m6s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 1m20s
Build and Push Docker Image / build (push) Successful in 1m35s
CI / Swagger Validation & Coverage (push) Failing after 2m0s
CI / Security audit (push) Successful in 2m6s
Docs Check / Mermaid diagram parse check (push) Successful in 2m20s
CI / Tests & coverage (push) Failing after 2m30s
- Add RAML generation scripts (generate-openapi, downgrade-openapi, simple-raml-converter, package-raml)
- Add /api/swagger.json endpoint to server/app.js
- Add minimal .spectral.yml ruleset for OpenAPI linting
- Add npm scripts for OpenAPI/RAML generation and packaging
- Extend CI swagger job with RAML generation steps
- Upload raml-package artifact with 14-day retention
- Update CHANGELOG.md for v1.7.1
2026-05-21 14:26:21 +01:00
gronod 1a4ff73067 feat(ci): add RAML 1.0 package generation pipeline
Build and Push Docker Image / build (push) Successful in 1m27s
CI / Security audit (push) Successful in 1m43s
CI / Swagger Validation & Coverage (push) Failing after 1m56s
CI / Tests & coverage (push) Failing after 1m56s
Licence Check / Licence compatibility and copyright header verification (push) Successful in 53s
- Add generate:openapi, generate:raml, package:raml scripts to package.json
- Add archiver dependency for creating tar.gz archives
- Create scripts/generate-openapi.js to fetch merged OpenAPI spec from running server
- Create scripts/package-raml.js to build versioned RAML tar.gz archive
- Create .spectral.yml with minimal OpenAPI linting rules
- Add /api/swagger.json endpoint to server/app.js for serving merged spec
- Extend swagger job in ci.yml with RAML generation steps
- Upload raml-package artifact to CI with 14-day retention
2026-05-21 14:04:26 +01:00