314 Commits

Author SHA1 Message Date
Georges-Antoine Assi
5f5c7afb7a
revert nginx version pin 2026-02-17 15:21:19 -05:00
Georges-Antoine Assi
695a12a21a
upgrade some base images 2026-02-16 22:11:47 -05:00
Christian Rehm
91ee163585 fix(watcher): skip opentelemetry-instrument when OTEL is disabled
When OTEL_SDK_DISABLED=true (set automatically when no OTEL_ env vars
are present), the opentelemetry-instrument wrapper does not properly
pass through the WATCHFILES_CHANGES environment variable to watcher.py.

This causes the filesystem watcher to silently fail - watchfiles detects
changes but watcher.py receives an empty WATCHFILES_CHANGES and exits
immediately without scheduling any rescans.

The fix skips the opentelemetry-instrument wrapper when OTEL is disabled,
allowing watchfiles to pass WATCHFILES_CHANGES directly to watcher.py.

Fixes automatic rescan on filesystem change for users who don't configure
OpenTelemetry (the majority of self-hosted deployments).
2026-01-30 23:18:49 +00:00
Georges-Antoine Assi
f40dcb25a6
change it again 2026-01-10 14:32:32 -05:00
Georges-Antoine Assi
53330536e0
change to WEB_SERVER_GUNICORN_WAIT 2026-01-10 14:26:36 -05:00
Georges-Antoine Assi
91ff88a008
Add WEB_SERVER_GUNICORN_RETRIES env var for slow systems 2026-01-10 14:24:31 -05:00
Georges-Antoine Assi
27c83e4736
add config entry to enable netplay 2025-12-08 22:58:48 -05:00
Georges-Antoine Assi
09dbb2e244
use redis to store netplay data 2025-12-07 12:02:35 -05:00
Georges-Antoine Assi
ebe8fac3d7
unupdate dockerfile 2025-11-21 23:44:02 -05:00
Georges-Antoine Assi
8c769a5fe8
hacks with working netplayu 2025-11-21 19:15:20 -05:00
Georges-Antoine Assi
82ca819ab2
start work on netplay endpoints 2025-11-21 11:25:31 -05:00
Georges-Antoine Assi
fad5f7fd23
Bump dockerfile baselayer image tags 2025-10-20 10:56:42 -04:00
Georges-Antoine Assi
7e4e27db62
commit frontend code 2025-10-16 15:40:27 -04:00
Georges-Antoine Assi
0d357d59e5
[ROMM-2470] Skip bind IPV6 if IPV4_ONLY is true 2025-10-07 09:07:30 -04:00
Georges-Antoine Assi
3d698c06b1
make gunicorn a warn not an error 2025-10-02 16:41:03 -04:00
Georges-Antoine Assi
e2d7e73ed4
Use uppercase loglevel check in init script 2025-09-29 08:45:55 -04:00
Georges-Antoine Assi
c4d8450009
fix typo 2025-09-18 17:01:28 -04:00
Georges-Antoine Assi
873b59c951
use non-slim nginx 2025-09-18 15:30:04 -04:00
Georges-Antoine Assi
b0c37c193f
drop setting user 2025-09-18 14:44:23 -04:00
Georges-Antoine Assi
f1750951cf
install devs deps to build images 2025-09-18 11:45:38 -04:00
Georges-Antoine Assi
536a5dd3dd
atempt fix ralibretro 2025-09-18 11:38:39 -04:00
Georges-Antoine Assi
1a41190fb8
add NGINX_VERSION to local 2025-09-18 11:28:29 -04:00
Georges-Antoine Assi
57e488d8b4
copy from uv image direct 2025-09-18 10:58:47 -04:00
Georges-Antoine Assi
d91be2c16a
first attempt to fix build failure 2025-09-18 10:34:50 -04:00
Georges-Antoine Assi
90fc571eb4
Use hashes for each later + set USER 2025-09-18 09:46:36 -04:00
Michael Manganiello
0f0d1a1903
fix: Remove mod_zip workaround for upstream subrequests to internal locations
Related `mod_zip` issue https://github.com/evanmiller/mod_zip/issues/90
has been fixed in commit
288d66541c

By upgrading `mod_zip` to include this fix, we can remove the workaround
that involved using a separate internal location and server to serve
files for zipping.
2025-09-11 18:24:12 -03:00
Michael Manganiello
8c52b7828b
feat: Add COEP and COOP headers for EmulatorJS within Nginx config
The COEP (Cross-Origin Embedder Policy) and COOP (Cross-Origin Opener
Policy) headers are needed by EmulatorJS to use the `SharedArrayBuffer`
feature, and enable multi-threaded cores.

These headers are only being set by Nginx for responses to requests
made to the EmulatorJS player path. This is because cross-origin
isolation breaks other features in the application (such as YouTube
embeds), so we only want to enable it for the EmulatorJS player.

It's important to mention that this change does not work when `DEV_MODE`
is set, as we would need Vite server to also set these headers in that
case. This could be implemented separately, if needed.

These changes are not enough to enable multi-threaded cores in the
frontend. Because our application is a SPA, we also need to ensure
that navigation to the EmulatorJS player path results in a full page
reload, so that the cross-origin isolation can be applied. This will be
handled in a separate PR.
2025-08-31 21:43:32 -03:00
Georges-Antoine Assi
2bf87e7425
Merge branch 'master' into console-mode 2025-08-29 13:07:05 -05:00
Georges-Antoine Assi
798ffa31b3
switch names to WEB_SERVER_ 2025-08-26 23:53:55 -04:00
Georges-Antoine Assi
a4a714475f
changes from review 2025-08-26 23:11:16 -04:00
Georges-Antoine Assi
e32e51a1e2
use correct arguments 2025-08-26 19:11:39 -04:00
Georges-Antoine Assi
603f6ec5af
Add options to gunicorn call 2025-08-26 18:16:52 -04:00
Georges-Antoine Assi
3075ffeab4
centralize routes 2025-08-25 13:25:34 -04:00
Georges-Antoine Assi
a1519a4b05
Make default ROMM_AUTH_SECRET_KEY consistent between workers 2025-08-15 12:46:46 -04:00
Michael Manganiello
6e7edd2b89
misc: Upgrade Ruffle to v2025-08-14 2025-08-15 12:16:34 -03:00
Michael Manganiello
eaad91422a
fix: Disable OpenTelemetry integration if not configured
OpenTelemetry tries to send traces to a default `localhost:4317`
endpoint if no configuration is provided, which is not what we want if
users don't configure OpenTelemetry explicitly.

This change sets the `OTEL_SDK_DISABLED` environment variable to
`true` if no `OTEL_` prefixed environment variables are found, which
disables the OpenTelemetry SDK.
2025-08-14 09:45:04 -03:00
Michael Manganiello
80291f4be1
misc: Move cache initialization to startup script
Guarantee that cache is initialized during startup, and only once,
instead of every time a `MetadataHandler` object is instantiated.

Also, improve logic to determine `fixtures` paths.
2025-08-13 12:26:15 -03:00
Michael Manganiello
63f84b78d5
misc: Create startup script to run initial tasks before main application
For steps that need to run before the web application starts, such as
scheduling tasks, this new `startup.py` script is introduced.

This fixes a recently introduced issue where task scheduling was not
being triggered, because of it being included in the
`if __name__ == "__main__":` block, which is not executed when
the application is run by Gunicorn in production environments.

We do not include this logic as part of FastAPI's lifespan
implementation, as running multiple workers with Gunicorn would
cause this logic to be executed multiple times.
2025-08-12 23:14:26 -03:00
Michael Manganiello
f95e0edff4
feat: Add OpenTelemetry integration to file watcher
Run file watcher using `opentelemetry-instrument` to enable tracing for
the watcher service.
2025-08-12 11:25:40 -03:00
Michael Manganiello
652df5d4cd
feat: Add OpenTelemetry integration for API service
This change introduces OpenTelemetry dependencies, and uses
`opentelemetry-instrument` auto-instrumentation to allow users to
configure OpenTelemetry settings via environment variables [1].

The only custom environment variable added is
`OTEL_SERVICE_NAME_PREFIX`, which allows users to set a prefix to the
service names included by RomM to differentiate between `api`, `worker`,
and `watcher` services.

The instrumentation of RQ workers and file watcher will be added in
subsequent pull requests.

[1] https://opentelemetry.io/docs/specs/otel/configuration/sdk-environment-variables/
2025-08-12 09:18:59 -03:00
Michael Manganiello
4eea761d87
misc: Do not warn when REDIS_HOST is set
Change log level to info when REDIS_HOST is set, as this is a valid
and common configuration.
2025-08-09 21:21:24 -03:00
Georges-Antoine Assi
d005dba90b
fix a bunch of shit 2025-08-09 11:16:12 -04:00
Michael Manganiello
86b7d021b7
Merge pull request #2238 from rommapp/fix/docker-build-fixes
fix: Docker build and init fixes
2025-08-08 15:35:57 -03:00
Michael Manganiello
676079f1e5
fix: Docker build and init fixes
* Added `linux-headers` back, but only for development stage.
* Fixed initialization script, as `uv` is not included in the final
  Docker image.
* Initialize variable `ENABLE_SCHEDULED_UPDATE_LAUNCHBOX_METADATA`.
2025-08-08 15:09:27 -03:00
Michael Manganiello
9c0df02296
fix: Correctly set up dockerignore file
* Rename file to `Dockerfile.dockerignore`. As the `Dockerfile` is not
  in the root directory, the Docker spec requires the file to be
  named `<dockerfile_name>.dockerignore`.
* Update ignore rules, and include `.mypy_cache/` directory.
2025-08-08 14:38:11 -03:00
Georges-Antoine Assi
de42333f2f
Merge pull request #2232 from rommapp/native-7z-parse
Use native 7z to extract files and calculate hashes
2025-08-08 09:23:29 -04:00
Georges-Antoine Assi
b247a5c5bb
small tweaks 2025-08-07 17:39:57 -04:00
Michael Manganiello
76db0ab98c
feat: Migrate watcher to use watchfiles library
The `watchfiles` library supports event batching, which allows us to
process multiple filesystem changes in a single run.

This change also avoids database calls in the watcher as much as
possible.
2025-08-07 13:28:49 -03:00
Georges-Antoine Assi
836e7358c2
fix issues from code review 2025-08-07 09:34:43 -04:00
Georges-Antoine Assi
4c6c36fa04
fix typo 2025-08-06 23:57:47 -04:00