diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 78222842..6d74574a 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -5,12 +5,21 @@ body: - type: markdown attributes: value: Before raising an issue, please search for existing issues to avoid creating duplicates. - - type: textarea + - type: input attributes: label: Original reporter/ticket ID description: If you are rewording a ticket, put the original reporter(s) and ticket ID(s). If not, leave this blank. validations: required: false + - type: dropdown + attributes: + label: Project + description: Select the project this issue is related to. + multiple: true + options: + - Core + - OneClient + - OneLauncher - type: textarea attributes: label: Describe the bug diff --git a/.github/ISSUE_TEMPLATE/enhancement.yml b/.github/ISSUE_TEMPLATE/enhancement.yml index 374d53bb..0b15e1a2 100644 --- a/.github/ISSUE_TEMPLATE/enhancement.yml +++ b/.github/ISSUE_TEMPLATE/enhancement.yml @@ -5,12 +5,23 @@ body: - type: markdown attributes: value: Before raising an issue, please search for existing issues and [Discord](https://polyfrost.org/discord) suggestions to avoid creating duplicates. - - type: textarea + - type: input attributes: label: Original reporter/ticket ID description: If you are rewording a ticket, put the original reporter(s) and ticket ID(s). If not, leave this blank. validations: required: false + - type: dropdown + attributes: + label: Project + description: Select the project this issue is related to. + multiple: true + default: General + options: + - General + - Core + - OneClient + - OneLauncher - type: textarea attributes: label: Is your suggested enhancement related to a problem? Please describe, or link another Issue. diff --git a/.github/media/RepoBanner.png b/.github/media/RepoBanner.png new file mode 100644 index 00000000..db9ec1e4 Binary files /dev/null and b/.github/media/RepoBanner.png differ diff --git a/.github/workflows/oneclient_release.yml b/.github/workflows/oneclient_release.yml new file mode 100644 index 00000000..15f36428 --- /dev/null +++ b/.github/workflows/oneclient_release.yml @@ -0,0 +1,47 @@ +name: OneClient Release Build + +on: + workflow_dispatch: + +jobs: + publish-tauri: + permissions: + contents: write + strategy: + fail-fast: false + matrix: + include: + - platform: macos-latest # ARM + args: --target aarch64-apple-darwin + - platform: macos-latest # Intel + args: --target x86_64-apple-darwin + - platform: ubuntu-22.04 + args: '' + - platform: windows-latest + args: '' + + runs-on: ${{ matrix.platform }} + steps: + - uses: actions/checkout@v4 + + - name: Setup Rust + uses: ./.github/actions/setup-rust + with: + # Those targets are only used on macos runners so it's in an `if` to slightly speed up windows and linux builds. + target: ${{ matrix.platform == 'macos-latest' && 'aarch64-apple-darwin,x86_64-apple-darwin' || '' }} + save-cache: true + restore-cache: true + + - name: Setup Packages + uses: ./.github/actions/setup-packages + + - uses: tauri-apps/tauri-action@v0 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tagName: oneclient-__VERSION__ + releaseName: OneClient __VERSION__ + releaseDraft: true + prerelease: ${{ startsWith(github.ref, 'refs/tags/v') && contains(github.ref, '-alpha') || false }} + tauriScript: pnpm oneclient:desktop + args: ${{ matrix.args }} diff --git a/.github/workflows/release.yml b/.github/workflows/onelauncher_release.yml similarity index 94% rename from .github/workflows/release.yml rename to .github/workflows/onelauncher_release.yml index ab90fbc8..0b2e4a14 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/onelauncher_release.yml @@ -1,4 +1,4 @@ -name: Release Build +name: OneLauncher Release Build on: workflow_dispatch: @@ -43,5 +43,5 @@ jobs: releaseName: OneLauncher __VERSION__ releaseDraft: true prerelease: ${{ startsWith(github.ref, 'refs/tags/v') && contains(github.ref, '-alpha') || false }} - tauriScript: pnpm desktop + tauriScript: pnpm onelauncher:desktop args: ${{ matrix.args }} diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 20cdd5ec..bd082fa3 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -3,8 +3,7 @@ "tauri-apps.tauri-vscode", // Provides Tauri framework support. "rust-lang.rust-analyzer", // Provides Rust language support. "vadimcn.vscode-lldb", // Provides Rust debugging support. - "oscarbeaumont.rspc-vscode", // RSPC is a framework for Routers. - "antfu.unocss", // Provides UnoCSS intellisense. + "bradlc.vscode-tailwindcss", // Provides UnoCSS intellisense. "EditorConfig.EditorConfig", // Maintains consistent coding styles. "dbaeumer.vscode-eslint" // Code formatting using ESLint. ] diff --git a/.vscode/settings.json b/.vscode/settings.json index 1c108fed..d76bd693 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -27,9 +27,6 @@ "rust-analyzer.diagnostics.disabled": [ "macro-error" // TODO: Remove this once taurpc upgrades to latest specta ], - "rust-analyzer.procMacro.ignored": { - "tauri-specta": ["command"] - }, "rust-analyzer.check.command": "check", "rust-analyzer.diagnostics.experimental.enable": false, "rust-analyzer.linkedProjects": [], diff --git a/ATTRIBUTION.md b/ATTRIBUTION.md index b1201280..1c162ee9 100644 --- a/ATTRIBUTION.md +++ b/ATTRIBUTION.md @@ -1,6 +1,6 @@ # Attribution -The source code of this repository is licensed under the GNU General Public License, Version 3 only, which is provided in the file [LICENSE](./LICENSE), with a header provided below. [Certain files in our library wrappers](./core/wrapper/) may be under a different license or [require credit](#additional-libraries), with their specific headers outlined in the below non-exhaustive list. +The source code of this repository is licensed under the GNU General Public License, Version 3 only, which is provided in the file [LICENSE](./LICENSE), with a header provided below. Certain files in our library wrappers may be under a different license or [require credit](#additional-libraries), with their specific headers outlined in the below non-exhaustive list. ## OneLauncher @@ -16,6 +16,20 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public You should have received a copy of the GNU General Public License along with this program. If not, see . ``` +## OneClient + +```txt +OneClient - A Minecraft Launcher +Copyright (C) 2023~CURRENT Polyfrost and Contributors + +This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. + +This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with this program. If not, see . +``` + ## Polyfrost branding Any files depicting [Polyfrost branding](https://polyfrost.org/legal/branding), including the Polyfrost logo, any landing and background images, the OneConfig logo, the OneLauncher logo, and variations thereof, are licensed under the following: @@ -31,80 +45,25 @@ This includes, but may not be limited to, the following files: ## Additional Libraries -The following are libraries, projects, and codebases which we (Polyfrost and Contributors) copied or modified, with additional attribution inline (THIS IS A NON-EXHAUSTIVE LIST, IF WE ARE MISSING A LICENSE, PLEASE CHECK OUR [attributions page](https://polyfrost.org/attributions), OR LEAVE A TICKET IN [our Discord server](https://polyfrost.org/discord)): - -## [Prism Launcher] - -```txt -Prism Launcher - Minecraft Launcher -Copyright (C) 2022-2024 Prism Launcher Contributors - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, version 3. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . - -This file incorporates work covered by the following copyright and -permission notice: - - Copyright 2013-2021 MultiMC Contributors - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -``` - -## [Modrinth App] - -```txt -Modrinth App -Copyright (C) 2022-2023 Modrinth - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, version 3. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -``` +The following are libraries, projects, and codebases which we (Polyfrost and Contributors) copied or modified, with additional attribution inline (THIS IS A NON-EXHAUSTIVE LIST, IF WE ARE MISSING A LICENSE, PLEASE LEAVE A TICKET IN [our Discord server](https://polyfrost.org/discord)): ## [Gamemode] ```txt -Copyright (c) 2017-2022, Feral Interactive +Copyright (c) 2017-2025, Feral Interactive and the GameMode contributors All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: -* Redistributions of source code must retain the above copyright notice, -this list of conditions and the following disclaimer. -* Redistributions in binary form must reproduce the above copyright -notice, this list of conditions and the following disclaimer in the -documentation and/or other materials provided with the distribution. -* Neither the name of Feral Interactive nor the names of its contributors -may be used to endorse or promote products derived from this software -without specific prior written permission. + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of Feral Interactive nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE @@ -145,7 +104,5 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ``` -[Prism Launcher]: https://github.com/PrismLauncher/PrismLauncher -[Modrinth App]: https://github.com/modrinth/code [Gamemode]: https://github.com/FeralInteractive/gamemode [Rust Gamemode Internal Linking]: https://github.com/SophieSilver/linking-gamemode diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0482336f..d2d4c777 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -47,17 +47,14 @@ To make changes locally, follow these steps: 4. Install dependencies: `pnpm i` 5. Prepare your cargo installation: `pnpm prep` -To quickly run only the desktop app after `prep`, you can use: +### Running +The most common scripts you will use are: -- `pnpm desktop dev` +- `pnpm onelauncher:desktop dev` - Runs the **OneLauncher** desktop application with watch mode enabled and starts up the frontend's vite dev server. - If necessary, the webview devtools can be opened by pressing `Ctrl + Shift + I` (Linux and Windows) or `Command + Option + I` (macOS) in the desktop app. +- `pnpm oneclient:desktop dev` - Runs the **OneClient** desktop application with watch mode enabled and starts up the frontend's vite dev server. -If you encounter any issues, ensure that you are using the following versions (or later) of Rust, Node and Pnpm: - -- `rustc` version: **1.80** -- `node` version: **20.15** -- `pnpm` version: **9.6.0** +If necessary, the webview devtools can be opened by pressing `Ctrl + Shift + I` (Linux and Windows) or `Command + Option + I` (macOS) in the desktop app. After cleaning out your build artifacts using `pnpm clean`, `git clean`, or `cargo clean`, it is necessary to re-run the `setup` script. diff --git a/README.md b/README.md index e90e94af..99041200 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,45 @@ -# OneLauncher +
-Rust-based Minecraft launcher utilizing Tauri, SolidJS, and Tailwind +Repository Banner -## Project Structure +# ` OneLauncher ` + ` OneClient ` +Here is the monorepo containing the code for OneLauncher and OneClient. -* [`apps/desktop`](./apps/desktop/) - Rust-based Minecraft launcher utilizing Tauri, SolidJS, and Tailwind. -* [`crates/core`](./crates/core/) - The core for our Minecraft launcher (platform agnostic), along with Rust-based utilities for other Polyfrost projects and interactions. -* [`testing`](./crates/testing/) - Testing playground for our Rust core, independant of Tauri. -* [`distribution`](./packages/distribution/) - Distribution utilties and meta files for the [`apps/desktop`](./apps/desktop/) app. +
+ +## Technologies Used +- [**Tauri**](https://tauri.app/) +- [**Sea ORM**](https://www.sea-ql.org/SeaORM/) +- [**SQLite**](https://www.sqlite.org/) +- [**React**](https://react.dev/) +- [**Tailwind CSS**](https://tailwindcss.com/) +- [**Tanstack Query**](https://tanstack.com/query/latest) +- [**Tanstack Router**](https://tanstack.com/router/latest) + +## Contributing +We welcome contributions! Please read our [contributing guidelines](CONTRIBUTING.md) before getting started. + +### Requirements + +If you encounter any issues, ensure that you are using the following versions (or later) of Rust, Node and Pnpm: + +- `rustc` version: **1.89** +- `node` version: **22.15** +- `pnpm` version: **10.13** + +### Project Structure +- **`packages/`** - Shared libraries and utilities. + - [**`core/`**](./packages/core/) - Launcher Core. This is the library that contains the entire launcher logic. + - [**`entity/`**](./packages/entity/) - Contains entity definitions used in the launcher's database. + - [**`macro/`**](./packages/macro/) - Contains macro definitions to simplify some code. + - [**`scripts/`**](./packages/scripts/) - General scripts for CI/CD or development environments. + - [**`web_common/`**](./packages/web_common/) - Contains common web code used by both OneLauncher and OneClient. +- **`apps/`** + - [**`onelauncher/`**](./apps/onelauncher/) + - **`desktop/`** - Tauri desktop application. + - **`frontend/`** - React SPA frontend. + - **`distribution/`** - Files used for release builds. + - [**`oneclient/`**](./apps/oneclient/) + - **`desktop/`** - Tauri desktop application. + - **`frontend/`** - React SPA frontend. + - **`distribution/`** - Files used for release builds. diff --git a/changelog.config.ts b/changelog.config.ts deleted file mode 100644 index c3303233..00000000 --- a/changelog.config.ts +++ /dev/null @@ -1,17 +0,0 @@ -const config = { - types: { - chore: { title: '🔨 Chores' }, - feature: { title: '✨ Features' }, - fix: { title: '🐞 Bug Fixes' }, - perf: { title: '🏎 Performance' }, - refactor: { title: '♻️ Refactors' }, - test: { title: '✅ Tests' }, - style: { title: '🎨 Stylistic' }, - doc: { title: '📝 Docs' }, - deps: { title: '📦 Dependencies' }, - deploy: { title: '🚀 Deployments' }, - wip: { title: '🚧 Experiments' }, - }, -}; - -export default config; diff --git a/test.rs b/test.rs deleted file mode 100644 index e69de29b..00000000 diff --git a/tsconfig.base.json b/tsconfig.base.json index 231ebc56..3491112c 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -2,7 +2,7 @@ "compilerOptions": { "target": "ESNext", "jsx": "preserve", - "jsxImportSource": "solid-js", + "jsxImportSource": "react", "lib": ["ESNext", "DOM", "DOM.Iterable"], "useDefineForClassFields": true, "module": "ESNext", diff --git a/uno.config.ts b/uno.config.ts deleted file mode 100644 index f6976c0d..00000000 --- a/uno.config.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from './apps/onelauncher/old_frontend/uno.config'; diff --git a/vitest.workspace.json b/vitest.workspace.json deleted file mode 100644 index 143f4f59..00000000 --- a/vitest.workspace.json +++ /dev/null @@ -1,4 +0,0 @@ -[ - "packages/client/vitest.config.ts", - "apps/frontend/vitest.config.ts" -]