diff --git a/.github/workflows/build-slim.yml b/.github/workflows/build-slim.yml deleted file mode 100644 index f06406f7e..000000000 --- a/.github/workflows/build-slim.yml +++ /dev/null @@ -1,71 +0,0 @@ -name: Build and Push Docker Image - -on: - push: - tags: - - "[0-9]+.[0-9]+.[0-9]+*" - -permissions: read-all - -jobs: - build: - runs-on: ubuntu-latest - permissions: - id-token: write - contents: write - packages: write - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Login to Docker Hub - uses: docker/login-action@v3 - with: - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_PASSWORD }} - - - name: Login to GitHub Container Registry - uses: docker/login-action@v3 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Generate Docker metadata - id: meta-slim - uses: docker/metadata-action@v5 - with: - images: | - name=rommapp/romm - name=ghcr.io/rommapp/romm - tags: | - type=semver,pattern={{version}}-slim - type=semver,pattern={{major}}.{{minor}}-slim - type=semver,pattern={{major}}-slim - labels: | - org.opencontainers.image.version={{version}}-slim - org.opencontainers.image.title="rommapp/romm" - org.opencontainers.image.description="RomM (ROM Manager) allows you to scan, enrich, and browse your game collection with a clean and responsive interface. With support for multiple platforms, various naming schemes and custom tags, RomM is a must-have for anyone who plays on emulators." - org.opencontainers.image.licenses="AGPLv3" - - - name: Set version - run: | - sed -i 's//${{ steps.meta-slim.outputs.version }}/' backend/__version__.py - - - name: Build base image - uses: docker/build-push-action@v6 - with: - file: docker/Dockerfile - context: . - push: true - platforms: linux/arm64,linux/amd64 - tags: ${{ steps.meta-slim.outputs.tags }} - labels: ${{ steps.meta-slim.outputs.labels }} - build-args: | - RUN_EMULATOR_SETUP=false diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 99d00e6de..a9acaeab1 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -37,7 +37,7 @@ jobs: username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - - name: Generate Docker metadata + - name: Generate Docker metadata (base) id: meta uses: docker/metadata-action@v5 with: @@ -54,11 +54,29 @@ jobs: org.opencontainers.image.description="RomM (ROM Manager) allows you to scan, enrich, and browse your game collection with a clean and responsive interface. With support for multiple platforms, various naming schemes and custom tags, RomM is a must-have for anyone who plays on emulators." org.opencontainers.image.licenses="AGPLv3" + - name: Generate Docker metadata (slim) + id: meta-slim + uses: docker/metadata-action@v5 + with: + images: | + name=rommapp/romm + name=ghcr.io/rommapp/romm + tags: | + type=semver,pattern={{version}}-slim + type=semver,pattern={{major}}.{{minor}}-slim + type=semver,pattern={{major}}-slim + labels: | + org.opencontainers.image.version={{version}}-slim + org.opencontainers.image.title="rommapp/romm" + org.opencontainers.image.description="RomM (ROM Manager) allows you to scan, enrich, and browse your game collection with a clean and responsive interface. With support for multiple platforms, various naming schemes and custom tags, RomM is a must-have for anyone who plays on emulators." + org.opencontainers.image.licenses="AGPLv3" + - name: Set version run: | sed -i 's//${{ steps.meta.outputs.version }}/' backend/__version__.py - name: Build base image + id: build-base uses: docker/build-push-action@v6 with: file: docker/Dockerfile @@ -67,3 +85,16 @@ jobs: platforms: linux/arm64,linux/amd64 tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} + + - name: Build slim image + id: build-slim + uses: docker/build-push-action@v6 + with: + file: docker/Dockerfile + context: . + push: true + platforms: linux/arm64,linux/amd64 + tags: ${{ steps.meta-slim.outputs.tags }} + labels: ${{ steps.meta-slim.outputs.labels }} + build-args: | + RUN_EMULATOR_SETUP=false diff --git a/docker/Dockerfile b/docker/Dockerfile index b5179d9a1..b301f79a3 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -91,7 +91,7 @@ RUN if [ "${RUN_EMULATOR_SETUP}" = "true" ]; then \ rm -f "${RUFFLE_FILE}"; \ else \ echo "Skipping Ruffle setup"; \ - fi" + fi FROM alpine:${ALPINE_VERSION} AS nginx-build diff --git a/frontend/package-lock.json b/frontend/package-lock.json index efdf63072..8e9a48a47 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -7,14 +7,12 @@ "": { "name": "romm", "version": "0.0.1", - "hasInstallScript": true, "license": "AGPL-3.0-only", "dependencies": { "@mdi/font": "7.0.96", "axios": "^1.7.4", "core-js": "^3.37.1", "cronstrue": "^2.50.0", - "emulatorjs": "github:emulatorjs/emulatorjs#v4.2.0", "file-saver": "^2.0.5", "js-cookie": "^3.0.5", "jszip": "^3.10.1", @@ -3237,6 +3235,7 @@ }, "node_modules/ansi-styles": { "version": "4.3.0", + "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -3309,14 +3308,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dependencies": { - "lodash": "^4.17.14" - } - }, "node_modules/asynckit": { "version": "0.4.0", "license": "MIT" @@ -3402,17 +3393,6 @@ "dev": true, "license": "MIT" }, - "node_modules/basic-auth": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", - "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", - "dependencies": { - "safe-buffer": "5.1.2" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/binary-extensions": { "version": "2.3.0", "devOptional": true, @@ -3499,6 +3479,7 @@ }, "node_modules/call-bind": { "version": "1.0.7", + "dev": true, "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", @@ -3559,6 +3540,7 @@ }, "node_modules/chalk": { "version": "4.1.2", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -3620,6 +3602,7 @@ }, "node_modules/color-convert": { "version": "2.0.1", + "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -3630,6 +3613,7 @@ }, "node_modules/color-name": { "version": "1.1.4", + "dev": true, "license": "MIT" }, "node_modules/combined-stream": { @@ -3705,14 +3689,6 @@ "version": "1.0.3", "license": "MIT" }, - "node_modules/corser": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz", - "integrity": "sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ==", - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/crelt": { "version": "1.0.6", "license": "MIT" @@ -3849,6 +3825,7 @@ }, "node_modules/define-data-property": { "version": "1.1.4", + "dev": true, "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", @@ -3927,14 +3904,6 @@ "dev": true, "license": "ISC" }, - "node_modules/emulatorjs": { - "name": "@emulatorjs/emulatorjs", - "version": "4.2.0", - "resolved": "git+ssh://git@github.com/emulatorjs/emulatorjs.git#8d42d53d4fdf0166f71eaa07529cadf93350b76e", - "dependencies": { - "http-server": "^14.1.1" - } - }, "node_modules/engine.io-client": { "version": "6.5.4", "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.5.4.tgz", @@ -4025,6 +3994,7 @@ }, "node_modules/es-define-property": { "version": "1.0.0", + "dev": true, "license": "MIT", "dependencies": { "get-intrinsic": "^1.2.4" @@ -4035,6 +4005,7 @@ }, "node_modules/es-errors": { "version": "1.3.0", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -4339,11 +4310,6 @@ "node": ">=0.10.0" } }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "dev": true, @@ -4567,6 +4533,7 @@ }, "node_modules/function-bind": { "version": "1.1.2", + "devOptional": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4607,6 +4574,7 @@ }, "node_modules/get-intrinsic": { "version": "1.2.4", + "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -4722,6 +4690,7 @@ }, "node_modules/gopd": { "version": "1.0.1", + "dev": true, "license": "MIT", "dependencies": { "get-intrinsic": "^1.1.3" @@ -4770,6 +4739,7 @@ }, "node_modules/has-flag": { "version": "4.0.0", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -4777,6 +4747,7 @@ }, "node_modules/has-property-descriptors": { "version": "1.0.2", + "dev": true, "license": "MIT", "dependencies": { "es-define-property": "^1.0.0" @@ -4787,6 +4758,7 @@ }, "node_modules/has-proto": { "version": "1.0.3", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -4797,6 +4769,7 @@ }, "node_modules/has-symbols": { "version": "1.0.3", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -4821,6 +4794,7 @@ }, "node_modules/hasown": { "version": "2.0.2", + "devOptional": true, "license": "MIT", "dependencies": { "function-bind": "^1.1.2" @@ -4831,72 +4805,12 @@ }, "node_modules/he": { "version": "1.2.0", + "dev": true, "license": "MIT", "bin": { "he": "bin/he" } }, - "node_modules/html-encoding-sniffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", - "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", - "dependencies": { - "whatwg-encoding": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/http-server": { - "version": "14.1.1", - "resolved": "https://registry.npmjs.org/http-server/-/http-server-14.1.1.tgz", - "integrity": "sha512-+cbxadF40UXd9T01zUHgA+rlo2Bg1Srer4+B4NwIHdaGxAGGv59nYRnGGDJ9LBk7alpS0US+J+bLLdQOOkJq4A==", - "dependencies": { - "basic-auth": "^2.0.1", - "chalk": "^4.1.2", - "corser": "^2.0.1", - "he": "^1.2.0", - "html-encoding-sniffer": "^3.0.0", - "http-proxy": "^1.18.1", - "mime": "^1.6.0", - "minimist": "^1.2.6", - "opener": "^1.5.1", - "portfinder": "^1.0.28", - "secure-compare": "3.0.1", - "union": "~0.5.0", - "url-join": "^4.0.1" - }, - "bin": { - "http-server": "bin/http-server" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/idb": { "version": "7.1.1", "dev": true, @@ -5597,17 +5511,6 @@ "node": ">=8.6" } }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/mime-db": { "version": "1.52.0", "license": "MIT", @@ -5638,6 +5541,7 @@ }, "node_modules/minimist": { "version": "1.2.8", + "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5647,17 +5551,6 @@ "version": "3.0.1", "license": "MIT" }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, "node_modules/ms": { "version": "2.1.2", "license": "MIT" @@ -5721,6 +5614,7 @@ }, "node_modules/object-inspect": { "version": "1.13.1", + "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5774,14 +5668,6 @@ "openapi": "bin/index.js" } }, - "node_modules/opener": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", - "bin": { - "opener": "bin/opener-bin.js" - } - }, "node_modules/optionator": { "version": "0.9.4", "dev": true, @@ -6015,27 +5901,6 @@ "node": ">=8" } }, - "node_modules/portfinder": { - "version": "1.0.32", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz", - "integrity": "sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==", - "dependencies": { - "async": "^2.6.4", - "debug": "^3.2.7", - "mkdirp": "^0.5.6" - }, - "engines": { - "node": ">= 0.12.0" - } - }, - "node_modules/portfinder/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, "node_modules/possible-typed-array-names": { "version": "1.0.0", "dev": true, @@ -6140,20 +6005,6 @@ "node": ">=6" } }, - "node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "dependencies": { - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/queue-microtask": { "version": "1.2.3", "dev": true, @@ -6293,11 +6144,6 @@ "node": ">=0.10.0" } }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" - }, "node_modules/resolve": { "version": "1.22.8", "devOptional": true, @@ -6445,11 +6291,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, "node_modules/sass": { "version": "1.77.1", "devOptional": true, @@ -6466,11 +6307,6 @@ "node": ">=14.0.0" } }, - "node_modules/secure-compare": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/secure-compare/-/secure-compare-3.0.1.tgz", - "integrity": "sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw==" - }, "node_modules/semver": { "version": "7.6.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", @@ -6492,6 +6328,7 @@ }, "node_modules/set-function-length": { "version": "1.2.2", + "dev": true, "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", @@ -6544,6 +6381,7 @@ }, "node_modules/side-channel": { "version": "1.0.6", + "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", @@ -6747,6 +6585,7 @@ }, "node_modules/supports-color": { "version": "7.2.0", + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -7070,17 +6909,6 @@ "node": ">=4" } }, - "node_modules/union": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/union/-/union-0.5.0.tgz", - "integrity": "sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==", - "dependencies": { - "qs": "^6.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/unique-string": { "version": "2.0.0", "dev": true, @@ -7146,11 +6974,6 @@ "punycode": "^2.1.0" } }, - "node_modules/url-join": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", - "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==" - }, "node_modules/util-deprecate": { "version": "1.0.2", "license": "MIT" @@ -7434,17 +7257,6 @@ "dev": true, "license": "BSD-2-Clause" }, - "node_modules/whatwg-encoding": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", - "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", - "dependencies": { - "iconv-lite": "0.6.3" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/whatwg-url": { "version": "7.1.0", "dev": true, diff --git a/frontend/package.json b/frontend/package.json index 89673e937..27b8d6d6d 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -31,7 +31,6 @@ "axios": "^1.7.4", "core-js": "^3.37.1", "cronstrue": "^2.50.0", - "emulatorjs": "github:emulatorjs/emulatorjs#v4.2.0", "file-saver": "^2.0.5", "js-cookie": "^3.0.5", "jszip": "^3.10.1",