From 9d2c8a6939e8f7065f3e99ac741aa983e1bfff9e Mon Sep 17 00:00:00 2001 From: Lachie Underhill Date: Mon, 26 Aug 2024 15:16:57 +1000 Subject: [PATCH] refactor: move gui to own folder --- .changeset/blue-boxes-admire.md | 5 ++ .github/workflows/build-publish-electron.yml | 37 ++++++++ .husky/pre-commit | 1 - index.js => gui/index.js | 2 +- gui/package.json | 91 ++++++++++++++++++++ preload.js => gui/preload.js | 0 {scripts => gui/scripts}/gen-version.mjs | 0 {scripts => gui/scripts}/reset-version.mjs | 0 {scripts => gui/scripts}/set-version.mjs | 0 package.json | 73 +--------------- pnpm-lock.yaml | 44 ++++++---- pnpm-workspace.yaml | 1 + 12 files changed, 168 insertions(+), 86 deletions(-) create mode 100644 .changeset/blue-boxes-admire.md create mode 100644 .github/workflows/build-publish-electron.yml rename index.js => gui/index.js (98%) create mode 100644 gui/package.json rename preload.js => gui/preload.js (100%) rename {scripts => gui/scripts}/gen-version.mjs (100%) rename {scripts => gui/scripts}/reset-version.mjs (100%) rename {scripts => gui/scripts}/set-version.mjs (100%) diff --git a/.changeset/blue-boxes-admire.md b/.changeset/blue-boxes-admire.md new file mode 100644 index 00000000..bd7d7d4c --- /dev/null +++ b/.changeset/blue-boxes-admire.md @@ -0,0 +1,5 @@ +--- +"deemix-gui": minor +--- + +Monorepo refactor diff --git a/.github/workflows/build-publish-electron.yml b/.github/workflows/build-publish-electron.yml new file mode 100644 index 00000000..5f54110d --- /dev/null +++ b/.github/workflows/build-publish-electron.yml @@ -0,0 +1,37 @@ +name: Build and Publish Electron + +on: + push: + tags: + - "deemix-gui@*" + pull_request: + branches: + - main + +concurrency: ${{ github.workflow }}-${{ github.ref }} + +env: + HUSKY: 0 + +jobs: + build-publish-electron: + runs-on: ${{ matrix.os }} + + strategy: + matrix: + os: [macos-latest, ubuntu-latest, windows-latest] + + steps: + - uses: actions/checkout@v4 + - uses: pnpm/action-setup@v4 + - uses: actions/setup-node@v4 + with: + node-version: 20 + cache: pnpm + + - name: Build/release Electron app + uses: samuelmeuli/action-electron-builder@v1 + with: + package_root: "./gui" + github_token: ${{ secrets.GITHUB_TOKEN }} + release: ${{ startsWith(github.ref, 'refs/tags/deemix-gui@') }} diff --git a/.husky/pre-commit b/.husky/pre-commit index cb3cf998..d0a77842 100644 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,2 +1 @@ -pnpm reset-version npx lint-staged \ No newline at end of file diff --git a/index.js b/gui/index.js similarity index 98% rename from index.js rename to gui/index.js index 47f7e0b9..970e2407 100644 --- a/index.js +++ b/gui/index.js @@ -18,7 +18,7 @@ const argv = yargs(hideBin(process.argv)).options({ host: { type: "string", default: "0.0.0.0" }, dev: { type: "boolean", default: false }, }).argv; -const { DeemixServer } = require("./server/dist/app.js"); +const { DeemixServer } = require("../server/dist/app.js"); const PORT = process.env.DEEMIX_SERVER_PORT || argv.port; process.env.DEEMIX_SERVER_PORT = PORT; diff --git a/gui/package.json b/gui/package.json new file mode 100644 index 00000000..7cf36c38 --- /dev/null +++ b/gui/package.json @@ -0,0 +1,91 @@ +{ + "name": "deemix-gui", + "version": "0.0.0", + "private": true, + "description": "A hybrid monorepo that wraps deemix-webui and lets you use the deemix-js library", + "main": "index.js", + "author": "Bambanah", + "license": "GPL-3.0-only", + "scripts": { + "dev": "electron . --dev", + "build": "pnpm set-version && electron-builder && pnpm reset-version", + "build:server": "pnpm -C server build", + "build:webui": "pnpm -C webui build", + "dist": "pnpm set-version && electron-builder && pnpm reset-version", + "dist:dir": "pnpm set-version && pnpm predist && electron-builder --dir && pnpm reset-version", + "lint": "run-s lint:*", + "lint:es": "eslint .", + "lint:ts": "pnpm -C server lint:ts", + "set-version": "node scripts/set-version.mjs", + "reset-version": "node scripts/reset-version.mjs" + }, + "devDependencies": { + "electron": "^22.0.0", + "electron-builder": "^23.6.0" + }, + "dependencies": { + "electron-context-menu": "^3.6.1", + "electron-window-state-manager": "^0.3.2", + "yargs": "^17.6.2" + }, + "build": { + "appId": "app.deemix.gui", + "productName": "deemix-gui", + "files": [ + "index.js", + "preload.js", + "server/dist/**/*", + "webui/public/**/*", + "build/**/*", + "package.json" + ], + "mac": { + "target": [ + { + "target": "dmg", + "arch": "x64" + }, + { + "target": "dmg", + "arch": "arm64" + } + ], + "artifactName": "deemix-gui_${arch}.${ext}", + "category": "public.app-category.music" + }, + "win": { + "target": [ + { + "target": "nsis", + "arch": "x64" + }, + { + "target": "portable", + "arch": "x64" + } + ] + }, + "linux": { + "target": [ + "appimage", + "deb" + ], + "artifactName": "deemix-gui.${ext}", + "category": "AudioVideo,Audio", + "icon": "build/icon.icns" + }, + "nsis": { + "artifactName": "${productName}_setup.${ext}", + "oneClick": false, + "license": "LICENSE.txt", + "allowToChangeInstallationDirectory": true, + "uninstallDisplayName": "${productName}", + "deleteAppDataOnUninstall": true + }, + "portable": { + "artifactName": "${productName}.${ext}", + "requestExecutionLevel": "user" + } + }, + "packageManager": "pnpm@9.7.1+sha512.faf344af2d6ca65c4c5c8c2224ea77a81a5e8859cbc4e06b1511ddce2f0151512431dd19e6aff31f2c6a8f5f2aced9bd2273e1fed7dd4de1868984059d2c4247" +} diff --git a/preload.js b/gui/preload.js similarity index 100% rename from preload.js rename to gui/preload.js diff --git a/scripts/gen-version.mjs b/gui/scripts/gen-version.mjs similarity index 100% rename from scripts/gen-version.mjs rename to gui/scripts/gen-version.mjs diff --git a/scripts/reset-version.mjs b/gui/scripts/reset-version.mjs similarity index 100% rename from scripts/reset-version.mjs rename to gui/scripts/reset-version.mjs diff --git a/scripts/set-version.mjs b/gui/scripts/set-version.mjs similarity index 100% rename from scripts/set-version.mjs rename to gui/scripts/set-version.mjs diff --git a/package.json b/package.json index d6d9a77b..a455f6f4 100644 --- a/package.json +++ b/package.json @@ -9,19 +9,15 @@ "license": "GPL-3.0-only", "scripts": { "dev": "pnpm -C webui dev", - "build": "run-s build:*", + "dev:gui": "pnpm -C gui dev", + "build": "run-s build:server build:webui", "build:server": "pnpm -C server build", "build:webui": "pnpm -C webui build", - "start-server": "pnpm -C server start", - "predist": "pnpm build", - "start": "electron . --dev", - "dist": "pnpm set-version && electron-builder && pnpm reset-version", - "dist:dir": "pnpm set-version && pnpm predist && electron-builder --dir && pnpm reset-version", + "build:gui": "pnpm build && pnpm -C gui build", + "start:server": "pnpm -C server start", "lint": "run-s lint:*", "lint:es": "eslint .", "lint:ts": "pnpm -C server lint:ts", - "set-version": "node scripts/set-version.mjs", - "reset-version": "node scripts/reset-version.mjs", "prepare": "husky" }, "devDependencies": { @@ -39,68 +35,7 @@ "typescript": "^4.9.5" }, "dependencies": { - "electron-context-menu": "^3.6.1", - "electron-window-state-manager": "^0.3.2", "yargs": "^17.6.2" }, - "build": { - "appId": "app.deemix.gui", - "productName": "deemix-gui", - "files": [ - "index.js", - "preload.js", - "server/dist/**/*", - "webui/public/**/*", - "build/**/*", - "package.json" - ], - "mac": { - "target": [ - { - "target": "dmg", - "arch": "x64" - }, - { - "target": "dmg", - "arch": "arm64" - } - ], - "artifactName": "deemix-gui_${arch}.${ext}", - "category": "public.app-category.music" - }, - "win": { - "target": [ - { - "target": "nsis", - "arch": "x64" - }, - { - "target": "portable", - "arch": "x64" - } - ] - }, - "linux": { - "target": [ - "appimage", - "deb" - ], - "artifactName": "deemix-gui.${ext}", - "category": "AudioVideo,Audio", - "icon": "build/icon.icns" - }, - "nsis": { - "artifactName": "${productName}_setup.${ext}", - "oneClick": false, - "license": "LICENSE.txt", - "allowToChangeInstallationDirectory": true, - "uninstallDisplayName": "${productName}", - "deleteAppDataOnUninstall": true - }, - "portable": { - "artifactName": "${productName}.${ext}", - "requestExecutionLevel": "user" - } - }, "packageManager": "pnpm@9.7.1+sha512.faf344af2d6ca65c4c5c8c2224ea77a81a5e8859cbc4e06b1511ddce2f0151512431dd19e6aff31f2c6a8f5f2aced9bd2273e1fed7dd4de1868984059d2c4247" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 980f219e..9c857a8d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,12 +8,6 @@ importers: .: dependencies: - electron-context-menu: - specifier: ^3.6.1 - version: 3.6.1 - electron-window-state-manager: - specifier: ^0.3.2 - version: 0.3.2 yargs: specifier: ^17.6.2 version: 17.6.2 @@ -88,6 +82,25 @@ importers: specifier: ^4.0.0 version: 4.1.4 + gui: + dependencies: + electron-context-menu: + specifier: ^3.6.1 + version: 3.6.1 + electron-window-state-manager: + specifier: ^0.3.2 + version: 0.3.2 + yargs: + specifier: ^17.6.2 + version: 17.7.2 + devDependencies: + electron: + specifier: ^22.0.0 + version: 22.0.0 + electron-builder: + specifier: ^23.6.0 + version: 23.6.0 + server: dependencies: cookie-parser: @@ -2584,8 +2597,9 @@ packages: electron-context-menu@3.6.1: resolution: {integrity: sha512-lcpO6tzzKUROeirhzBjdBWNqayEThmdW+2I2s6H6QMrwqTVyT3EK47jW3Nxm60KTxl5/bWfEoIruoUNn57/QkQ==} - electron-dl@3.5.0: - resolution: {integrity: sha512-Oj+VSuScVx8hEKM2HEvTQswTX6G3MLh7UoAz/oZuvKyNDfudNi1zY6PK/UnFoK1nCl9DF6k+3PFwElKbtZlDig==} + electron-dl@3.5.2: + resolution: {integrity: sha512-i104cl+u8yJ0lhpRAtUWfeGuWuL1PL6TBiw2gLf0MMIBjfgE485Ags2mcySx4uWU9P9uj/vsD3jd7X+w1lzZxw==} + engines: {node: '>=12'} electron-is-dev@2.0.0: resolution: {integrity: sha512-3X99K852Yoqu9AcW50qz3ibYBWY79/pBhlMCab8ToEWS48R0T9tyxRiQhwylE7zQdXrMnx2JKqUJyMPmt5FBqA==} @@ -7082,7 +7096,7 @@ snapshots: '@cnakazawa/watch@1.0.4': dependencies: exec-sh: 0.3.6 - minimist: 1.2.7 + minimist: 1.2.8 '@colors/colors@1.6.0': {} @@ -9693,10 +9707,10 @@ snapshots: electron-context-menu@3.6.1: dependencies: cli-truncate: 2.1.0 - electron-dl: 3.5.0 + electron-dl: 3.5.2 electron-is-dev: 2.0.0 - electron-dl@3.5.0: + electron-dl@3.5.2: dependencies: ext-name: 5.0.0 pupa: 2.1.1 @@ -12266,7 +12280,7 @@ snapshots: decamelize: 1.2.0 loud-rejection: 1.6.0 map-obj: 1.0.1 - minimist: 1.2.7 + minimist: 1.2.8 normalize-package-data: 2.5.0 object-assign: 4.1.1 read-pkg-up: 1.0.1 @@ -12373,7 +12387,7 @@ snapshots: mkdirp@0.5.6: dependencies: - minimist: 1.2.7 + minimist: 1.2.8 mkdirp@1.0.4: {} @@ -13237,7 +13251,7 @@ snapshots: dependencies: deep-extend: 0.6.0 ini: 1.3.8 - minimist: 1.2.7 + minimist: 1.2.8 strip-json-comments: 2.0.1 react-is@17.0.2: {} @@ -13583,7 +13597,7 @@ snapshots: execa: 1.0.0 fb-watchman: 2.0.2 micromatch: 3.1.10 - minimist: 1.2.7 + minimist: 1.2.8 walker: 1.0.8 transitivePeerDependencies: - supports-color diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index c08acbe6..aef79cc9 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -3,3 +3,4 @@ packages: - "server" - "deemix" - "deezer-js" + - "gui"