244 Commits

Author SHA1 Message Date
Andrew Smith
71eb339b5a
feat: move library sync to processor, optimize cover art retrieval (#903)
Library syncs can lock the web app. Syncs now occur async by offloading a message to be consumed by sync-library-processor (formerly game-assets-processor). E2E sync tests are now against the processor, to be removed from playnite-web-app. New snapshot mechanism used for local dev and e2e tests; allows a database to be snapshotted and restored.

next/image is used to optimze cover art and platform images.

BREAKING CHANGE: game-assets-processor renamed to sync-library-processor to reflect its new responsibilities; refer to new docker-compose sample for deployment. This will require users to sync their libraries again after updating.
2025-12-24 11:28:30 -05:00
Andrew Smith
552dc84e3a
chore: fix pipeline build 2025-11-03 10:50:10 -05:00
Andrew Smith
637e97aae8
feat: release Playnite Web Mqtt plugin
Capable of receiving MQTT messages for remote game control.
2025-10-28 14:12:52 -04:00
Andrew Smith
58386afa0a
do not run nuget in parallel 2025-10-28 10:46:09 -04:00
Andrew Smith
acd13d2524
chore: automate release of MQTT plugin 2025-10-28 10:46:09 -04:00
Andrew Smith
fa864a6666
chore: workflow to publish instrumented e2e coverage (#840)
## Summary
- create an `E2E Coverage` GitHub Actions workflow that builds an
instrumented bundle, runs the coverage configuration, and uploads the
LCOV report to Codecov

Fixes #806 

------
https://chatgpt.com/codex/tasks/task_e_68f7f375667c832eb05ac5fac19c40d2
2025-10-22 11:51:47 -04:00
Andrew Smith
90f0cb2784 chore: remove dev release workflow 2025-10-22 11:15:34 -04:00
Andrew Smith
f337a71dde
coverage report 2025-10-22 11:09:38 -04:00
Andrew Smith
64d7db1865 Add instrumented e2e coverage workflow 2025-10-21 17:06:29 -04:00
Andrew Smith
d517ba9be8
fix: release deployment, always tag sha 2025-10-15 10:00:59 -04:00
Andrew Smith
e2637f919e
fix: release deployment, tag image at SHA 2025-10-15 09:50:57 -04:00
Andrew Smith
7db63bc525
ensure all apps are packaged and tagged in CI 2025-10-14 17:41:42 -04:00
Andrew Smith
1606e40eb0
additional CI workflow changes 2025-10-14 09:40:07 -04:00
Andrew Smith
0004c87fdb
fix CI workflows 2025-10-14 09:40:07 -04:00
Andrew Smith
a76e329499
package images prior to publish
This prevents failures to build images causing partial publishes
2025-10-13 10:19:03 -04:00
Andrew Smith
5dc4757b9e
requires docker compose 2025-10-13 08:28:04 -04:00
Andrew Smith
eca4bf13a5
use correct release command 2025-10-12 18:44:37 -04:00
Andrew Smith
feb9f4af64
feat: migrate to GraphQL API with Postgres, multi-tenant architecture
BREAKING CHANGES:
  - Retired MQTT messaging in favor of GraphQL API with WebSocket subscriptions
    - MQTT messages are used solely to handle cover art
  - Requires Postgres database via DATABASE_URL environment variable
  - Requires SECRET environment variable for JWT-based authentication
  - Playnite plugin now uses GraphQL for all communication with web app

  Major Features:

  Database & Multi-Tenancy:
  - Implemented Prisma/Postgres relational schema with User, Library, Release, Platform, Feature, Tag, CompletionStatus, Playlist, Asset, SiteSettings, and UserSetting models
  - Enabled multi-tenant support allowing multiple users with multiple Playnite libraries per application instance
  - Added database migrations support for schema evolution

  GraphQL API & Real-time Subscriptions:
  - Replaced MQTT with GraphQL as primary programmatic interface
  - Implemented WebSocket-based GraphQL subscriptions for real-time updates
  - Playnite plugin now authenticates via GraphQL, publishes library updates, and subscribes to web app changes
  - Added mutations for remote control: start, restart, and stop releases

  Authentication & Authorization:
  - Implemented JWT-based authentication with secure cookie and header support
  - Added protected routes middleware for auth-gated pages
  - Improved sign-in/out flows with proper navigation handling
  - Added CSRF protection with Helmet CSP and configurable allowed origins
  - Site admin and user settings pages with role-based access

  UI/UX Improvements:
  - Restored and enhanced game filtering and navigation
  - Fixed layout issues including double scrollbars and grid sizing
  - Improved SSR error handling with better error UI components
  - Reduced layout shift and initial API calls for better performance
  - Updated help page styles and minor UI tweaks throughout
  - Automatic game cover art retrieval from IGN (requires matching game names)

  Library Sync & Real-time Updates:
  - Improved library sync reliability with proper ordering and conditional publishing
  - Immediate reflection of changes between Playnite desktop app and web interface
  - Better handling of entity collection changes and updates
  - Fixed game asset path resolution and image slug generation

  Testing & CI Infrastructure:
  - Comprehensive Cypress test suite updates (e2e, component, visual regression)
  - Added code coverage reporting with GitHub Actions integration
  - Dockerized e2e test flow with proper sharp/vips dependencies
  - Fixed flaky test timing and removed obsolete tests
  - Enabled SWC for faster builds and test execution
  - Added Lighthouse audits for performance monitoring

  Docker & Deployment:
  - Optimized multi-stage Dockerfile for web app with alpine base
  - Improved Docker build times for development
  - Packaged Prisma client with correct binary targets
  - Proper asset copying and environment variable handling

  Performance & SSR:
  - Fixed server-side rendering errors across multiple routes
  - Proper use of compression middleware
  - Optimized MUI component rendering and interaction timing
  - Reduced unnecessary data fetching on initial page load
  - Improved database connection management in development

  Developer Experience:
  - Updated Nx workspace configuration and cleanup
  - Better Prisma connection handling in dev environment
  - Fixed linting errors and removed dead code
  - Improved CI workflow reliability

  This release represents a fundamental architectural shift from MQTT-based messaging to a modern GraphQL API with PostgreSQL persistence, enabling multi-tenant support, improved real-time synchronization, and a more maintainable codebase.

Closes #715
Closes #765
Closes #772
Closes #761
Closes #768
Closes #763
Closes #762
Closes #760
Closes #769
Closes #716
Closes #766
Closes #764
Closes #767
Closes #770
Closes #775
Closes #776
Clsoes #682
Closes #588
Closes #682
Closes #709

BREAKING CHANGES
2025-10-07 12:16:26 -04:00
Andrew Smith
58ce4240dc
ci: fix pruning of PR packages 2024-12-07 19:19:53 -05:00
Andrew Smith
246ef60072
fix pipeline 2024-12-04 15:22:10 -05:00
Andrew Smith
0ae8e4aab3
upload all test artifacts 2024-11-26 11:58:40 -05:00
Andrew Smith
316495d549
fix: game action button layout on mobile
Includes better e2e tests and coverage reporting

Closes #625
2024-11-26 10:11:41 -05:00
Andrew Smith
0909013a73 file mode changes 2024-10-27 15:57:32 +00:00
Andrew Smith
4c47c57c99 ci(misc): 🎡 reset file mode changes 2024-10-27 14:37:15 +00:00
Andrew Smith
c9e625df2d ci(misc): 🎡 do not commit file mode changes to docs 2024-10-27 14:34:50 +00:00
Andrew Smith
7f488dbb10 ci(misc): 🎡 ignore mode changes when generating docs
This prevents docs from being seen as changed with no content changes,
thus reducing noise.
2024-10-27 14:16:07 +00:00
Andrew Smith
4bb887e707 ci(misc): 🎡 generate docs on commit to main
 Closes: #598
2024-10-27 14:11:53 +00:00
Andrew Smith
6ceaf29c27 ci: publish ext to PR pipeline 2024-10-26 17:55:22 +00:00
Andrew Smith
3f74578e7b chore: PRs publish plugin in CI 2024-10-25 14:04:28 +00:00
Andrew Smith
10f04efaaa
chore(misc): 🤖 prevent recursive pipelines in CI 2024-10-16 16:20:22 -04:00
Andrew Smith
2960114aa2
chore: prevent infinite CI pipelines 2024-10-16 16:04:52 -04:00
Andrew Smith
e91f9fb7da
chore: generate docs for PRs 2024-10-16 16:02:02 -04:00
Andrew Smith
7c20c901a4
docs: generate API documentation 2024-10-16 15:57:31 -04:00
Andrew Smith
f5b0ec2719
feat(api,extension):better game state tracking
Games can be remotely started, installed, and uninstalled. Starting a game that is not installed will simply install it.

- refactor of data access layer; allowing interchangeable data sources
    - implemented mongo data source
    - implemented in-memory data source; note that the updater does not update the in-memory data source at the moment
    - conditional and aggregate data sources
- game state tracking includes release information and new state
- data is no longer stored as deeply nested documents; this allows for easier updating of data across various relations

\#573
\#580

BREAKING CHANGE: data is no longer stored as deeply nested documents. Please ensure you drop your data and re-sync Playnite Web after upgrading.
2024-10-15 14:26:43 -04:00
Andrew Smith
e9e88f5a0f
ci(misc): 🎡 disable yarn hardened mode 2024-09-19 11:14:33 -04:00
Andrew Smith
230c1b924f
ci(misc): 🎡 do not install cypress explicitly
This will fail the build once the Cypress verison from package.json is
no longer the latest.
2024-09-19 11:03:06 -04:00
Andrew Smith
4e0f81235a
ci(misc): 🎡 better logging when deleting PR package
Closes #460
2024-08-13 15:43:03 -04:00
Andrew Smith
032f40f999
ci(misc): 🎡 automatically remove published PR images
 Closes: #460
2024-08-13 15:22:09 -04:00
Andrew Smith
a125d42aa3
use correct sytnax 2024-08-12 16:42:21 -04:00
Andrew Smith
25403a68d5
output as string 2024-08-12 16:38:00 -04:00
Andrew Smith
57997e30a4
correct perms 2024-08-12 16:33:20 -04:00
Andrew Smith
8e8030d179
correctly compute next version 2024-08-12 16:28:57 -04:00
Andrew Smith
de8fd513de
correct extension 2024-08-12 16:18:29 -04:00
Andrew Smith
9eb2948f8d
try js api 2024-08-12 16:02:39 -04:00
Andrew Smith
ff18fd0f47
testing 2024-08-12 15:55:19 -04:00
Andrew Smith
7d7bded8f5
use js api 2024-08-12 15:50:47 -04:00
Andrew Smith
072fdf7f32
perms 2024-08-12 15:28:33 -04:00
Andrew Smith
c258f67f38
no longer downloading artifact 2024-08-12 15:07:42 -04:00
Andrew Smith
e7a4956c68
testing 2024-08-12 15:01:51 -04:00
Andrew Smith
09f294dd6e
checkout order matters 2024-08-12 14:39:19 -04:00