From d56720a003e79aa298e6231258be719dbccd6cd1 Mon Sep 17 00:00:00 2001 From: Pauline Date: Sat, 3 Aug 2024 17:24:30 +0200 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feature:=20update=20to=20tauri@rc.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .cargo/config.toml | 2 +- .editorconfig | 4 + .../fetch.ts => .github/workflows/build.yml | 0 .../flock.ts => .github/workflows/release.yml | 0 .vscode/extensions.json | 6 +- .vscode/launch.json | 26 ++++ .vscode/settings.json | 30 ++-- .vscode/tasks.json | 23 ++++ Cargo.toml | 27 ++-- apps/desktop/Cargo.toml | 19 +-- apps/desktop/capabilities/default.json | 39 +++--- apps/desktop/package.json | 4 +- apps/desktop/src/ext/updater.rs | 6 +- apps/desktop/tauri.conf.json | 13 +- apps/frontend/package.json | 6 +- apps/testing/package.json | 2 + packages/client/package.json | 3 +- packages/core/package.json | 2 + packages/core/src/store/settings.rs | 2 +- packages/distribution/package.json | 3 +- .../shared.ts => distribution/rpm/.gitkeep} | 0 .../snapcraft/.gitkeep} | 0 packages/macros/package.json | 14 ++ packages/scripts/package.json | 3 +- packages/scripts/prepare.ts | 20 +++ packages/scripts/tauri.ts | 101 ++++++++++++++ packages/scripts/utils/index.ts | 74 ++++++++++ packages/scripts/utils/patch.ts | 9 ++ pnpm-lock.yaml | 128 ++++++++---------- 29 files changed, 423 insertions(+), 143 deletions(-) rename packages/scripts/utils/fetch.ts => .github/workflows/build.yml (100%) rename packages/scripts/utils/flock.ts => .github/workflows/release.yml (100%) create mode 100644 .vscode/launch.json create mode 100644 .vscode/tasks.json rename packages/{scripts/utils/shared.ts => distribution/rpm/.gitkeep} (100%) rename packages/{scripts/utils/which.ts => distribution/snapcraft/.gitkeep} (100%) create mode 100644 packages/macros/package.json create mode 100644 packages/scripts/utils/index.ts diff --git a/.cargo/config.toml b/.cargo/config.toml index 48c6e34b..2dfb816a 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -4,4 +4,4 @@ rustflags = [ "link-args=/STACK:16777220" ] -[alias] +[env] diff --git a/.editorconfig b/.editorconfig index 1405749a..d691fc17 100644 --- a/.editorconfig +++ b/.editorconfig @@ -21,3 +21,7 @@ trim_trailing_whitespace = true [*.{yaml,yml}] indent_style = space indent_size = 2 + +[*.toml] +indent_style = space +indent_size = 2 diff --git a/packages/scripts/utils/fetch.ts b/.github/workflows/build.yml similarity index 100% rename from packages/scripts/utils/fetch.ts rename to .github/workflows/build.yml diff --git a/packages/scripts/utils/flock.ts b/.github/workflows/release.yml similarity index 100% rename from packages/scripts/utils/flock.ts rename to .github/workflows/release.yml diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 0e56429a..4d9ddbf5 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -2,11 +2,11 @@ "recommendations": [ "tauri-apps.tauri-vscode", "rust-lang.rust-analyzer", - "bradlc.vscode-tailwindcss", - // "oscarbeaumont.rspc-vscode", + "vadimcn.vscode-lldb", + "oscarbeaumont.rspc-vscode", + "antfu.unocss", "EditorConfig.EditorConfig", "prisma.prisma", "dbaeumer.vscode-eslint" - // "astro-build.astro-vscode" ] } diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 00000000..72f6a690 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,26 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "lldb", + "request": "launch", + "name": "Tauri Development", + "cargo": { + "args": ["build", "--package onelauncher_gui"] + }, + "preLaunchTask": "desktop:frontend:dev" + }, + { + "type": "lldb", + "request": "launch", + "name": "Tauri Production", + "cargo": { + "args": ["build", "--package onelauncher_gui", "--release"] + }, + "preLaunchTask": "desktop:frontend:build" + } + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json index 20a1472e..6f998f10 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -17,11 +17,6 @@ "**/.cargo": true, "**/.crates": true }, - "rust-analyzer.diagnostics.disabled": [ - "E0004", - "inactive-code", - "inactive_code" - ], "rust-analyzer.files.excludeDirs": [ "_build", ".flatpak-builder", @@ -44,23 +39,38 @@ ".crates" ], "rust-analyzer.procMacro.enable": true, - "rust-analyzer.diagnostics.experimental.enable": false, "search.exclude": { "**/node_modules": true, "**/bower_components": true, "**/*.code-search": true, "**/pnpm-lock.yaml": true, "**/.gitignore": true, - "/packages/ctjs/types/*": true, "**/dist": true }, - "eslint.experimental.useFlatConfig": true, + + // Disable the default formatter "prettier.enable": false, "editor.formatOnSave": false, + // Auto fix "editor.codeActionsOnSave": { "source.fixAll.eslint": "explicit", "source.organizeImports": "never" }, + "eslint.runtime": "node", + "eslint.useFlatConfig": true, + // Silent the stylistic rules in you IDE, but still auto fix them + "eslint.rules.customizations": [ + { "rule": "style/*", "severity": "off", "fixable": true }, + { "rule": "*-indent", "severity": "off", "fixable": true }, + { "rule": "*-spacing", "severity": "off", "fixable": true }, + { "rule": "*-spaces", "severity": "off", "fixable": true }, + { "rule": "*-order", "severity": "off", "fixable": true }, + { "rule": "*-dangle", "severity": "off", "fixable": true }, + { "rule": "*-newline", "severity": "off", "fixable": true }, + { "rule": "*quotes", "severity": "off", "fixable": true }, + { "rule": "*semi", "severity": "off", "fixable": true } + ], + "eslint.validate": [ "javascript", "javascriptreact", @@ -72,9 +82,9 @@ "json", "jsonc", "yaml", + "xml", "astro", - "toml", - "solid" + "toml" ], "eslint.lintTask.enable": true, "eslint.workingDirectories": [], diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 00000000..fb8a7de1 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,23 @@ +{ + // See https://go.microsoft.com/fwlink/?LinkId=733558 + // for the documentation about the tasks.json format + "version": "2.0.0", + "tasks": [ + { + "label": "desktop:frontend:dev", + "type": "shell", + "isBackground": true, + "command": "pnpm", + "args": ["frontend", "dev"], + // todo: problemMatcher + "group": "build" + }, + { + "label": "desktop:frontend:build", + "type": "shell", + "command": "pnpm", + "args": ["frontend", "build"], + "group": "build" + } + ] +} diff --git a/Cargo.toml b/Cargo.toml index 98200c07..c9f76704 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -30,8 +30,7 @@ onelauncher_test = { path = "./apps/testing" } # tauri uses latest crates.io beta channel # (temporarily can use v2 and main branches if necessary) -# TODO: release candidate update is blocked by tauri-specta. -tauri = { version = "=2.0.0-beta.25", features = [ +tauri = { version = "=2.0.0-rc.0", features = [ "rustls-tls", "tracing", "specta", @@ -39,26 +38,20 @@ tauri = { version = "=2.0.0-beta.25", features = [ "protocol-asset" ] } -# TODO: remove locked tauri-* deps once we update to the release candidate. -tauri-utils = { version = "=2.0.0-beta.19" } -tauri-build = { version = "=2.0.0-beta.19" } -tauri-codegen = { version = "=2.0.0-beta.19" } -tauri-macros = { version = "=2.0.0-beta.19" } -tauri-plugin = { version = "=2.0.0-beta.19" } -tauri-runtime = { version = "=2.0.0-beta.21" } +tauri-build = { version = "=2.0.0-rc.0" } # tauri-plugin-shell adds a bridge for opening urls and paths in the frontend. -tauri-plugin-shell = { version = "=2.0.0-beta.10" } +tauri-plugin-shell = { version = "=2.0.0-rc.0" } # tauri-plugin-window-state saves the window position and size to be restored. -tauri-plugin-window-state = { version = "=2.0.0-beta.12" } +tauri-plugin-window-state = { version = "=2.0.0-rc.0" } # tauri-plugin-single-instance ensures that only one instance of the app is running. -tauri-plugin-single-instance = { version = "=2.0.0-beta.12" } +tauri-plugin-single-instance = { version = "=2.0.0-rc.0" } # tauri-plugin-clipboard-manager adds a bridge for reading/writing to the clipboard. -tauri-plugin-clipboard-manager = { version = "=2.1.0-beta.7" } +tauri-plugin-clipboard-manager = { version = "=2.0.0-rc.0" } # tauri-plugin-updater allows for us to use it's functionality for in-app updates. -tauri-plugin-updater = { version = "=2.0.0-beta.12" } +tauri-plugin-updater = { version = "=2.0.0-rc.0" } # tauri-plugin-dialog adds a bridge for opening file manager and message dialogs. -tauri-plugin-dialog = { version = "=2.0.0-beta.12" } +tauri-plugin-dialog = { version = "=2.0.0-rc.0" } # rspc is used as a faster and more intuitive replacement for tauri-specta # commands/apis that don't depend on tauri. rather than using the tauri @@ -91,7 +84,7 @@ specta = { version = "=2.0.0-rc.19", features = [ ] } # tauri-specta -tauri-specta = { version = "=2.0.0-rc.13", features = [ +tauri-specta = { version = "=2.0.0-rc.14", features = [ "javascript", "typescript", "derive" @@ -135,6 +128,8 @@ async-tungstenite = { version = "0.26", features = [ "tokio-runtime", "tokio-rustls-native-certs" ] } +strum = { version = "0.23", features = [ "derive" ] } +once_cell = { version = "1.19" } tokio-stream = { version = "0.1.15", features = [ "fs" ] } serde = { version = "1.0", features = [ "derive" ] } chrono = { version = "0.4", features = [ "serde" ] } diff --git a/apps/desktop/Cargo.toml b/apps/desktop/Cargo.toml index f6c31075..77753868 100644 --- a/apps/desktop/Cargo.toml +++ b/apps/desktop/Cargo.toml @@ -1,5 +1,6 @@ [package] name = "onelauncher_gui" +default-run = "onelauncher_gui" description = "Next-generation open source Minecraft launcher" version = "1.0.0-alpha.1" # todo: make it so tauri works with the ws license = { workspace = true } @@ -15,7 +16,7 @@ name = "onelauncher_gui" crate-type = [ "staticlib", "cdylib", - "rlib" + "lib" ] [build-dependencies] @@ -24,13 +25,6 @@ tauri-build = { workspace = true, features = [ "isolation" ] } [dependencies] onelauncher = { workspace = true, features = [ "tauri" ] } -tauri-utils = { workspace = true } -tauri-build = { workspace = true } -tauri-codegen = { workspace = true } -tauri-macros = { workspace = true } -tauri-plugin = { workspace = true } -tauri-runtime = { workspace = true } - tauri-plugin-shell = { workspace = true } tauri-plugin-window-state = { workspace = true } tauri-plugin-single-instance = { workspace = true } @@ -44,6 +38,8 @@ specta-typescript = { workspace = true } interpulse.workspace = true +strum = { workspace = true } +once_cell = { workspace = true } tokio = { workspace = true } serde = { workspace = true } serde_json = { workspace = true } @@ -62,7 +58,8 @@ features = [ "macos-private-api", "image-ico", "image-png", - "protocol-asset" + "protocol-asset", + "specta" ] [dev-dependencies.tauri] @@ -73,6 +70,10 @@ features = [ "test" ] cocoa.workspace = true objc.workspace = true +[target.'cfg(target_os = "linux")'.dependencies] +# https://github.com/tauri-apps/tauri/blob/tauri-v2.0.0-rc.0/core/tauri/Cargo.toml#L86 +webkit2gtk = { version = "=2.0.1", features = [ "v2_38" ] } + [features] default = [ "custom-protocol" ] devtools = [ "tauri/devtools" ] diff --git a/apps/desktop/capabilities/default.json b/apps/desktop/capabilities/default.json index 3e945f50..8fa09365 100644 --- a/apps/desktop/capabilities/default.json +++ b/apps/desktop/capabilities/default.json @@ -4,29 +4,30 @@ "description": "capabilities for the main window", "windows": ["*"], "permissions": [ - "app:default", - "webview:default", - "image:default", - "menu:default", - "path:default", - "resources:default", - "tray:default", - "window:default", + "core:app:default", + "core:webview:default", + "core:image:default", + "core:menu:default", + "core:path:default", + "core:resources:default", + "core:tray:default", + "core:window:default", - "window:allow-close", - "window:allow-create", - "window:allow-destroy", - "window:allow-start-dragging", - "window:allow-minimize", - "window:allow-maximize", - "window:allow-toggle-maximize", - "window:allow-internal-toggle-maximize", - "event:default", + "core:window:allow-close", + "core:window:allow-create", + "core:window:allow-destroy", + "core:window:allow-start-dragging", + "core:window:allow-minimize", + "core:window:allow-maximize", + "core:window:allow-toggle-maximize", + "core:window:allow-internal-toggle-maximize", + "core:webview:allow-internal-toggle-devtools", + + "core:event:default", "shell:allow-open", "clipboard-manager:allow-write-text", "dialog:allow-open", "dialog:allow-save", - "dialog:allow-confirm", - "webview:allow-internal-toggle-devtools" + "dialog:allow-confirm" ] } diff --git a/apps/desktop/package.json b/apps/desktop/package.json index 4ef921a6..1dc4ea2c 100644 --- a/apps/desktop/package.json +++ b/apps/desktop/package.json @@ -10,6 +10,8 @@ "url": "git@github.com:polyfrost/onelauncher", "directory": "apps/desktop" }, + "bugs": "https://github.com/polyfrost/onelauncher/issues", + "sideEffects": false, "scripts": { "build": "tauri build", "dev": "tauri dev", @@ -21,6 +23,6 @@ "@onelauncher/frontend": "workspace:*" }, "devDependencies": { - "@tauri-apps/cli": "2.0.0-beta.23" + "@tauri-apps/cli": "2.0.0-rc.0" } } diff --git a/apps/desktop/src/ext/updater.rs b/apps/desktop/src/ext/updater.rs index 1c2f58d3..d2b2ec13 100644 --- a/apps/desktop/src/ext/updater.rs +++ b/apps/desktop/src/ext/updater.rs @@ -55,14 +55,14 @@ pub async fn check_for_update(app: tauri::AppHandle) -> Result, S } }; - let update = update.map(|update| Update::new(&update)); + let update = update.map(|u| Update::new(&u)); app.emit( "updater", update .clone() - .map_or(UpdateEvent::NoUpdateAvailable, |update| { - UpdateEvent::UpdateAvailable { update } + .map_or(UpdateEvent::NoUpdateAvailable, |u| { + UpdateEvent::UpdateAvailable { update: u } }), ) .ok(); diff --git a/apps/desktop/tauri.conf.json b/apps/desktop/tauri.conf.json index 51727ad9..c9bf4014 100644 --- a/apps/desktop/tauri.conf.json +++ b/apps/desktop/tauri.conf.json @@ -104,17 +104,19 @@ "../../packages/distribution/icons/icon.ico" ], "copyright": "Polyfrost", - "longDescription": "", + "publisher": "Polyfrost", + "license": "GPL-3.0-only", + "homepage": "https://polyfrost.org/", + "longDescription": "Next-generation open source Minecraft launcher", "resources": [], "externalBin": [], - "publisher": "Polyfrost", "linux": { "deb": { "depends": [], "desktopTemplate": "../../packages/distribution/linux/org.polyfrost.launcher.desktop.template" } }, - "shortDescription": "Next-generation open source Minecraft launcher", + "shortDescription": "OneLauncher", "macOS": { "entitlements": "App.entitlements", "exceptionDomain": null, @@ -138,7 +140,10 @@ "active": true, "dialog": false, "pubkey": "", - "endpoints": ["https://polyfrost.org/releases/update/{{version}}/{{target}}/{{arch}}"] + "endpoints": ["https://polyfrost.org/releases/tauri/{{version}}/{{target}}/{{arch}}"] + }, + "deep-link": { + "desktop": ["onelauncher"] } } } diff --git a/apps/frontend/package.json b/apps/frontend/package.json index 85c392bd..f84a86aa 100644 --- a/apps/frontend/package.json +++ b/apps/frontend/package.json @@ -10,6 +10,8 @@ "url": "git@github.com:polyfrost/onelauncher", "directory": "apps/frontend" }, + "bugs": "https://github.com/polyfrost/onelauncher/issues", + "sideEffects": false, "scripts": { "dev": "vite", "build": "vite build" @@ -25,7 +27,7 @@ "@solid-primitives/refs": "^1.0.8", "@solidjs/router": "^0.14.1", "@tanstack/solid-query": "^5.51.21", - "@tauri-apps/api": "2.0.0-beta.16", + "@tauri-apps/api": "2.0.0-rc.0", "@tauri-apps/plugin-clipboard-manager": "github:tauri-apps/tauri-plugin-clipboard-manager#v2", "@tauri-apps/plugin-dialog": "github:tauri-apps/tauri-plugin-dialog#v2", "@tauri-apps/plugin-shell": "github:tauri-apps/tauri-plugin-shell#v2", @@ -42,7 +44,7 @@ }, "devDependencies": { "@solidjs/testing-library": "^0.8.9", - "@tauri-apps/cli": "2.0.0-beta.23", + "@tauri-apps/cli": "2.0.0-rc.0", "@testing-library/jest-dom": "^6.4.8", "@types/uuid": "^10.0.0", "jsdom": "^24.1.1", diff --git a/apps/testing/package.json b/apps/testing/package.json index 07aa3488..3f108dd4 100644 --- a/apps/testing/package.json +++ b/apps/testing/package.json @@ -9,5 +9,7 @@ "url": "git@github.com:polyfrost/onelauncher", "directory": "apps/testing" }, + "bugs": "https://github.com/polyfrost/onelauncher/issues", + "sideEffects": false, "scripts": {} } diff --git a/packages/client/package.json b/packages/client/package.json index ac134ed9..3cba86b4 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -3,13 +3,14 @@ "type": "module", "version": "1.0.0-alpha.1", "private": true, - "description": "RSPC Client for OneLauncher", + "description": "RSPC Client and Utilities for OneLauncher", "license": "GPL-3.0-only", "repository": { "type": "git", "url": "git@github.com:polyfrost/onelauncher", "directory": "packages/client" }, + "bugs": "https://github.com/polyfrost/onelauncher/issues", "sideEffects": false, "main": "./src/index.ts", "types": "./src/index.ts", diff --git a/packages/core/package.json b/packages/core/package.json index fa222332..162b15b3 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -8,5 +8,7 @@ "url": "git@github.com:polyfrost/onelauncher", "directory": "packages/core" }, + "bugs": "https://github.com/polyfrost/onelauncher/issues", + "sideEffects": false, "scripts": {} } diff --git a/packages/core/src/store/settings.rs b/packages/core/src/store/settings.rs index 1af9859a..0c72c6da 100644 --- a/packages/core/src/store/settings.rs +++ b/packages/core/src/store/settings.rs @@ -92,7 +92,7 @@ impl Settings { } else { let settings = Self { theme: Theme::Dark, - hide_close_prompt: false, + hide_close_prompt: true, disable_animations: false, force_fullscreen: false, resolution: Resolution::default(), diff --git a/packages/distribution/package.json b/packages/distribution/package.json index 52a470b5..3f2b4b97 100644 --- a/packages/distribution/package.json +++ b/packages/distribution/package.json @@ -2,13 +2,14 @@ "name": "@onelauncher/distribution", "version": "1.0.0-alpha.1", "private": true, - "description": "distribution files for OneLauncher", + "description": "Distribution files for OneLauncher", "license": "GPL-3.0-only", "repository": { "type": "git", "url": "git@github.com:polyfrost/onelauncher", "directory": "packages/distribution" }, + "bugs": "https://github.com/polyfrost/onelauncher/issues", "sideEffects": false, "scripts": {}, "dependencies": {}, diff --git a/packages/scripts/utils/shared.ts b/packages/distribution/rpm/.gitkeep similarity index 100% rename from packages/scripts/utils/shared.ts rename to packages/distribution/rpm/.gitkeep diff --git a/packages/scripts/utils/which.ts b/packages/distribution/snapcraft/.gitkeep similarity index 100% rename from packages/scripts/utils/which.ts rename to packages/distribution/snapcraft/.gitkeep diff --git a/packages/macros/package.json b/packages/macros/package.json new file mode 100644 index 00000000..6905d22c --- /dev/null +++ b/packages/macros/package.json @@ -0,0 +1,14 @@ +{ + "name": "@onelauncher/macros", + "version": "1.0.0-alpha.1", + "description": "Next-generation open source Minecraft launcher macros", + "license": "GPL-3.0-only", + "repository": { + "type": "git", + "url": "git@github.com:polyfrost/onelauncher", + "directory": "packages/macros" + }, + "bugs": "https://github.com/polyfrost/onelauncher/issues", + "sideEffects": false, + "scripts": {} +} diff --git a/packages/scripts/package.json b/packages/scripts/package.json index e42dcfa2..887f86b3 100644 --- a/packages/scripts/package.json +++ b/packages/scripts/package.json @@ -10,6 +10,7 @@ "url": "git@github.com:polyfrost/onelauncher", "directory": "packages/scripts" }, + "bugs": "https://github.com/polyfrost/onelauncher/issues", "sideEffects": false, "main": "./src/index.ts", "types": "./src/index.ts", @@ -18,8 +19,8 @@ }, "dependencies": { "@flowr/utils": "^3.10.2", - "@iarna/toml": "^2.2.5", "execa": "^9.3.0", + "pathe": "^1.1.2", "semver": "^7.6.3", "undici": "^6.19.5" }, diff --git a/packages/scripts/prepare.ts b/packages/scripts/prepare.ts index e69de29b..62cda4b5 100644 --- a/packages/scripts/prepare.ts +++ b/packages/scripts/prepare.ts @@ -0,0 +1,20 @@ +#!/usr/bin/env node + +import { checkEnvironment, which } from './utils'; +import { getTriple } from './utils/triple'; + +checkEnvironment(import.meta); +const triple = getTriple(); + +if ((await Promise.all([which`cargo`, which`rustc`, which`pnpm`])).some(f => !f)) + console.error( + ` + Basic OneLauncher dependencies missing! + Ensure you have rust and pnpm installed: + https://rustup.rs + https://pnpm.io + + And that you have run the setup script: + packages/scripts/${triple[0] === 'Windows_NT' ? 'setup.ps1' : 'setup.sh'} + `, + ); diff --git a/packages/scripts/tauri.ts b/packages/scripts/tauri.ts index e69de29b..7d211d03 100644 --- a/packages/scripts/tauri.ts +++ b/packages/scripts/tauri.ts @@ -0,0 +1,101 @@ +#!/usr/bin/env node + +import process from 'node:process'; +import * as fs from 'node:fs/promises'; +import { setTimeout } from 'node:timers/promises'; +import pathe from 'pathe'; +import { execa } from 'execa'; +import { awaitLock, checkEnvironment } from './utils'; + +const { __dirname, __root } = checkEnvironment(import.meta); +const [_, __, ...args] = process.argv; +const __distribution = pathe.join(__root, 'packages', 'distribution'); +const __desktop = pathe.join(__root, 'apps', 'desktop'); +const __cleanup: string[] = []; + +const cleanup = () => Promise.all(__cleanup.map(f => fs.unlink(f).catch((_) => {}))); +const exists = (path: string) => fs.access(path, fs.constants.R_OK).then(_ => true).catch(_ => false); + +process.on('SIGINT', cleanup); +if (args.length === 0) + args.push('build'); + +function targetFilter(filter: 'b' | 't') { + const filters = filter === 'b' ? ['-b', '--bundles'] : ['-t', '--target']; + return (_: string, idx: number, args: string[]) => { + if (idx === 0) + return false; + const prev = args[idx - 1] ?? ''; + return filters.includes(prev); + }; +} + +const targets = args.filter(targetFilter('t')).flatMap(t => t.split(',')); +const bundles = args.filter(targetFilter('b')).flatMap(t => t.split(',')); + +const store = { code: 0 }; + +try { + switch (args[0]) { + case 'dev': { + __cleanup.push(...([])); + switch (process.platform) { + case 'linux': + case 'darwin': + void awaitLock(pathe.join(__root, 'target', 'debug', '.cargo-lock')) + .then(_ => setTimeout(1000).then(cleanup), (_) => {}); + break; + } + + break; + } + case 'build': { + if (!process.env.NODE_OPTIONS || !process.env.NODE_OPTIONS.includes('--max_old_space_size')) + process.env.NODE_OPTIONS = `--max_old_space_size=4096 ${process.env.NODE_OPTIONS ?? ''}`; + + process.env.GENERATE_SOURCEMAP = 'false'; + __cleanup.push(...([])); + + if (process.platform === 'darwin') { + process.env.BACKGROUND_FILE = pathe.resolve(__distribution, 'macos', 'dmg.png'); + process.env.BACKGROUND_FILE_NAME = pathe.basename(process.env.BACKGROUND_FILE); + process.env.BACKGROUND_CLAUSE = `set background picture of opts to file ".background:${process.env.BACKGROUND_FILE_NAME}"`; + + if (!(await exists(process.env.BACKGROUND_FILE))) + console.warn(`dmg background file not found at ${process.env.BACKGROUND_FILE}`); + + break; + } + } + } + + await execa('pnpm', ['desktop', 'tauri', ...args], { cwd: __desktop }); + + if (args[0] === 'build' && bundles.some(b => b === 'deb' || b === 'all')) { + const linuxTargets = targets.filter(t => t.includes('-linux-')); + if (linuxTargets.length > 0) + linuxTargets.forEach(async (t) => { + process.env.TARGET = t; + await execa(pathe.join(__dirname, 'fix-deb.sh'), [], { cwd: __dirname }); + }); + else if (process.platform === 'linux') + await execa(pathe.join(__dirname, 'fix-deb.sh'), [], { cwd: __dirname }); + } +} +catch (error: any) { + console.error(`tauri ${args[0]} failed with exit code ${typeof error === 'number' ? error : 1}`); + console.warn(`to fix some errors, run ${process.platform === 'win32' ? './packages/scripts/setup.ps1' : './packages/scripts/setup.sh'}`); + + if (typeof error === 'number') { + store.code = error; + } + else { + if (error instanceof Error) + console.error(error); + store.code = 1; + } +} +finally { + cleanup(); + process.exit(store.code); +} diff --git a/packages/scripts/utils/index.ts b/packages/scripts/utils/index.ts new file mode 100644 index 00000000..0241977b --- /dev/null +++ b/packages/scripts/utils/index.ts @@ -0,0 +1,74 @@ +import process from 'node:process'; +import { fileURLToPath } from 'node:url'; +import { setTimeout } from 'node:timers/promises'; + +import { type } from 'node:os'; +import fs from 'node:fs/promises'; +import { dirname, join, resolve } from 'pathe'; +import { execa } from 'execa'; + +export function checkEnvironment(meta: ImportMeta) { + if (/^(?:msys|mingw|cygwin)$/i.test(process.env.OSTYPE ?? '')) { + console.error('bash for windows is not supported. please use powershell or cmd'); + process.exit(255); + } + + process.umask(0o026); + + const __filename = fileURLToPath(meta.url); + const __dirname = dirname(__filename); + const __debug = process.env.NODE_ENV === 'debug'; + const __root = resolve(join(__dirname, '..', '..')); + + return { __filename, __dirname, __debug, __root }; +} + +async function where(cmd: string): Promise { + if (/\\/.test(cmd)) + return false; + + try { + await execa(cmd); + } + catch { + return false; + } + + return true; +} + +export async function which(cmd: TemplateStringsArray): Promise { + return type() === 'Windows_NT' + ? where(cmd[0]!) + : Promise.any( + Array.from(new Set(process.env.PATH?.split(':'))) + .map(p => fs.access(join(p, cmd[0]!), fs.constants.X_OK)), + ).then(_ => true, _ => false); +} + +export async function awaitLock(file: string): Promise { + if (!(await which`flock`)) + throw new Error('flock is not installed!'); + + const store = { locked: false }; + while (!store.locked) + try { + await execa`flock -ns "${file}" -c true`; + await setTimeout(100); + } + catch { + store.locked = true; + } + + while (store.locked) { + try { + await execa`flock -ns "${file}" -c true`; + } + catch { + await setTimeout(100); + continue; + } + + store.locked = false; + } +} diff --git a/packages/scripts/utils/patch.ts b/packages/scripts/utils/patch.ts index e69de29b..13412041 100644 --- a/packages/scripts/utils/patch.ts +++ b/packages/scripts/utils/patch.ts @@ -0,0 +1,9 @@ +// import process from 'node:process'; +// import pathe from 'pathe'; + +// export async function tauriUpdateKey(): Promise { +// if (process.env.TAURI_SIGNING_PRIVATE_KEY) +// return; + +// const privateKeyPath = pathe.join(); +// } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 27d02e30..7752e92e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -55,8 +55,8 @@ importers: version: link:../frontend devDependencies: '@tauri-apps/cli': - specifier: 2.0.0-beta.23 - version: 2.0.0-beta.23 + specifier: 2.0.0-rc.0 + version: 2.0.0-rc.0 apps/frontend: dependencies: @@ -80,7 +80,7 @@ importers: version: 0.2.3(@tanstack/solid-query@5.51.21(solid-js@1.8.19))(solid-js@1.8.19) '@rspc/tauri': specifier: ^0.2.0 - version: 0.2.0(@tauri-apps/api@2.0.0-beta.16) + version: 0.2.0(@tauri-apps/api@2.0.0-rc.0) '@solid-primitives/refs': specifier: ^1.0.8 version: 1.0.8(solid-js@1.8.19) @@ -91,8 +91,8 @@ importers: specifier: ^5.51.21 version: 5.51.21(solid-js@1.8.19) '@tauri-apps/api': - specifier: 2.0.0-beta.16 - version: 2.0.0-beta.16 + specifier: 2.0.0-rc.0 + version: 2.0.0-rc.0 '@tauri-apps/plugin-clipboard-manager': specifier: github:tauri-apps/tauri-plugin-clipboard-manager#v2 version: https://codeload.github.com/tauri-apps/tauri-plugin-clipboard-manager/tar.gz/20e84cfbdebcd86bb1854846feb0aaff4481fbd0 @@ -137,8 +137,8 @@ importers: specifier: ^0.8.9 version: 0.8.9(@solidjs/router@0.14.1(solid-js@1.8.19))(solid-js@1.8.19) '@tauri-apps/cli': - specifier: 2.0.0-beta.23 - version: 2.0.0-beta.23 + specifier: 2.0.0-rc.0 + version: 2.0.0-rc.0 '@testing-library/jest-dom': specifier: ^6.4.8 version: 6.4.8 @@ -200,17 +200,19 @@ importers: packages/distribution: {} + packages/macros: {} + packages/scripts: dependencies: '@flowr/utils': specifier: ^3.10.2 version: 3.10.2 - '@iarna/toml': - specifier: ^2.2.5 - version: 2.2.5 execa: specifier: ^9.3.0 version: 9.3.0 + pathe: + specifier: ^1.1.2 + version: 1.1.2 semver: specifier: ^7.6.3 version: 7.6.3 @@ -853,9 +855,6 @@ packages: resolution: {integrity: sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==} engines: {node: '>=18.18'} - '@iarna/toml@2.2.5': - resolution: {integrity: sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==} - '@iconify-json/logos@1.1.43': resolution: {integrity: sha512-UtvL1yDHUr9dl1Tqihh6K9m5dmbYKOYyLf3i9aKhymSW76QjOCGjpgQc0PQ4GJCAdU1cAMu+WO61TgPxdonrlg==} @@ -1198,76 +1197,72 @@ packages: peerDependencies: solid-js: ^1.6.0 - '@tauri-apps/api@2.0.0-beta.16': - resolution: {integrity: sha512-YGjkR9HxS/YyIoqoXDkk8o9Yy5NW6u9YxzeqEodwwOUoeS0nac6mzLTW3VYIuSelHmyUQCgbyENVY6e5CJXA4Q==} - engines: {node: '>= 18.18', npm: '>= 6.6.0', yarn: '>= 1.19.1'} - '@tauri-apps/api@2.0.0-rc.0': resolution: {integrity: sha512-v454Qs3REHc3Za59U+/eSmBsdmF+3NE5+76+lFDaitVqN4ZglDHENDaMARYKGJVZuxiSkzyqG0SeG7lLQjVkPA==} engines: {node: '>= 18.18', npm: '>= 6.6.0', yarn: '>= 1.19.1'} - '@tauri-apps/cli-darwin-arm64@2.0.0-beta.23': - resolution: {integrity: sha512-Ppt76xF2SeXdkzgYdIo/UZwkvj76G33MCX9ouqqIlTVqj1FUWYLnHqUh9iCbav98NI3WzhMpNtxzRJq++7/qmw==} + '@tauri-apps/cli-darwin-arm64@2.0.0-rc.0': + resolution: {integrity: sha512-jpQc++6ESFUuBpoXvJNPTRtrmToMIByOynZ4K5SAwI9RkKUikSaDmlRZV0GisOVPT7TT08khk7MPtAQeFyjqwA==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@tauri-apps/cli-darwin-x64@2.0.0-beta.23': - resolution: {integrity: sha512-mfj0NVN90JtluiGcupGy450Hn0YAHOjH1blA+4C3UniM0otmhdGMrbl5szhVFdWj6xmpaB8B2HmgUOgSuvVbzQ==} + '@tauri-apps/cli-darwin-x64@2.0.0-rc.0': + resolution: {integrity: sha512-EnqsgcNUwH29YjQ4JdBID5kILQQdIJgZ36VQgtju/BBvnd1lr+6Bswdk1/4y41hhAVz9WyHeMCnTH33CSKvNxw==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@tauri-apps/cli-linux-arm-gnueabihf@2.0.0-beta.23': - resolution: {integrity: sha512-K8yZen+M4X8hPDiXlXi5tYHMeJ6A4tmmVDAA84iNJndMpTbI2Mrveprnjekzeu3l7qTMZd6W44TtMXUODH+4Tw==} + '@tauri-apps/cli-linux-arm-gnueabihf@2.0.0-rc.0': + resolution: {integrity: sha512-YKg/qThAmQYRToiV8lx/DvMf0VaUJAutIfv8ALq9Or4zdg7mZlAlKvF+7lZQQRmKhQ62+0gnoJS2HyN8feaagw==} engines: {node: '>= 10'} cpu: [arm] os: [linux] - '@tauri-apps/cli-linux-arm64-gnu@2.0.0-beta.23': - resolution: {integrity: sha512-1+P1KVMNszPC2y6LXXAnm8i11rye/XjJYqNUoEIAp5jRiaQmm5xmaA61QeWSVWtbEmKM44kK9j1eOkZQWs6HzQ==} + '@tauri-apps/cli-linux-arm64-gnu@2.0.0-rc.0': + resolution: {integrity: sha512-UnflWuNhH/u41GSmG1jm6qhWUM4o1AB463QCaf2fAjLo5GWiI78U6rJOOXZvOOmWIQuzsmAUZjNDORWW13+osA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@tauri-apps/cli-linux-arm64-musl@2.0.0-beta.23': - resolution: {integrity: sha512-x9aH0t1liyL+fv2I22gd1XKR8v5St9x8t3d2Jcjw6IK3EUIiHY5KEdif/5UTHsmlkjLu/d40ssLgcaXH5rk+iQ==} + '@tauri-apps/cli-linux-arm64-musl@2.0.0-rc.0': + resolution: {integrity: sha512-sWRaDyb332gtHWHr0KvoLzkzvXqRpZ0vpQYxKF2/mIZtaUuMtU56GmRwFVX4VjQYgWb3yWmzTr+tEKjCjXbjng==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@tauri-apps/cli-linux-x64-gnu@2.0.0-beta.23': - resolution: {integrity: sha512-NMiU5Ep6aXSkaO2B023/XzoA0FTwuMqOpxUE+T4pvLld1zE+7brvHzSoQ0pXlppALyWMfH0CWX/2xnhVpQwJxA==} + '@tauri-apps/cli-linux-x64-gnu@2.0.0-rc.0': + resolution: {integrity: sha512-1dokW+9ZfhwzwYz42jYR5A0/VnGoEGVW7HyN1N6KvHeL1FpSbh0LoTsDODjVjZSjXd62+Aac/stbJqBZChQWbA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@tauri-apps/cli-linux-x64-musl@2.0.0-beta.23': - resolution: {integrity: sha512-iPLalS0zv2NwG8c0focKs1m90p2xpvI21vwYTp564G5K1RDJ7eOVCKQpKiHdanSruieRjA/o21dJ2DUAzQkQpA==} + '@tauri-apps/cli-linux-x64-musl@2.0.0-rc.0': + resolution: {integrity: sha512-7tb34p3vLEGS4pGRpmxcz7eq37yD7DVe4XFfgj8ZO0KsaRBVivzNK2snNDLnd0dVZcx/lJjZc8Cf0B5W1/x/Jw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@tauri-apps/cli-win32-arm64-msvc@2.0.0-beta.23': - resolution: {integrity: sha512-RUwrwhb/cVelqkq5/Isq9SeXk5PJ15TNNr+A3EMcWN+eNOtHQimNM9xqSzXMwwNPExuvSOIDpnHWBQPd7FQ+nw==} + '@tauri-apps/cli-win32-arm64-msvc@2.0.0-rc.0': + resolution: {integrity: sha512-Ilw3Gro8ZBew9yfBXcaET9lLj0g4jehWDMH6j2Wdje1rnvBbQShMaSn3WNMfJypyet5nqM88nGA3YipzmVcIBA==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@tauri-apps/cli-win32-ia32-msvc@2.0.0-beta.23': - resolution: {integrity: sha512-hmICsj/E8tKSVqzjqLm6PuEeU9UjnhsagxK7Zun3lWsnVYNz2DS+AGO+vBn0TEFpVgJxl6kWCHcwerIPRpqdfQ==} + '@tauri-apps/cli-win32-ia32-msvc@2.0.0-rc.0': + resolution: {integrity: sha512-AWzgDlvv0BssWH3aNsDXLRkKbGynWdm5X6DenSQKtZm5dmDBZsNlZRMgkyPb8WSHK/7ARznKs2OdnkuHWuh9ww==} engines: {node: '>= 10'} cpu: [ia32] os: [win32] - '@tauri-apps/cli-win32-x64-msvc@2.0.0-beta.23': - resolution: {integrity: sha512-FKZyIPS8s+vSFxgzMoMUJP5portz3X/bwfh7bthAxr14qKCkM7Z7H59y7hF88gmRkeLvwxNDyDz4+bVi42XMhQ==} + '@tauri-apps/cli-win32-x64-msvc@2.0.0-rc.0': + resolution: {integrity: sha512-zmXDUkBmzZ6lk6jT6AoOAE2w+kmkLX5uf/vaJHHzE6WsrZ6UymH0HTLwbRXhaplvpnzXGVyLuSlv3/BK6Q69aQ==} engines: {node: '>= 10'} cpu: [x64] os: [win32] - '@tauri-apps/cli@2.0.0-beta.23': - resolution: {integrity: sha512-6p15budG+2oZIlq/ZqgX08/v/afHTWug1cdf+r5FXCKnyK8HrLhqoRVDFTP8UmuG6INjl8V/6BhcKN01R8hXiw==} + '@tauri-apps/cli@2.0.0-rc.0': + resolution: {integrity: sha512-X9N/R7e3zeTpU0HgQi2kaNYncMFoSTzXstnUyGOcKrJcCkR4ebbA2nYqhGvIPfglLKHNFRTZwfPNhixx2Ftxxg==} engines: {node: '>= 10'} hasBin: true @@ -4218,8 +4213,6 @@ snapshots: '@humanwhocodes/retry@0.3.0': {} - '@iarna/toml@2.2.5': {} - '@iconify-json/logos@1.1.43': dependencies: '@iconify/types': 2.0.0 @@ -4407,11 +4400,6 @@ snapshots: '@tanstack/solid-query': 5.51.21(solid-js@1.8.19) solid-js: 1.8.19 - '@rspc/tauri@0.2.0(@tauri-apps/api@2.0.0-beta.16)': - dependencies: - '@rspc/client': 0.2.0 - '@tauri-apps/api': 2.0.0-beta.16 - '@rspc/tauri@0.2.0(@tauri-apps/api@2.0.0-rc.0)': dependencies: '@rspc/client': 0.2.0 @@ -4516,56 +4504,54 @@ snapshots: '@tanstack/query-core': 5.51.21 solid-js: 1.8.19 - '@tauri-apps/api@2.0.0-beta.16': {} - '@tauri-apps/api@2.0.0-rc.0': {} - '@tauri-apps/cli-darwin-arm64@2.0.0-beta.23': + '@tauri-apps/cli-darwin-arm64@2.0.0-rc.0': optional: true - '@tauri-apps/cli-darwin-x64@2.0.0-beta.23': + '@tauri-apps/cli-darwin-x64@2.0.0-rc.0': optional: true - '@tauri-apps/cli-linux-arm-gnueabihf@2.0.0-beta.23': + '@tauri-apps/cli-linux-arm-gnueabihf@2.0.0-rc.0': optional: true - '@tauri-apps/cli-linux-arm64-gnu@2.0.0-beta.23': + '@tauri-apps/cli-linux-arm64-gnu@2.0.0-rc.0': optional: true - '@tauri-apps/cli-linux-arm64-musl@2.0.0-beta.23': + '@tauri-apps/cli-linux-arm64-musl@2.0.0-rc.0': optional: true - '@tauri-apps/cli-linux-x64-gnu@2.0.0-beta.23': + '@tauri-apps/cli-linux-x64-gnu@2.0.0-rc.0': optional: true - '@tauri-apps/cli-linux-x64-musl@2.0.0-beta.23': + '@tauri-apps/cli-linux-x64-musl@2.0.0-rc.0': optional: true - '@tauri-apps/cli-win32-arm64-msvc@2.0.0-beta.23': + '@tauri-apps/cli-win32-arm64-msvc@2.0.0-rc.0': optional: true - '@tauri-apps/cli-win32-ia32-msvc@2.0.0-beta.23': + '@tauri-apps/cli-win32-ia32-msvc@2.0.0-rc.0': optional: true - '@tauri-apps/cli-win32-x64-msvc@2.0.0-beta.23': + '@tauri-apps/cli-win32-x64-msvc@2.0.0-rc.0': optional: true - '@tauri-apps/cli@2.0.0-beta.23': + '@tauri-apps/cli@2.0.0-rc.0': optionalDependencies: - '@tauri-apps/cli-darwin-arm64': 2.0.0-beta.23 - '@tauri-apps/cli-darwin-x64': 2.0.0-beta.23 - '@tauri-apps/cli-linux-arm-gnueabihf': 2.0.0-beta.23 - '@tauri-apps/cli-linux-arm64-gnu': 2.0.0-beta.23 - '@tauri-apps/cli-linux-arm64-musl': 2.0.0-beta.23 - '@tauri-apps/cli-linux-x64-gnu': 2.0.0-beta.23 - '@tauri-apps/cli-linux-x64-musl': 2.0.0-beta.23 - '@tauri-apps/cli-win32-arm64-msvc': 2.0.0-beta.23 - '@tauri-apps/cli-win32-ia32-msvc': 2.0.0-beta.23 - '@tauri-apps/cli-win32-x64-msvc': 2.0.0-beta.23 + '@tauri-apps/cli-darwin-arm64': 2.0.0-rc.0 + '@tauri-apps/cli-darwin-x64': 2.0.0-rc.0 + '@tauri-apps/cli-linux-arm-gnueabihf': 2.0.0-rc.0 + '@tauri-apps/cli-linux-arm64-gnu': 2.0.0-rc.0 + '@tauri-apps/cli-linux-arm64-musl': 2.0.0-rc.0 + '@tauri-apps/cli-linux-x64-gnu': 2.0.0-rc.0 + '@tauri-apps/cli-linux-x64-musl': 2.0.0-rc.0 + '@tauri-apps/cli-win32-arm64-msvc': 2.0.0-rc.0 + '@tauri-apps/cli-win32-ia32-msvc': 2.0.0-rc.0 + '@tauri-apps/cli-win32-x64-msvc': 2.0.0-rc.0 '@tauri-apps/plugin-clipboard-manager@https://codeload.github.com/tauri-apps/tauri-plugin-clipboard-manager/tar.gz/20e84cfbdebcd86bb1854846feb0aaff4481fbd0': dependencies: - '@tauri-apps/api': 2.0.0-beta.16 + '@tauri-apps/api': 2.0.0-rc.0 '@tauri-apps/plugin-dialog@https://codeload.github.com/tauri-apps/tauri-plugin-dialog/tar.gz/f83833c5445948c1b2f022e3c530ca48be9f8768': dependencies: @@ -4573,7 +4559,7 @@ snapshots: '@tauri-apps/plugin-shell@https://codeload.github.com/tauri-apps/tauri-plugin-shell/tar.gz/5cc36dadeaad0520111c6f5e32ecdbbae7cb1311': dependencies: - '@tauri-apps/api': 2.0.0-beta.16 + '@tauri-apps/api': 2.0.0-rc.0 '@testing-library/dom@10.4.0': dependencies: