Compare commits

..

590 commits

Author SHA1 Message Date
c9282706f0 Update README.md 2026-10-13 06:27:43 +00:00
2eff59c883 chore(config): track macos apple-darwin linker configuration 2026-10-13 11:46:49 +05:30
f3355bd180 docs: add download guide image to README 2026-10-11 12:59:33 +05:30
d28fd9ce46 docs: add download guide image for releases 2026-10-11 12:58:15 +05:30
e99da40629 docs: establish cracked release suffix progression and build rules in AGENTS.md 2026-10-11 09:23:56 +05:30
a8826b83d3 fix(skins): fix skin lookup across directories, reliable TCP flush, modern userProperties, and optimize compile time 2026-10-11 09:13:55 +05:30
e06775aae5 feat: update base to official upstream 2.8.0 with all cracked features intact (2.8.0-c1) 2026-10-10 20:21:19 +05:30
e4555c4b8e chore(build): optimize release profile with ThinLTO and remove unused import 2026-10-10 20:20:46 +05:30
0a29f0ab47 feat(ui): port 3D skins tab, offline onboarding and settings, and Forgejo auto-updater to 2.8.0 2026-10-10 18:49:26 +05:30
8d7939c041 feat(skins): integrate proper isolated offline skin system via Authlib-Injector 2026-10-10 18:29:12 +05:30
1e66c9216c feat(auth): enable offline mode accounts and launch without Microsoft account 2026-10-10 18:23:10 +05:30
b979feff0c chore: configure 2.8.0-c1 metadata, packaging, and release workflows 2026-10-10 18:19:17 +05:30
8652be8b87 feat(updater): switch auto-updater and documentation to Forgejo releases API 2026-10-10 18:11:33 +05:30
6793d6f68f chore: ignore dist directory 2026-10-10 15:22:21 +05:30
40838abf2d ci: add native forgejo release workflow with linux packaging and direct asset publishing 2026-10-10 14:06:05 +05:30
LynithDev
1d6ec59825 chore: pin freya to Polyfrost fork on 0.5.0-beta.10 without libxdo 2026-10-10 02:00:17 +02:00
github-actions[bot]
2ae679d220 chore: release 2.8.0 2026-10-09 23:26:24 +00:00
Maciek
56d73e3ab1
feat: multiple minecraft instances (#955)
* feat: mutliple minecraft instances (only dedicated clusters)

* changeset
2026-10-10 01:24:25 +02:00
LynithDev
011c4416b1 fix: open folder freeze issue 2026-10-10 01:16:07 +02:00
Maciek
76e4cac6f4
fix: fixed downloading notification alerting about new notification on every byte read (#952) 2026-10-10 01:10:05 +02:00
Maciek
6ee7bdb443
feat: added status bar for auth states (#954) 2026-10-10 01:02:39 +02:00
Maciek
97d4477c69
fix: added scrollbar gutter to the notifications overlay (#947) 2026-10-10 01:01:51 +02:00
LynithDev
51cb12c964
fix: bundled package regression causing it to disable and not update (#967) 2026-10-10 01:01:30 +02:00
LynithDev
a976a66c8b fix: nightly executable uploads 2026-10-10 01:00:46 +02:00
LynithDev
2f5a64b97d
Fix/linux skia crashes (#966)
* fix: run hooks before early returns in cluster and gallery views

* chore: upgrade freya to 0.5.0-beta.9

* chore: pin freya to 0.5.0-beta.10 branch for skia 0.103.2
2026-10-10 00:58:42 +02:00
Maciek
c6361c7266
fix: fixed shield.io badges not rendering properly (#953)
* fix: fixed shield.io badges not rendering properly

* changeset
2026-10-10 00:55:21 +02:00
Maciek
61d24b688e
fix: added better errors for mclogs (#963)
* fix: added better errors for mclogs

* chore: added a warning when the log is shortened
2026-10-10 00:54:49 +02:00
Maciek
d21c0dc22b
feat: added filter for loaders in browser view (#946)
* feat: added filter for loaders in browser view

* changeset
2026-10-10 00:54:45 +02:00
2b1bfd1485 docs: add offline usage warning embed to README
Some checks are pending
OneClient Nightly (Unsigned) / build (aarch64, app,dmg, darwin, macos-latest, aarch64-apple-darwin) (push) Waiting to run
OneClient Nightly (Unsigned) / build (x86_64, app,dmg, 10.14, darwin, macos-latest, x86_64-apple-darwin) (push) Waiting to run
OneClient Nightly (Unsigned) / build (x86_64, deb,appimage, linux, ubuntu-22.04, ) (push) Waiting to run
OneClient Nightly (Unsigned) / build (x86_64, nsis, windows, windows-latest, ) (push) Waiting to run
2026-10-09 22:23:58 +05:30
Julian Chang
5a8728ef04
Retroactive fix for 1ab294f2 2026-10-09 00:01:40 -04:00
Julian Chang
1b633adcf2
fix bundle newer mods being overwritten by local mods 2026-10-08 03:11:19 -04:00
Julian Chang
66b4ab4e64
update disabled mods still 2026-10-08 00:27:31 -04:00
github-actions[bot]
0f21171fe2 chore: release 2.7.0 2026-10-05 21:22:43 +00:00
Julian Chang
d073e10a3b
Add custom game args to settings (#905) 2026-10-05 23:21:05 +02:00
LynithDev
e7ddd85960
fix: url opening, dgpu dropdown instead of switcher, invisible icons (#941) 2026-10-05 23:20:32 +02:00
Julian Chang
abf708fdb4
mods folder sync (#937) 2026-10-05 23:20:04 +02:00
Julian Chang
1ab294f293
fix opt-in bundles not being asked for new mc versions (#939) 2026-10-05 23:19:49 +02:00
LynithDev
7683651ad4 chore: make nightly release action upload portable executables 2026-10-05 22:10:24 +02:00
LynithDev
a9fab65a0b
chore: add tooltip on settings system info (#926)
* chore: add tooltip on settings system info

* chore: add changeset
2026-10-05 22:06:40 +02:00
LynithDev
c765a3c2d4
feat: github packages can now be opened in browser (#943) 2026-10-05 21:03:29 +02:00
LynithDev
0621da9db0 chore: update description for launcher animation setting 2026-10-05 20:58:05 +02:00
LynithDev
97852aea41
fix: mclogs notification showing repeatedly (#942) 2026-10-05 20:42:47 +02:00
Julian Chang
7a6a7cbc0b
Merge branch 'main' of https://github.com/Polyfrost/OneLauncher 2026-10-03 15:14:39 -04:00
Julian Chang
7c304a2d3a
fix: match os argument rules on apple silicon for old versions 2026-10-03 15:14:35 -04:00
LynithDev
b2384afb4e
feat: log censoring (#925) 2026-10-03 16:00:44 +02:00
LynithDev
c43272683b
feat: add code block and update the open link dialogs with the code block (#924) 2026-10-03 15:17:52 +02:00
LynithDev
cfcf7a7669
chore: new changelog generator (#855)
* chore: new changelog generator

* ci: require a change file on PRs
2026-10-03 00:23:41 +02:00
github-actions[bot]
a2a3e5b7b1 chore: bump to 2.6.1 2026-10-02 14:17:51 +00:00
Maciek
a3d90cc2ce
Merge pull request #908 from Polyfrost/fix/aur-distribution
aur distribution fix
2026-10-02 16:15:17 +02:00
rozwader
ee7c84901f stray commas 2026-10-02 16:14:37 +02:00
rozwader
ad6ca92519 fix 2026-10-02 15:38:05 +02:00
Julian Chang
fb80e6eb60
Merge branch 'main' of https://github.com/Polyfrost/OneLauncher 2026-10-02 04:42:04 -04:00
Julian Chang
a8ba800dba
Reapply "chore: bump to 2.6.0"
This reverts commit 17a99b671e.
2026-10-02 04:41:58 -04:00
Maciek
ed6b014aac
chore: deleted icons from stats views (#906) 2026-10-02 04:23:02 -04:00
Julian Chang
17a99b671e
Revert "chore: bump to 2.6.0"
This reverts commit e74eb60ba2.
2026-10-02 04:21:05 -04:00
Julian Chang
e2db158653
fix: refresh loader version info and metadata manifests (#904) 2026-10-02 03:09:17 -04:00
Julian Chang
80e7cf0e59
Merge branch 'main' of https://github.com/Polyfrost/OneLauncher 2026-10-02 01:43:04 -04:00
Julian Chang
538a0da24d
prompt for different mc versions when installing modpacks 2026-10-02 01:38:42 -04:00
Julian Chang
03c4412d15
bundle opt out per content type (#810)
* exclude opted out bundles from package list

* bundle opt out per content type

* list only the content types a bundle is still opted into

* count inferred bundle installs as opted in

* remove comments from merge

* key bundle opt-out by external id so outdated GitHub installs still count

* fix: keep bundle type opt-out across catalog changes

* fix: keep switched-on bundle files from being re-suppressed

* fix: share bundle liveness and keep package list read-only
2026-10-02 00:48:27 -04:00
Julian Chang
7402fb6e78
exclude opted out bundles from package list (#879)
* exclude opted out bundles from package list

* count inferred bundle installs as opted in

* let opted-in bundles own shared rows
2026-10-02 00:07:44 -04:00
github-actions[bot]
e74eb60ba2 chore: bump to 2.6.0 2026-10-01 22:04:41 +00:00
LynithDev
6f415d65e0
fix: graphics drivers issues on linux in appimage (#903) 2026-10-02 00:03:50 +02:00
LynithDev
7bc9064469
fix: libxdo crash in deb packages (#902) 2026-10-01 22:45:37 +02:00
LynithDev
30f0e1843e
chore: add JVM argument to improve vector operations on Java 21+ (#901) 2026-10-01 22:42:25 +02:00
Maciek
959458abde
chore: added enabling disabled bundled mods from browser (#900) 2026-10-01 22:12:53 +02:00
Maciek
76d929b82a
feat: added warning on clicking cosmetics button (#899) 2026-10-01 11:41:55 -04:00
Julian Chang
efbde53326
ui: improve migration ui 2026-10-01 03:46:10 -04:00
Julian Chang
190723a4f8
feat: optionally copy configs into dedicated-folder targets on migration 2026-10-01 03:46:09 -04:00
Julian Chang
0e98be3d5a
feat: manual migration in both directions, only when there's something to copy 2026-10-01 03:45:55 -04:00
Julian Chang
0b78f16e9a
improve more design elements 2026-10-01 02:01:30 -04:00
Julian Chang
b86080ac62
improve design in some areas 2026-10-01 01:35:20 -04:00
Julian Chang
67cfc4eb83
fix: key cached version info by loader format version
Bump interfrost to 1.5.0 and pass the cluster's loader to download_version_info so a format bump doesn't reuse stale version JSON.
2026-10-01 01:34:40 -04:00
Julian Chang
fc3046d60e
feat: list/grid layout toggle on clusters page 2026-10-01 00:52:30 -04:00
Julian Chang
03c00b4199
feat: group user-created OneClient clusters by release line 2026-10-01 00:52:30 -04:00
Julian Chang
51608f7d94
feat: don't re-provision clusters the user deleted 2026-10-01 00:52:30 -04:00
Julian Chang
13e52ab3ec
feat: use gallery images for package card banners 2026-10-01 00:52:30 -04:00
Julian Chang
cd122e877e
fix: create config dir in file-lock override test 2026-10-01 00:52:30 -04:00
Julian Chang
b2a84490ed
split 1.21.x into minor drops 2026-09-30 21:12:02 -04:00
Julian Chang
4995276c51
pre-warm cluster art 2026-09-30 21:01:26 -04:00
LynithDev
50bf2c07ee fix: use correct OneClient logo 2026-09-30 22:38:13 +02:00
LynithDev
3ef452d451
fix: swapped home screen cluster labels to show the cluster name in big text (#898) 2026-09-30 22:02:33 +02:00
LynithDev
65a9c670cc
feat: package selection (#897) 2026-09-30 21:45:46 +02:00
LynithDev
0512727c22
fix: clear all notifications shouldn't be clearing progress notis (#896) 2026-09-30 21:20:07 +02:00
LynithDev
9b6f872a8d
fix: libappindicator crashing and bundling on linux (#893) 2026-09-30 20:44:10 +02:00
Maciek
06fa7739b3
feat: working modpacks from modrinth and curseforge as well as manually imported; couple ui fixes (#894) 2026-09-30 20:44:04 +02:00
LynithDev
d630c27a88
chore: forcefully migrate old launcher path to new path (#895) 2026-09-30 20:43:59 +02:00
Julian Chang
e1be4c8bcc
wipe off incompatible mc version check entirely 2026-09-30 06:12:11 -04:00
LynithDev
c9c4c9536b
feat: better versions UI (#890) 2026-09-29 20:58:57 +02:00
LynithDev
b2a62f8e17
feat: list required dependencies in the browser versions page (#889) 2026-09-29 20:39:37 +02:00
LynithDev
ef5847f417
feat: improved stats screen (#888) 2026-09-29 20:31:42 +02:00
Maciek
55125b551f
fix: fixed worlds and datapacks tabs jumping in (#887) 2026-09-29 20:27:58 +02:00
Maciek
0ab544f265
feat: custom cluster instances (#859)
* feat: added adding new instances of a cluster with 'start from scratch' option enabling user to create a vanilla/modded cluster; fixed couple pre-existing bugs that wouldn't let other loaders boot up

* feat: fully implemented cluster creation modal design

* chore: refactoring

* feat: expanded the tags section on customization step; found that fabric doesnt work with 1.8.9

* feat: added gallery covers handling for new cluster instances

* feat: added 'redirecting' from fabric to orinthe on versions pre-1.14

* feat: added java-version-override

* feat: added loader types migrations (right now they dont migrate mods because there are no bundles)

* chore: wider loader dropdown for multiloader cluster (if it will be used in the future)

* chore: fixed more issues with isolated and shared dir, with migrations and instances naming

* chore: refactor; taken the loader version dropdown from version picker view back to loader selector

* chore: deleted Quilt from UI

---------

Co-authored-by: LynithDev <61880709+LynithDev@users.noreply.github.com>
2026-09-29 19:08:21 +02:00
LynithDev
bdb9780794
fix: move (almost) all IO off the UI thread (#886) 2026-09-29 19:03:25 +02:00
LynithDev
1574d1afb1 fix: open crate on windows not opening urls properly 2026-09-29 15:34:14 +02:00
LynithDev
95eba5503f chore: update dependencies and optimise archive operations 2026-09-29 15:04:51 +02:00
LynithDev
00237d5281 chore: update open crate to fix issue on windows 2026-09-29 13:59:01 +02:00
Maciek
495dbf05dc
feat: polyplus mark and removal warning (#877)
* feat: polyplus mark and removal warning (some issues with merging)

* chore: deleted the blue background from the polyplus mod

* feat: added warning for removing bundle mods; fixed the new/updated badges on mods cards
2026-09-29 12:38:05 +02:00
Maciek
45da20fac2
feat: release migration (#851)
* feat: added migration mechanism for versions 26.3 and above

* feat: added checking for mods that the migrating target already has

* feat: added scheduled migrations for up to 30 days

* feat: added button in cluster settings for manual migratting; added migratting disabled mods with status saving

* feat: added checking for show_initial_migration flag in metadata.json

* feat: added fabric -> orinthe migration (for 1.8.9)

* chore: force open from debug page

* chore: change some UI elements

* fix: don't migrate packages whose dependency failed to install

* fix: keep checking the release migration waitlist past a broken cluster

* fix: make Migrate on a debug fake plan a no-op

* perf: install the version the migration plan already fetched

* chore: fix the clippy warnings the release migration added

* refactor: open every release migration prompt through one helper

* chore(lint): cargo fmt the release migration code

* fix: check the release migration waitlist queries at compile time

---------

Co-authored-by: LynithDev <61880709+LynithDev@users.noreply.github.com>
2026-09-28 21:06:30 +02:00
Maciek
abb41dcc52
feat: worlds and datapacks views (#870)
* feat: added worlds and datapacks tab

* feat: added datapacks in browser; fixed datapacks view loading too long

* feat: added icons to datapacks

* fix: scope world query invalidation to the world that changed

* fix: keep the selected data pack world in one place and guard deletes

* chore: share one dialog shell between the world prompt and delete confirm

* fix: stop watching every subfolder of saves

---------

Co-authored-by: LynithDev <61880709+LynithDev@users.noreply.github.com>
2026-09-28 21:05:52 +02:00
LynithDev
48a25f0c2c
fix: rotate the advanced section chevron when it opens (#885) 2026-09-28 20:53:41 +02:00
Maciek
7f1a3176cf
feat: added sections for advanced mods (#876)
* feat: added sections for advanced mods

* fix: treat a null bundle file type as normal

* chore: drop ScrollArea::lazy_grid

* chore: pass one header height to lazy_sections

* chore: name BundleFileType::Normal in test fixtures

* feat: don't offer advanced bundle mods as optional mods

---------

Co-authored-by: LynithDev <61880709+LynithDev@users.noreply.github.com>
2026-09-28 20:31:18 +02:00
Maciek
f94ca969b0
feat: bad mods flagging (#882)
* feat: first version of flagging mods thru datastorage

* feat: added fallbacks, version-specific flag and project-specific flag

* chore: downsized the amount of requests sent when looking up for alternatives

* feat: added explanations for flagging mods

* fix: prompt for flagged dependencies instead of silently skipping them

* chore: size the flagged popup with max_height instead of measuring it

* chore: drop is_flagged and the explanation size cap

* feat: refresh the bad mods list with the pre-launch checks

---------

Co-authored-by: LynithDev <61880709+LynithDev@users.noreply.github.com>
2026-09-28 17:40:00 +02:00
Maciek
695406145f
chore: deleted the download process from onboarding (#865)
* chore: deleted the download process from onboarding

* fix: gate onboarding Finish on loaded bundles and correct failure copy

* chore: drop unused install_cluster_bundles re-export from oneclient_core

* chore: drop the unread predownload flag from the versions manifest

---------

Co-authored-by: LynithDev <61880709+LynithDev@users.noreply.github.com>
2026-09-28 17:33:01 +02:00
Maciek
b3b436bc3e
feat: added support for github hosted bundle mods (#883)
* feat: added support for github hosted bundle mods

* fix: keep external bundle mods when their manifest entry gains an id

* fix: match a pending external bundle update to its installed jar

* chore: parse the bundle file host with url instead of by hand

* fix: namespace external bundle file ids under ext:

* chore: rename the Browser tab to Online and list unbundled GitHub mods there

---------

Co-authored-by: LynithDev <61880709+LynithDev@users.noreply.github.com>
2026-09-28 17:30:50 +02:00
Maciek
abc452f294
feat: added deleting browser and local mods (#853)
* feat: added deleting browser and local mods by context menu and on list view by trashcan icon

* fix: only confirm shared deletes that reach other clusters

* fix: confirm shared removals from the browser package page too

* fix: keep "View in folder" alive after the context menu closes

---------

Co-authored-by: LynithDev <61880709+LynithDev@users.noreply.github.com>
2026-09-28 17:30:10 +02:00
Maciek
ac66752b99
feat: added reseting back to the default options in settings tabs (#818)
* feat: added reseting back to the default options in settings tabs

* chore: removed the reset button for whole page and changed it to a reset button for every setting row

* chore: removed old reset options from search index

* chore: remove unused use_game_active and GameState::any_active

* fix: reset global memory to the Default option instead of a fixed size

* feat: add reset buttons to the launcher tab's system settings

* chore: fold with_reset into resettable_all and drop unneeded dispatch clones

* chore: rustfmt the import lists touched by the merge

* fix: treat a missing discrete GPU setting as on

* fix: read the discrete GPU reset default with the same true fallback

---------

Co-authored-by: LynithDev <61880709+LynithDev@users.noreply.github.com>
2026-09-28 17:29:05 +02:00
Maciek
35dcd584d0
chore: changed the UX for optional mods modal (#878)
* chore: changed the UX for optional mods modal

* refactor: fold cancel_optional_mods into close_optional_mods

* fix: forget optional mod picks once the modal closes

* chore: rustfmt the optional mods import

* chore: say what the optional mods buttons actually do

---------

Co-authored-by: LynithDev <61880709+LynithDev@users.noreply.github.com>
2026-09-28 17:24:10 +02:00
LynithDev
8e66212596
fix: treat a missing discrete GPU setting as on (#884) 2026-09-28 17:22:13 +02:00
Luna
7ca7ac04cf
fix: preserve executable bits when extracting Java runtimes (#873)
Co-authored-by: LynithDev <61880709+LynithDev@users.noreply.github.com>
2026-09-28 17:15:41 +02:00
Julian Chang
d632c47320
remove unnecessary tests (#881) 2026-09-28 17:13:41 +02:00
Luna
5f7b624d82
fix: it's -> its for possessive (#872) 2026-09-28 17:13:27 +02:00
Julian Chang
e675b99300
fix corrupted file detection 2026-09-24 23:24:36 -04:00
LynithDev
520e6c1ef1
chore: redesigned browser grid (#869) 2026-09-23 23:49:57 +02:00
LynithDev
3a5f06e8ac
chore: redesigned package grid (#867) 2026-09-23 13:39:11 +02:00
Maciek
36a925da06
fix: homepage cover images are now in much better quality without bigger memory use (#862)
* fix: fixed background covers rendering poorly on bigger resolutions

* fix: fixed onboarding cached images stacking from ~80MB to again ~20MB (like it was before)
2026-09-23 13:31:29 +02:00
LynithDev
2f7476ba6e
chore: redesigned the navbar links to be pills (#866) 2026-09-23 13:27:39 +02:00
a83bda9b53 chore(release): bump version to 2.5.1-c3
Some checks failed
Release Multiplatform Binaries / build (deb,appimage, linux-x86_64, ubuntu-22.04, x86_64-unknown-linux-gnu) (push) Waiting to run
Release Multiplatform Binaries / build (dmg,app, macos-arm64, macos-14, aarch64-apple-darwin) (push) Waiting to run
Release Multiplatform Binaries / build (dmg,app, macos-x86_64, macos-14, x86_64-apple-darwin) (push) Waiting to run
Release Multiplatform Binaries / build (nsis, windows-x86_64, windows-latest, x86_64-pc-windows-msvc) (push) Waiting to run
Release Multiplatform Binaries / create-release (push) Blocked by required conditions
Publish AUR Packages / resolve (release) Waiting to run
Publish AUR Packages / publish-source (release) Blocked by required conditions
Publish AUR Packages / publish-bin (release) Blocked by required conditions
Publish COPR Package / resolve (release) Failing after 0s
Publish COPR Package / publish-bin (release) Has been skipped
2026-09-23 07:12:02 +05:30
70e34d1b66 fix(launch): gate 1.21.11 offlineskins mod to matching minecraft version 2026-09-23 07:08:52 +05:30
7bb797eb16 feat(skins): integrate client-side offline skin mod and isolate player textures 2026-09-23 06:37:28 +05:30
017c9a85f9 fix(skins): fix authlib-injector routing, add RSA profile signing, and populate userProperties 2026-09-22 22:20:13 +05:30
LynithDev
80e7d4d4f8
chore: update freya and enable debug overlay in release (#856)
* chore: bump freya to 0.5.0-rc.6

* feat: add freya debug overlay plugin

* chore: bump to rc.7
2026-09-22 16:13:05 +02:00
700b11a3ce feat(skins): integrate proper isolated offline skin system via Authlib-Injector and eliminate multiplayer skin cloning (2.5.1-c2)
Some checks are pending
Release Multiplatform Binaries / build (deb,appimage, linux-x86_64, ubuntu-22.04, x86_64-unknown-linux-gnu) (push) Waiting to run
Release Multiplatform Binaries / build (dmg,app, macos-arm64, macos-14, aarch64-apple-darwin) (push) Waiting to run
Release Multiplatform Binaries / build (dmg,app, macos-x86_64, macos-14, x86_64-apple-darwin) (push) Waiting to run
Release Multiplatform Binaries / build (nsis, windows-x86_64, windows-latest, x86_64-pc-windows-msvc) (push) Waiting to run
Release Multiplatform Binaries / create-release (push) Blocked by required conditions
2026-09-21 19:49:57 +05:30
Julian Chang
ac52d55cf2
rename Fabric (Ornithe) -> Fabric 2026-09-19 14:09:38 -04:00
LynithDev
850c695f91
feat: system tray and process state controls (#687) 2026-09-19 01:19:34 +02:00
LynithDev
a8cc4e8b7f
feat: better text inputs (#854) 2026-09-19 01:18:49 +02:00
sakuyma
45a970c38a
Small QoL fixes: Java refresh, clipboard toasts, custom image endpoints (#852)
* fix(java): add refresh button for stale runtimes

* fix(notifications): keep clipboard toasts out of the notification center

* fix(images): allow custom endpoints on non-public hosts

* chore: make toast_only notifications not increment notification counter

* chore: reorder navbar links

---------

Co-authored-by: LynithDev <61880709+LynithDev@users.noreply.github.com>
2026-09-18 23:43:49 +02:00
LynithDev
daaa209b30 chore(lint): cargo fmt 2026-09-18 23:05:50 +02:00
991a85c589 feat: update base to official upstream 2.5.1 with all cracked features intact (2.5.1-c1)
Some checks are pending
Release Multiplatform Binaries / build (deb,appimage, linux-x86_64, ubuntu-22.04, x86_64-unknown-linux-gnu) (push) Waiting to run
Release Multiplatform Binaries / build (dmg,app, macos-arm64, macos-14, aarch64-apple-darwin) (push) Waiting to run
Release Multiplatform Binaries / build (dmg,app, macos-x86_64, macos-14, x86_64-apple-darwin) (push) Waiting to run
Release Multiplatform Binaries / build (nsis, windows-x86_64, windows-latest, x86_64-pc-windows-msvc) (push) Waiting to run
Release Multiplatform Binaries / create-release (push) Blocked by required conditions
2026-09-18 07:16:25 +05:30
LynithDev
e0947848f9 fix: oneclient aur source publishes failing 2026-09-18 01:10:22 +02:00
github-actions[bot]
dad96c8d40 chore: bump to 2.5.1 2026-09-17 22:38:18 +00:00
LynithDev
c7f3fdc52b
chore: update bundled packages only after cluster launch (#849) 2026-09-18 00:09:53 +02:00
LynithDev
43108bc8bc fix: update stale package metadata if it's supported versions were updated 2026-09-17 23:54:24 +02:00
Maciek
e25c3e8243
feat: better error handling for process hooks (#847) 2026-09-17 23:23:46 +02:00
Luna
9dccb42fd1
chore: optimize assets with oxipng (#846) 2026-09-17 23:18:00 +02:00
8093cafd53 docs: restore original custom README description and false positive notice 2026-09-17 10:39:13 +05:30
d214afe99b feat: update base to official upstream 2.5.0 with all cracked features intact (2.5.0-c1)
Some checks are pending
Release Multiplatform Binaries / build (deb,appimage, linux-x86_64, ubuntu-22.04, x86_64-unknown-linux-gnu) (push) Waiting to run
Release Multiplatform Binaries / build (dmg,app, macos-arm64, macos-14, aarch64-apple-darwin) (push) Waiting to run
Release Multiplatform Binaries / build (dmg,app, macos-x86_64, macos-14, x86_64-apple-darwin) (push) Waiting to run
Release Multiplatform Binaries / build (nsis, windows-x86_64, windows-latest, x86_64-pc-windows-msvc) (push) Waiting to run
Release Multiplatform Binaries / create-release (push) Blocked by required conditions
- Rebased base onto official Polyfrost OneLauncher 2.5.0 (release v2.5.0 + latest bundle fixes).
- Integrated new Upstream Control Center quick settings & system info overlay and navbar avatar-with-gear trigger.
- Preserved top navbar 'Skins' direct route navigation.
- Maintained guaranteed offline mode launch without requiring any Microsoft accounts.
- Maintained custom 3D offline skin changer, player model switch (Classic/Slim), and targeted Minecraft Java UUID character slot isolation.
- Maintained CustomSkinLoader auto-configuration for local skins, Ely.by, and SkinRestorer.
- Integrated direct GitHub Releases auto-updater pointing to oiupoyt/OneLauncher-Cracked.
- Preserved inline username renaming modal and Change Skin navigation in account settings and onboarding.
- Maintained mods filter popover blur/text ghosting fix in package manager.
- Preserved fast dev profile and multiplatform release workflow for v2.5.0-c1.
- All workspace tests and clippy checks pass with 0 errors.
2026-09-17 07:15:57 +05:30
618731da7d ci: update release workflow fallback tag and release notes for v2.4.2-c1
Some checks are pending
Release Multiplatform Binaries / build (deb,appimage, linux-x86_64, ubuntu-22.04, x86_64-unknown-linux-gnu) (push) Waiting to run
Release Multiplatform Binaries / build (dmg,app, macos-arm64, macos-14, aarch64-apple-darwin) (push) Waiting to run
Release Multiplatform Binaries / build (dmg,app, macos-x86_64, macos-14, x86_64-apple-darwin) (push) Waiting to run
Release Multiplatform Binaries / build (nsis, windows-x86_64, windows-latest, x86_64-pc-windows-msvc) (push) Waiting to run
Release Multiplatform Binaries / create-release (push) Blocked by required conditions
2026-09-17 06:29:04 +05:30
Julian Chang
41ce177483
Fix version-tag matching and bundle filtering 2026-09-16 18:02:21 -04:00
Julian Chang
09509b1b3d
ignore mc version check for tracked bundle mods 2026-09-16 17:01:50 -04:00
936e4247a3 feat: update base to official upstream 2.4.2 with all cracked features intact (2.4.2-c1)
- Rebased base onto official Polyfrost OneLauncher 2.4.2 (release v2.4.2).
- Ensured offline mode launches with 0 Microsoft accounts required (no OfflineRequiresMicrosoft error).
- Maintained custom 3D offline skin changer, player model switch (Classic/Slim), and targeted Minecraft Java UUID character slot isolation to prevent multiplayer skin cloning.
- Maintained CustomSkinLoader auto-configuration for local skins, Ely.by, and SkinRestorer.
- Integrated direct GitHub Releases auto-updater pointing to oiupoyt/OneLauncher-Cracked.
- Ported inline username renaming modal and Change Skin navigation in account settings and onboarding.
- Maintained mods filter popover blur/text ghosting fix in package manager.
- Preserved fast dev profile and multiplatform release workflow for v2.4.2-c1.
- All workspace tests and clippy checks pass with 0 errors.
2026-09-17 00:28:04 +05:30
github-actions[bot]
ec055f3043 chore: bump to 2.5.0 2026-09-16 18:32:52 +00:00
LynithDev
a2859e6681 chore: add flag to AUR PKGBUILD to prevent rustc from getting OOM killed 2026-09-16 20:32:19 +02:00
Maciek
a00e11d204
feat: control center and smaller navbar link gaps (#832)
* feat: added a control center

* feat: added no account signed in handling; added a modal on sign out clicked

* feat: use the discord icon for the discord rpc quick setting

* style: fade out disabled quick setting tiles

* style: drop the 'Active' suffix from the control center account subtitle

* feat: added a gear indicator to the navbar avatar button

* add small gear icon on avatar

---------

Co-authored-by: LynithDev <61880709+LynithDev@users.noreply.github.com>
2026-09-16 20:29:14 +02:00
Maciek
b4f067483a
fix: fixed most of the sizing issues in the launcher (#822) 2026-09-16 18:58:10 +02:00
Maciek
d32d3e1782
feat: added tooltips (#837) 2026-09-16 18:34:50 +02:00
Maciek
0a6c9e0f74
fix: fixed scrollbar overlapping with the scrollview content (#817) 2026-09-16 18:30:55 +02:00
Maciek
9879eb2e72
fix: fixed versions metadata not healing when unable to parse or read (#835) 2026-09-16 18:30:20 +02:00
Julian Chang
c3a45371dd
fix: incorrect database and filesystem structure of mods after updates (#834)
Co-authored-by: LynithDev <61880709+LynithDev@users.noreply.github.com>
2026-09-16 18:24:09 +02:00
github-actions[bot]
ebb476029f chore: bump to 2.4.2 2026-09-14 20:15:28 +00:00
LynithDev
84bbf29882 fix: mod updates applying after launch and not before 2026-09-14 21:03:34 +02:00
LynithDev
6ceba7480f fix: mod updates not being symlinked to a clusters mods folder after update 2026-09-14 20:39:07 +02:00
github-actions[bot]
db764e63f9 chore: bump to 2.4.1 2026-09-14 14:47:44 +00:00
LynithDev
80ba104861
chore: improve stats page and cluster overview (#831)
* fix(stats): drop zero units from durations and cap the server pie at ten slices

* fix(stats): say out loud that "when you play" bars are lifetime totals

* feat(stats): paint every bar in the accent colour until one is hovered

* feat(stats): add a calendar range picker to daily playtime

* fix(stats): stop recovery inventing playtime and carry sessions over midnight

* feat(stats): more stats out of the data already recorded

* feat(stats): eight more personas, and let them see the server data

* fix(charts): stop axis labels being cut off to their own bar's width

* feat(stats): give the overview a headline stat instead of seven identical boxes

* feat(stats): turn personas into wrapping badges

* fix(stats): lay the overview out for the window it is actually in

* feat(stats): fold the monthly chart into one "Playtime by hour/day/month" card

* fix(stats): stop the total playtime card making the tile block so tall

* fix(stats): strip the persona badges back to plain tags
2026-09-14 16:45:02 +02:00
LynithDev
2e0ba533fe
fix: issues with mod updating and mods randomly being disabled (#830)
* fix: stop offering bundle-owned packages in the update modal

* fix: match a version's game versions exactly not by substring

* fix: resolve a mod's materialized root from the layout in use

* fix: stop parking unclaimed jars in the cluster mods folder

* fix: stop the duplicate reconciler filing a user-disabled override

* fix: repair the disables duplicate resolution left behind
2026-09-14 16:44:46 +02:00
Julian Chang
a8bdf997d9
Reapply "fix: enable Wayland clipboard for image copy + align MSRV docs (#826)"
This reverts commit b737e39d1b.
2026-09-13 22:42:52 -04:00
Julian Chang
b737e39d1b
Revert "fix: enable Wayland clipboard for image copy + align MSRV docs (#826)"
This reverts commit d2d486db06.
2026-09-13 21:12:38 -04:00
sakuyma
d2d486db06
fix: enable Wayland clipboard for image copy + align MSRV docs (#826)
* docs: align documented Rust MSRV to 1.97 everywhere

* fix: enable wayland clipboard support for image copies
2026-09-13 23:28:24 +02:00
Julian Chang
297abeac00
tweak wording on stuff 2026-09-13 00:34:47 -04:00
github-actions[bot]
3d311c6ee3 chore: bump to 2.4.0 2026-09-13 00:01:39 +00:00
LynithDev
5d8db4abf7 fix: symlinks 2026-09-13 01:59:50 +02:00
LynithDev
54980fa73a
fix: linux use dedicated GPU setting (#816)
* forgot to add this

* fix complex type warning in test

* fix(linux): ask the driver whether a card is discrete
2026-09-13 01:36:47 +02:00
LynithDev
cad4800835 fix: issues caused by merges 2026-09-13 01:24:28 +02:00
Maciek
576c93c96b
feat: added placeholder image for images that couldnt be decoded; fixed overflowing titles in mods view (#802)
fix: drop per-render image fallback logging and narrow its memoization cost

fix: keep the backdrop fallback, the cache is what fails
2026-09-13 00:54:10 +02:00
Maciek
ba74bedf92
feat: added microsoft jdk and new shared mods folder layout (#812)
* feat: added microsoft sdk provider

* feat: changed the default provider to microsoft everywhere

* feat: added checking for microsoft jdks and prompting user to install them (ui for discussion)

* feat: added toast popup when user tries to remove runtime that is pinned to some cluster

* feat: added 'migrating' user to the microsoft jdks

* feat: changed reading mods from cluster folders on launch to having cluster folders symlinks in the shared .minecraft folder where mods stay per given cluster; changed resource packs and shader packs from working per cluster to global, every resource pack and shader pack is now being shared between clusters; added mods disabling whenever a mod is manually removed from the mods folder

* fix/feat: fixed hardlinks counting as a duplicate of files it was pointing to (windows); added a progress bar to the disk storage view in settings

* chore: connected microsoft jdk branch and package folder management one

---------

Co-authored-by: LynithDev <61880709+LynithDev@users.noreply.github.com>
2026-09-13 00:37:40 +02:00
Maciek
a6c03c6f6d
feat: added resource packs and shaders sections inside browse view (#819) 2026-09-13 00:36:46 +02:00
Maciek
53b27a1c7b
chore: added checking for browser autoupdater by published_at (#823) 2026-09-13 00:34:37 +02:00
Julian Chang
44dfa32233
Add Ornithe support (#811)
* Add Ornithe support

* chore: fix the remaining startup issues reltaed to arguments and manifest caching

* fix: stop repairing on every launch for natives-only libraries

---------

Co-authored-by: LynithDev <61880709+LynithDev@users.noreply.github.com>
2026-09-13 00:11:21 +02:00
Julian Chang
fe8bb6bfcc
chore: only download bundle content in onboarding pre-download (#801) 2026-09-12 23:40:49 +02:00
Maciek
4932b61a72
fix: cluster settings not inheriting value from global memory field (#804) 2026-09-12 23:39:06 +02:00
Maciek
0785e58d07
chore: deleted corners on the app (#815) 2026-09-10 14:16:31 +02:00
1b5e9eb942 fix(auth): allow offline accounts to launch game without Microsoft accounts (2.3.1-c2)
Some checks are pending
Release Multiplatform Binaries / build (deb,appimage, linux-x86_64, ubuntu-22.04, x86_64-unknown-linux-gnu) (push) Waiting to run
Release Multiplatform Binaries / build (dmg,app, macos-arm64, macos-14, aarch64-apple-darwin) (push) Waiting to run
Release Multiplatform Binaries / build (dmg,app, macos-x86_64, macos-14, x86_64-apple-darwin) (push) Waiting to run
Release Multiplatform Binaries / build (nsis, windows-x86_64, windows-latest, x86_64-pc-windows-msvc) (push) Waiting to run
Release Multiplatform Binaries / create-release (push) Blocked by required conditions
- Removed upstream check in account_for_launch that blocked offline accounts from launching without a Microsoft account
- Added test offline_account_for_launch_succeeds_without_microsoft
- Bumped version to 2.3.1-c2
2026-09-09 21:08:11 +05:30
LynithDev
2378f74e58 chore: add COPR publish workflow 2026-09-09 01:54:35 +02:00
Julian Chang
7b95412511
Update splash_curtain.rs 2026-09-07 23:34:46 -04:00
LynithDev
a70a8a4ffa perf: optimise used memory 2026-09-07 23:29:52 +02:00
163eb0ac0c feat: update base to official upstream 2.3.1 with all cracked features intact (2.3.1-c1)
Some checks are pending
Release Multiplatform Binaries / build (deb,appimage, linux-x86_64, ubuntu-22.04, x86_64-unknown-linux-gnu) (push) Waiting to run
Release Multiplatform Binaries / build (dmg,app, macos-arm64, macos-14, aarch64-apple-darwin) (push) Waiting to run
Release Multiplatform Binaries / build (dmg,app, macos-x86_64, macos-14, x86_64-apple-darwin) (push) Waiting to run
Release Multiplatform Binaries / build (nsis, windows-x86_64, windows-latest, x86_64-pc-windows-msvc) (push) Waiting to run
Release Multiplatform Binaries / create-release (push) Blocked by required conditions
- Rebased onto official Polyfrost OneLauncher v2.3.1 (commit 0e49c691)
- Preserved 100% offline authentication without requiring Microsoft accounts
- Integrated custom 3D offline skin changer with UUID character slot targeting
- Maintained CustomSkinLoader auto-configuration for Ely.by and SkinRestorer
- Maintained direct GitHub Releases auto-updater pointing to oiupoyt/OneLauncher-Cracked
- Maintained mods filter popover fix eliminating text ghosting/duplication
- Configured dev profile to prevent debug symbol bloat
2026-09-07 17:38:22 +05:30
github-actions[bot]
0e49c69176 chore: bump to 2.3.1 2026-09-06 23:02:28 +00:00
LynithDev
322c3d5420 chore: log freya info and switched to experimental branch with windows rendering fix 2026-09-07 01:00:58 +02:00
LynithDev
f55f816342 fix: long launches caused by anti-corruption mechanism 2026-09-07 01:00:58 +02:00
github-actions[bot]
068ea1beaa chore: bump to 2.3.0 2026-09-06 17:52:38 +00:00
Julian Chang
275abd13b7
automatically clear out any corrupted files (#708)
Removes non-empty all-NUL files from the game directory before content is materialized, so installations bricked by corrupted files recover on the next launch.
2026-09-06 01:47:32 +02:00
LynithDev
3d0c880096 feat: let new installs choose the data folder 2026-09-06 01:38:32 +02:00
LynithDev
776b5a8562 feat: better UX with folder data changing 2026-09-06 01:08:22 +02:00
LynithDev
7560d7e8b9 chore: log console should enable "debug" log filter by default 2026-09-06 00:34:44 +02:00
LynithDev
3f66e14db3 fix: declining TOS no longer skips onboarding 2026-09-06 00:17:15 +02:00
LynithDev
37001e7a7c chore: make decling and accepting TOS better 2026-09-06 00:14:11 +02:00
Julian Chang
bd8dc0424c fix onboarding being completely reprompted when TOS updates 2026-09-06 00:14:11 +02:00
LynithDev
6e2516e547 chore: ignore weird java awt natives loading 2026-09-06 00:14:11 +02:00
LynithDev
f8f6ef8f07 Revert "fix: stop rejecting java installations over an awt probe"
This reverts commit 22edf1e9dac3051a6d3641b07c5aad1030571e1c.
2026-09-06 00:14:11 +02:00
LynithDev
3dddbb433e fix: debug page resetting onboarding state 2026-09-06 00:14:11 +02:00
Julian Chang
7780a8900c perf: optimize mod toggling (#791) 2026-09-06 00:14:11 +02:00
Maciek
0217a54518 fix: verify and repair missing natives (#797) 2026-09-06 00:14:11 +02:00
Maciek
612cd9e2a8 fix: fixed hidden mods being enabled on every launch (#794) 2026-09-06 00:13:57 +02:00
LynithDev
ca43e56455 fix: allow both path forms in allowed_symlinks.txt 2026-09-06 00:13:57 +02:00
LynithDev
09073319b1 fix: stop rejecting java installations over an awt probe 2026-09-06 00:13:57 +02:00
LynithDev
84d1cf558c perf: extract archives off the caller's executor 2026-09-06 00:13:57 +02:00
Maciek
ea7b1bc922 fix: browser markdown (#768) 2026-09-06 00:13:57 +02:00
Maciek
b697efce1a feat: added an option for starting the launcher maximized (#750) 2026-09-06 00:13:57 +02:00
Maciek
6ef57bffe2 chore: sorted cluster settings (#775) 2026-09-06 00:13:57 +02:00
Maciek
acd2c1d183 feat: shortcuts (#773) 2026-09-06 00:13:57 +02:00
Maciek
86f3049564 feat: local mods support (#748) 2026-09-06 00:12:16 +02:00
Maciek
ba60ce4d32 feat: added checking for bundle updates on game launch (#778) 2026-09-06 00:12:16 +02:00
Maciek
2cc280bbb0 feat: added an opt-in flow for bundle mods shipped disabled (#737) 2026-09-06 00:12:16 +02:00
Maciek
90fb354857 feat: resource packs and shaders quiet reload (#752) 2026-09-06 00:12:16 +02:00
Julian Chang
72a9b63f24 feat: lower the default memory on lower memory machines (#783) 2026-09-06 00:12:16 +02:00
Julian Chang
86145c7180 feat: prefer the dedicated gpu on windows (#792) 2026-09-06 00:12:16 +02:00
Maciek
e40c0185c4 chore: added dedicated gpu flags (#725) 2026-09-06 00:12:16 +02:00
Maciek
2c43aa16ba feat: added a don't show again option to the update prompt (#723) 2026-09-06 00:12:16 +02:00
Maciek
4aaf974f04 feat: added New/Updated badges to cluster package lists (#734) 2026-09-06 00:12:16 +02:00
Maciek
159e1c7e96 feat: added context menu inside the screenshot viewer (#744) 2026-09-06 00:05:16 +02:00
Maciek
2a36bb8a88 feat: added context menu on homepage clusters (#743) 2026-09-06 00:05:16 +02:00
Maciek
f55a86a024 feat: added a picker for the amount of columns in a row (#784) 2026-09-06 00:05:16 +02:00
Maciek
12783fe59a feat: added MB4/MB5 and Esc navigation globally (#742) 2026-09-06 00:04:57 +02:00
Julian Chang
b2c2289853 fix: stop a stray console window opening on windows (#770) 2026-09-06 00:04:49 +02:00
c063430e26 build: configure dev profile to prevent debug symbol bloat 2026-09-04 19:03:45 +05:30
Julian Chang
0251456b11
Merge branch 'main' of https://github.com/Polyfrost/OneLauncher 2026-09-03 02:22:26 -04:00
Julian Chang
a104c4979a
chore: drop duplicate crate-local sqlx cache 2026-09-02 21:27:39 -04:00
Maciek
fb33693f7d
feat: launcher data folder (#767)
* feat: added disk choice on fresh install

* feat: added protection for corrupted/deleted settings.json

* feat: added migration to another drive for already existing users; changed the default directories

* feat: relocation screen

---------

Co-authored-by: LynithDev <61880709+LynithDev@users.noreply.github.com>
2026-09-02 14:07:20 +02:00
Maciek
25651d0cbc
fix: stray java runtime tmps and version files (#724)
* feat: added removal of .tmp files on launcher start after 10 minutes of being untouched; added removal of java runtime files whenever user deletes java runtime inside java settings (before they were only being deleted from the database, not files)

* feat: added modal for removing java runtimes

---------

Co-authored-by: LynithDev <61880709+LynithDev@users.noreply.github.com>
2026-09-02 13:03:16 +02:00
Julian Chang
b25ff12ab5
feat: delete mods from dead bundles (#746) 2026-09-01 14:03:13 +02:00
Maciek
606a15905d
feat: added ability to decline TOS (#751)
* feat: added ability to decline TOS; added blockades for hosts while TOS is declined

* fix: allowed datastorage-v2, meta.polyfrost.org and status.polyfrost.org

* chore: changed typography

* chore: changed TOS decline warning to a modal
2026-09-01 11:31:47 +02:00
a2ca929e0a fix(skins): calculate exact Minecraft Java UUID character slot for targeted skin injection
Some checks are pending
Release Multiplatform Binaries / build (deb,appimage, linux-x86_64, ubuntu-22.04, x86_64-unknown-linux-gnu) (push) Waiting to run
Release Multiplatform Binaries / build (dmg,app, macos-arm64, macos-14, aarch64-apple-darwin) (push) Waiting to run
Release Multiplatform Binaries / build (dmg,app, macos-x86_64, macos-14, x86_64-apple-darwin) (push) Waiting to run
Release Multiplatform Binaries / build (nsis, windows-x86_64, windows-latest, x86_64-pc-windows-msvc) (push) Waiting to run
Release Multiplatform Binaries / create-release (push) Blocked by required conditions
2026-08-30 18:19:18 +05:30
1f979f5717 fix: resolve mods filter text overlap and ensure 100% reliable skin loading across all MC versions 2026-08-30 17:42:54 +05:30
70b6b0c8b1 docs: remove autoupdater from release notes template 2026-08-30 17:30:42 +05:30
31c294b02a docs: update release notes template to highlight multiplayer skin fix 2026-08-30 17:28:25 +05:30
d1f5a715b8 fix(skins): target player specific UUID default character to prevent multiplayer cloning, bump to 2.2.3-c2 2026-08-30 16:54:51 +05:30
f438445c38 ci: update release changelog and default tag to v2.2.3-c1
Some checks are pending
Release Multiplatform Binaries / build (deb,appimage, linux-x86_64, ubuntu-22.04, x86_64-unknown-linux-gnu) (push) Waiting to run
Release Multiplatform Binaries / build (dmg,app, macos-arm64, macos-14, aarch64-apple-darwin) (push) Waiting to run
Release Multiplatform Binaries / build (dmg,app, macos-x86_64, macos-14, x86_64-apple-darwin) (push) Waiting to run
Release Multiplatform Binaries / build (nsis, windows-x86_64, windows-latest, x86_64-pc-windows-msvc) (push) Waiting to run
Release Multiplatform Binaries / create-release (push) Blocked by required conditions
2026-08-30 14:51:06 +05:30
f84fec2c35 feat(updater): implement direct GitHub Releases auto-updater with cracked revision support (2.2.3-c1) 2026-08-30 14:43:16 +05:30
05dac19dd2 feat(skins): directly replace default textures in client jar, add zip resource pack, and fix options.txt formatting
Some checks are pending
Release Multiplatform Binaries / build (deb,appimage, linux-x86_64, ubuntu-22.04, x86_64-unknown-linux-gnu) (push) Waiting to run
Release Multiplatform Binaries / build (dmg,app, macos-arm64, macos-14, aarch64-apple-darwin) (push) Waiting to run
Release Multiplatform Binaries / build (dmg,app, macos-x86_64, macos-14, x86_64-apple-darwin) (push) Waiting to run
Release Multiplatform Binaries / build (nsis, windows-x86_64, windows-latest, x86_64-pc-windows-msvc) (push) Waiting to run
Release Multiplatform Binaries / create-release (push) Blocked by required conditions
2026-08-30 13:17:09 +05:30
f125ac2d0b ci: ensure previous release assets are purged on re-release 2026-08-30 09:50:48 +05:30
d7618833ef chore: keep version as 2.2.3 2026-08-30 09:44:00 +05:30
b4128fc8f7 release: v2.2.4 (remove portable executables from release artifacts) 2026-08-30 09:35:48 +05:30
a3a3d74fd6 refactor: polish codebase, clean clippy lints, and ensure test suite passes 2026-08-30 09:22:58 +05:30
cea98e9923 fix: browser-to-settings transition crash & full in-game skin asset coverage
- Fix crash when transitioning from Browse to Settings:
  * Prevent UI thrashing by executing router settle in use_side_effect rather than during render
  * Add PartialEq/Eq to BrowserUiState and use use_side_effect_with_deps in Browser component
- Fix in-game skin loading across all Minecraft versions:
  * Modern Minecraft (1.19.3 - 1.21.x) default player skin resolution covers all 9 character models (Steve, Alex, Ari, Efe, Kai, Makena, Noor, Sunny, Zuri) for both wide and slim model paths
  * Legacy Minecraft (1.8 - 1.19.2) entity texture paths (textures/entity/steve.png, alex.png)
  * Multi-mod directory synchronization: CustomSkinLoader, OfflineSkins, cachedImages for cluster game dir and shared .minecraft
  * Safe options.txt patching supporting both resourcePacks and incompatibleResourcePacks list formats
2026-08-29 23:30:02 +05:30
de9416573a refactor: replace authlib-injector with zero-overhead resource pack skin injection
Remove the entire skin_server.rs module and authlib-injector approach (HTTP server,
JVM agent, jar download). Replace with a dead-simple resource pack strategy:

- inject_skin_resource_pack() in launch.rs:
  * On every launch, if the player has a saved skin, writes it to
    resourcepacks/onelauncher_skin/assets/minecraft/textures/entity/player/wide/steve.png
    and .../slim/alex.png (both variants so it always matches)
  * Writes a pack.mcmeta with supported_formats 1-9999 covering all MC versions
  * Patches options.txt to add/keep 'file/onelauncher_skin' in the resourcePacks list
  * If no custom skin is saved, cleans up the pack dir and removes the options.txt entry
- patch_resource_packs_option() handles safe idempotent read-modify-write of options.txt
- Remove skin_server module from game/mod.rs
- Remove authlib_injector_path() from paths.rs
- Revert jvm_args to immutable (no longer needs push)

No extra dependencies, no background threads, no network requests.
2026-08-29 20:11:47 +05:30
52c29c034e feat: in-game offline skin support via authlib-injector + local skin server
- Add packages/oneclient_core/src/game/skin_server.rs:
  * Local Tokio TCP skin server that serves a minimal Yggdrasil-compatible API
  * Responds to GET /, GET /session/minecraft/profile/:uuid, GET /textures/:uuid.png
  * Reads skin PNGs and metadata from launcher skins dir
  * sync_offline_skins() copies PNG to CustomSkinLoader/skins/, config/offlineskins/, cachedImages/skins/
  * prepare_authlib_injector() downloads authlib-injector-1.2.5.jar on first launch
- Modify packages/oneclient_core/src/game/launch.rs:
  * Start skin server and attach -javaagent authlib-injector before spawning Minecraft
  * Sync skins to cluster game dir mod folders on every launch
- Add authlib_injector_path() to packages/oneclient_common/src/paths.rs
- Remove dead fetch_skin_online() from skin.rs + all exports
2026-08-29 20:00:45 +05:30
2a040f8e91 perf: eliminate account dropdown micro-delays with global avatar caching and dev optimization 2026-08-29 19:21:11 +05:30
005e7ce77b fix(skins): isolate UrlModal and PreviewPanel as Component structs to prevent conditional hooks 2026-08-29 18:47:44 +05:30
5a7ecf9293 fix(lifecycle): isolate navbar components and eliminate startup query borrow collisions 2026-08-29 18:39:59 +05:30
714dadf388 fix(hooks): eliminate conditional hooks and add render keys to Avatar and PlayerModel 2026-08-29 18:30:28 +05:30
a363af6d20 feat(skins): integrate full offline skin changer with 3D preview, model toggle, file import, and online URL lookup 2026-08-29 17:46:22 +05:30
6a20bcfec5 ci: add rust caching and safe in-place release publishing 2026-08-29 17:11:03 +05:30
6f7977c734 fix(account_switcher): spawn detached async task for account switching to avoid unmounted scope crash 2026-08-29 17:08:53 +05:30
ddfe500494 chore: update repository links to OneLauncher-Cracked 2026-08-29 15:32:11 +05:30
d801eed647
Update README.md 2026-08-29 09:58:05 +05:30
bcfe8b8ea4
Update README.md 2026-08-29 09:57:44 +05:30
03b76306c2 docs: update repository link to OneClient-Cracked 2026-08-29 08:41:39 +05:30
f17ab744d2 fix(onboarding): ensure async offline account creation completes before navigating 2026-08-29 07:37:48 +05:30
27de1c3bd4 docs: update repository and release links to OneClientCracked 2026-08-29 07:22:54 +05:30
a659448ac6
Update README.md 2026-08-29 07:18:29 +05:30
1a552f0c5e ci: set fail_on_unmatched_files false for release publisher 2026-08-29 06:46:14 +05:30
47b7ba27a0 ci: improve artifact upload resiliency and set tag_name/make_latest for release 2026-08-29 06:44:43 +05:30
8ff958743c feat: add input sanitizer and character constraints hint for offline username 2026-08-29 06:28:12 +05:30
c603d59908 fix(auth): ensure custom offline account sets default user and add unit tests 2026-08-29 06:21:11 +05:30
481ca4d77e feat: prompt for custom offline username during onboarding 2026-08-29 05:57:18 +05:30
853c0beac5 fix(onboarding): auto-provision default Player account on fresh install 2026-08-27 19:42:49 +05:30
c6aca56f27 fix(auth): fix onboarding offline account creation and enable continue button 2026-08-27 19:42:49 +05:30
37a09c12de fix(linux): provide static desktop entry for rpm generation and update repo URLs 2026-08-27 19:42:49 +05:30
710c129273
Update README.md 2026-08-27 19:08:13 +05:30
f6e7d7a8c1
Update README.md 2026-08-27 19:07:14 +05:30
8cb08872bf
Update README.md 2026-08-27 18:13:43 +05:30
ca3dc4c638
Update README.md 2026-08-27 18:13:28 +05:30
aba8106b5b ci: add rpm generation and clean up release asset artifacts 2026-08-27 17:21:43 +05:30
945052def8 ci: use macos-14 runner to build x86_64-apple-darwin binaries 2026-08-27 16:49:24 +05:30
db273e7f38 fix: resolve cross-platform packaging formats and update offline auth tests 2026-08-27 16:43:21 +05:30
48fe1c78e7 fix(db): implement get_by_path, get_latest_by_major, delete_by_path, and list_all 2026-08-27 16:07:06 +05:30
130daf7c34 fix(db): switch java dao to runtime query_as for CI build compatibility 2026-08-27 16:07:06 +05:30
7ba19da764
Fix typo in README regarding username launch 2026-08-27 15:43:30 +05:30
71a5dea95f
Update README.md 2026-08-27 15:43:14 +05:30
a65ac9eed2
Update README.md 2026-08-27 15:42:53 +05:30
134c1db5c6 ci: add sqlx offline cache and env configuration 2026-08-27 15:41:38 +05:30
e371653e2c ci: add automated multiplatform release workflow 2026-08-27 15:27:22 +05:30
56b2d23c2b
Update README.md 2026-08-27 15:22:16 +05:30
6d4e29fb81
Update README.md 2026-08-27 15:21:42 +05:30
c28dbd38c2
Create README.md 2026-08-27 15:18:37 +05:30
c24425e06d feat(auth): enable offline mode accounts and inline username editing 2026-08-27 15:05:07 +05:30
99f78f7b2a
Initial commit 2026-08-27 12:59:33 +05:30
Maciek
815b78e227
chore: migrated to freya 0.5.0-rc.4 (#739) 2026-08-26 13:20:44 +02:00
Maciek
419c07b822
feat: added memory allocation presets to minecraft and cluster settings (#747) 2026-08-26 12:53:48 +02:00
Maciek
8ca2c30993
feat: implemented disabling animations (#762)
* feat: implemented disabling animations
* fix: home page and notification toasts animating weirdly

Co-authored-by: LynithDev <61880709+LynithDev@users.noreply.github.com>
2026-08-26 12:44:45 +02:00
Maciek
795d80870b
feat: added rerender when new screenshot is taken (#745) 2026-08-26 12:37:57 +02:00
Julian Chang
f2ecde8927
chore: try to auto update in case of startup crash (#758) 2026-08-25 15:53:13 +02:00
Manor Dev
b00dff4256
fix: make back button on settings page not count sidebar items (#730) 2026-08-25 15:44:08 +02:00
Maciek
f74ed38363
fix: scrollbar obscuring the file path (#741) 2026-08-25 15:20:46 +02:00
Maciek
67e1ca13a0
fix: text that was visible in the center on stats (#753) 2026-08-25 15:20:01 +02:00
Maciek
66359b413e
fix: fixed memory input changing to default on every app launch (#764) 2026-08-25 15:18:38 +02:00
Maciek
5cac70b026
feat: added progress bar on first launch screen; changed progress bar to reusable component (there were 4 duplicates) (#740) 2026-08-25 15:16:01 +02:00
Julian Chang
e659ee122a
completely wipe out hickory 2026-08-24 02:42:18 +07:00
github-actions[bot]
148e665250 chore: bump to 2.2.3 2026-08-22 17:40:31 +00:00
Maciek
caba8ac65f
feat: added cosmetic navbar link (#754) 2026-08-23 00:34:22 +07:00
Maciek
be87077e95
fix: fixed 404 response from curseforge (#749) 2026-08-23 00:31:45 +07:00
Maciek
3d804edf02
feat: added rerendering after every new java runtime addition (#721) 2026-08-23 00:31:18 +07:00
Maciek
f7b22b650a
Fix/refreshing account doesnt change username (#720)
Co-authored-by: LynithDev <61880709+LynithDev@users.noreply.github.com>
2026-08-23 00:30:55 +07:00
Julian Chang
b9f408079e
Decrease minimum RAM allocation in JVM 2026-08-23 00:27:14 +07:00
LynithDev
efed361417
feat: added funfacts changing on background change (#718)
Co-authored-by: rozwader <maciek.rozwadowski2006@gmail.com>
2026-08-19 16:05:42 +02:00
LynithDev
578ec187cd
feat: added search bar into Game Output live logs (#716)
Co-authored-by: rozwader <maciek.rozwadowski2006@gmail.com>
2026-08-19 15:27:13 +02:00
LynithDev
ff22c8ac3b fix(app): normalize trackpad scroll deltas on macOS (#694) 2026-08-19 15:07:15 +02:00
LynithDev
bd7124c873
chore: changed ping url from gstatic to 1.1.1.1 (#719)
Co-authored-by: rozwader <maciek.rozwadowski2006@gmail.com>
2026-08-19 14:14:03 +02:00
LynithDev
020f9a9fa6 fix: panic caused by min > max 2026-08-19 10:36:29 +02:00
LynithDev
0495a5d067
feat: changed windows stack memory from 1MB to 8MB (same as Linux and MacOS) (#717)
Co-authored-by: rozwader <maciek.rozwadowski2006@gmail.com>
2026-08-12 11:15:41 +02:00
Julian Chang
09ff4d1c4d
fix(misc): bring back accidentally removed comment 2026-08-12 13:41:51 +07:00
Julian Chang
33218af293
fix mod card toggle taking 20 years 2026-08-12 13:41:12 +07:00
github-actions[bot]
5f40171142 chore: bump to 2.2.2 2026-08-10 21:27:24 +00:00
LynithDev
0e5ddcc522 fix: increase z-index of label in home recents row 2026-08-10 18:10:37 +02:00
LynithDev
8c5812d652 fix: migration issues, cluster preparation and sentry logging 2026-08-10 18:04:10 +02:00
Julian Chang
d45153a41c
add one more check for awt 2026-08-09 16:23:28 +07:00
Julian Chang
2a711c1ef3
actually properly check for AWT 2026-08-09 16:18:31 +07:00
github-actions[bot]
26c5aa8c49 chore: bump to 2.2.1 2026-08-08 04:44:56 +00:00
Julian Chang
9603e76cea
maybe improve visual code bundling 2026-08-08 11:33:24 +07:00
Julian Chang
e2064a5784
package visual c++ directly in windows installer 2026-08-07 22:07:26 +07:00
Julian Chang
d54283d99c
fix liquid glass icon 2026-08-07 14:55:55 +07:00
github-actions[bot]
277cf4f63f chore: bump to 2.2.0 2026-08-06 19:30:51 +00:00
LynithDev
a6e0bf0ab7 fix(core): bundle overrides being problematic pt. 2 2026-08-06 20:17:28 +02:00
LynithDev
64e1c07a2e chore: update README.md 2026-08-06 19:44:29 +02:00
LynithDev
a8609f59ff chore(app): fixed macos icon properly this time 2026-08-06 19:15:29 +02:00
LynithDev
ef60855f16 fix(core): bundle overrides being problematic 2026-08-06 15:03:32 +02:00
LynithDev
93aa1b5900
feat(logs): live launcher log console in its own window (#697) 2026-08-06 13:25:18 +02:00
LynithDev
2f993a0c3b
fix(auth): actually cancel an in-flight Microsoft sign-in (#696) 2026-08-06 12:47:18 +02:00
LynithDev
e99437f1b4
feat(search): make cluster package search fuzzy (#686) 2026-08-06 12:41:36 +02:00
LynithDev
b60ce5af12
refactor(java): simpler java check (#698) 2026-08-06 12:14:53 +02:00
LynithDev
fdb3b9a0a3 fix(ui): player preview is properly rendered now 2026-08-06 11:44:41 +02:00
Julian Chang
a8531352a1
remove string dedup in jvm args 2026-08-06 16:42:37 +07:00
LynithDev
ef53badeff
chore(ui): accounts page part of the settings layout (#693)
* feat(settings): move accounts into the settings shell

* fix(settings): keep the sidebar still on accounts, enlarge the model
2026-08-06 10:51:07 +02:00
LynithDev
8511048293
feat(ui): hidden bundle packages filter (#692) 2026-08-06 10:41:10 +02:00
LynithDev
a838e1c96b feat(updater): allow disabling the updater through an environment variable 2026-08-05 16:40:22 +02:00
LynithDev
792d716707 fix(ui): make GPU cache limit 512mb instead of 32mb 2026-08-05 13:55:25 +02:00
Julian Chang
413931eb74
fix workflow 2026-08-05 05:09:38 +07:00
Julian Chang
76e7c2ca7e
2.1.5 2026-08-05 05:03:00 +07:00
LynithDev
885bd31f44 fix: downloading errors should be properly handled now 2026-08-04 21:43:37 +02:00
Jacob
e272c66696
fix: fun fact being loaded from the old data storage url (#668) 2026-08-04 19:34:37 +07:00
Julian Chang
413411e1bc
add a huge warning when people try to install skyblock mods 2026-08-04 16:52:02 +07:00
Julian Chang
3d0bd057dd
pin workflows to hash 2026-08-03 20:00:38 +07:00
Julian Chang
791a1a3cbb
revert back to G1GC as a default GC 2026-08-02 23:55:20 +07:00
LynithDev
63ca74f054
chore: update dependencies (#660) 2026-08-02 18:17:32 +02:00
LynithDev
4792c9975f chore(ci): speed up nightly builds 2026-08-01 23:31:03 +02:00
github-actions[bot]
455f69f894 chore: bump to 2.1.4 2026-08-01 21:24:13 +00:00
LynithDev
394146d552 feat: auto-repair as well as verify cluster button in cluster settings 2026-08-01 23:22:20 +02:00
LynithDev
4c6de0d2c4 feat(ui): browser package better multi-version management 2026-08-01 17:10:20 +02:00
LynithDev
fb90eb7bb8 feat(ui): browser grid tags and install button on package cards 2026-08-01 17:10:20 +02:00
LynithDev
6e25ea2bfd feat(ui): check browser package updates on game launch instead 2026-08-01 17:10:20 +02:00
LynithDev
5580093408 feat(ui): per-cluster update prompt for browser content 2026-08-01 17:10:20 +02:00
LynithDev
ddcc6296d9 feat(content): check browser-installed packages for newer versions 2026-08-01 17:10:20 +02:00
LynithDev
1bd0b68e91 feat(db): browser package update cache and per-profile update mode 2026-08-01 17:10:20 +02:00
LynithDev
207abaf64b fix(ui): hide bundle packages marked hidden from the package manager (except in "All" category) 2026-08-01 17:10:20 +02:00
LynithDev
e6515c21ed fix(ui): scope package manager search to the actively viewed category 2026-08-01 17:10:20 +02:00
LynithDev
2e7bc89dbc feat(ui): rename External tab to Browser and add toolbar browse action 2026-08-01 17:10:20 +02:00
LynithDev
d61f6e6655 fix(ui): disable the launch button on click, not until first message response 2026-08-01 17:10:20 +02:00
LynithDev
038dc94725 fix(core): disallow launching multiple instances so fast 2026-08-01 17:10:20 +02:00
LynithDev
44c153dd91 feat(ui): install packages straight from the listing 2026-08-01 17:10:20 +02:00
LynithDev
1947e2d534 feat(java): prefer JDKs, require java.awt, install kits only 2026-08-01 17:10:20 +02:00
LynithDev
038c3542ce chore(onboarding): better pre-download toggle description 2026-08-01 17:10:20 +02:00
github-actions[bot]
39b2f187c5 chore: bump to 2.1.3 2026-07-31 23:00:39 +00:00
LynithDev
5d0101b3aa fix(core): disable hickory dns on windows 2026-08-01 00:42:16 +02:00
LynithDev
b35f258043 chore: github action rust cache 2026-08-01 00:08:26 +02:00
LynithDev
7187e841b6 fix(core): attempt to fix requesting issues 2026-07-31 23:22:14 +02:00
LynithDev
3b436f0d87 feat: storage manager 2026-07-31 17:21:19 +02:00
Julian Chang
65869ca8c0
bump to 2.1.2 2026-07-31 05:35:44 +07:00
Julian Chang
3e864c1d0f
remove the performance flag toggle 2026-07-31 04:50:49 +07:00
Julian Chang
0735b21060
Merge branch 'main' of https://github.com/Polyfrost/OneLauncher 2026-07-31 04:29:08 +07:00
Julian Chang
fb4c16c027
add better default JVM args 2026-07-31 04:29:02 +07:00
LynithDev
8e82c1e26a feat(core): package downloading with dependencies actually downloads required dependencies now 2026-07-30 21:32:26 +02:00
LynithDev
7b300ca5a5 fix(ui): fix startup overlaying on bundle updates 2026-07-30 17:34:30 +02:00
Julian Chang
087365e877
Merge branch 'main' of https://github.com/Polyfrost/OneLauncher 2026-07-29 23:04:28 +09:00
Julian Chang
bf5efab270
sign oneclient binary too 2026-07-29 23:04:24 +09:00
LynithDev
b6044d9e15 chore: bump version to 2.1.1 2026-07-29 00:35:05 +02:00
LynithDev
e31d799e86 fix(ui): version art gets properly prefetched 2026-07-29 00:34:40 +02:00
LynithDev
4aaff39abc feat(ui): browser navbar tab + better installation feedback 2026-07-29 00:06:14 +02:00
LynithDev
34408056c2 fix(core): disabled packages don't enable themselves after updating 2026-07-28 23:04:44 +02:00
LynithDev
ae76595913 fix(ui): forgot to change these compile errors 2026-07-28 22:42:22 +02:00
LynithDev
57d50a95c4 fix: recent cards sizing issue 2026-07-28 22:15:23 +02:00
LynithDev
21dc169578 fix(ui): status bar close button, and the layer saturation behind it 2026-07-28 22:15:17 +02:00
LynithDev
6344d2e985 feat(ui): JVM arguments setting 2026-07-28 22:14:38 +02:00
LynithDev
5f5fa4141a feat(content): make mod toggles work while the game is running 2026-07-28 22:14:29 +02:00
LynithDev
e0c8994dd8 fix(ui): keep home recent cards sized correctly through a resize 2026-07-28 22:14:23 +02:00
LynithDev
18b95ae60a fix(ui): rotate the changelog chevron with the accordion 2026-07-28 22:14:15 +02:00
LynithDev
56b421b187 fix(content): stop removed bundle mods coming back 2026-07-28 22:13:58 +02:00
LynithDev
d9e4f99add refactor(ui): compact the auth error preview in the debug page 2026-07-28 22:13:46 +02:00
LynithDev
875c667313 fix(ui): render the connectivity status bar message properly 2026-07-28 22:13:36 +02:00
LynithDev
1fd587a840 fix(ui): keep progress toasts from covering the navbar 2026-07-28 22:13:32 +02:00
LynithDev
b9f341e579 chore: update to freya 0.4 (fixes browser freeze issue) 2026-07-28 21:26:17 +02:00
LynithDev
e689a43a87 refactor: split core into modular crates 2026-07-28 12:11:02 +02:00
Julian Chang
1962e9c0c4
theoretically support macOS Mojave? 2026-07-26 11:59:04 +09:00
LynithDev
6b584fb957 chore: bump version to 2.1.0 2026-07-25 22:03:27 +02:00
LynithDev
f3d526c0c4 feat(ui): toasts pause on hover + bunch of small general tweaks 2026-07-25 21:06:10 +02:00
LynithDev
430e8ea28f feat(ui): better looking bundle updates 2026-07-25 20:36:52 +02:00
LynithDev
34742efc78 chore(lint): fix clippy warnings 2026-07-25 20:21:27 +02:00
LynithDev
57408aa710 feat(ui): show all individual versions 2026-07-25 20:18:12 +02:00
LynithDev
76c4a03942 fix(core): shader configs are persisted across launches 2026-07-25 18:15:47 +02:00
LynithDev
b2672c8712 fix(core): better parallelisation for downloads and tweaked visual download elements 2026-07-25 17:47:46 +02:00
LynithDev
021976ee10 feat(ui): file/folder drag and drop is now global across the app and prompts the user regarding the import 2026-07-25 13:56:16 +02:00
Julian Chang
0a9b067231
Fix GH action 2026-07-24 10:51:06 +09:00
Julian Chang
14324bb4c8
fix sentry debug gh action 2026-07-24 10:13:54 +09:00
Julian Chang
f9cb754e9e
fix gh action (again) 2026-07-24 09:54:30 +09:00
Julian Chang
ed0dacca43
Fix linux compile errors 2026-07-24 09:31:23 +09:00
Julian Chang
b20b005283
fix rpm packaging 2026-07-24 09:23:09 +09:00
LynithDev
bd685784f8 chore: revert deduplicated builds for legacy auto updater 2026-07-23 19:36:17 +02:00
LynithDev
b3c8d4ab3a feat: add RPM builds, deduplicate .exe and .appimage and disable autoupdating on linux builds that aren't appimages 2026-07-23 19:30:08 +02:00
LynithDev
6fb841bc06 chore: better sentry error reporting regarding stacktraces and errors 2026-07-23 18:16:45 +02:00
LynithDev
07884b9894 fix: macOS window border 2026-07-23 13:30:20 +02:00
Julian Chang
21bc328026
Add README with OneClient and OneLauncher details 2026-07-23 10:37:40 +09:00
LynithDev
87cf48019e feat: Window corner radius is now dynamic on Windows and Linux, whereas on macOS native window attributes are used 2026-07-21 14:06:53 +02:00
LynithDev
fbf2dc29b5 feat: Added debouncing to the browser search input 2026-07-21 13:51:47 +02:00
LynithDev
5929e51920 feat: Make bundle updates prettier 2026-07-21 13:03:33 +02:00
Julian Chang
85d1e09cee
Add readable MS errors 2026-07-21 13:37:03 +09:00
Julian Chang
24d9bc3458
Merge branch 'main' of https://github.com/Polyfrost/OneLauncher 2026-07-21 06:25:00 +09:00
Julian Chang
cf3f7fc989
Fix release workflow 2026-07-21 06:24:54 +09:00
Julian Chang
f435df1046
Add SignPath info 2026-07-21 06:05:51 +09:00
Julian Chang
bf6ee14add
Merge branch 'main' of https://github.com/Polyfrost/OneLauncher 2026-07-21 06:03:30 +09:00
Julian Chang
e5a9e70083
bump version to 2.0.2 2026-07-21 06:03:29 +09:00
LynithDev
179f192ca4 fix: Missing icons on Windows and Linux 2026-07-20 22:35:43 +02:00
Julian Chang
fe1797be68
Update Cargo.toml 2026-07-20 20:35:41 +09:00
Julian Chang
120b9ca460
Maybe fixes #603
Pushing so I can have CI compile for me lol
2026-07-20 19:12:21 +09:00
Julian Chang
bbfc585251
Give actual cause if login fails 2026-07-20 07:32:18 +09:00
Julian Chang
9b74c051e7
Merge branch 'main' of https://github.com/Polyfrost/OneLauncher 2026-07-20 07:30:40 +09:00
Julian Chang
a4e1ad5138
Fix #604 2026-07-20 07:30:38 +09:00
LynithDev
964cfa61b3 feat(ui): Add SQL debug console in debug page 2026-07-19 17:37:04 +02:00
LynithDev
c881bf858d feat(ui): Missing Java Popup 2026-07-19 16:37:08 +02:00
LynithDev
a9481a5789 feat(core): Provision cluster creation in an attempt to not have race conditions 2026-07-19 13:28:27 +02:00
LynithDev
c338d09c60 feat(ui): Made the download notification more descriptive 2026-07-19 11:19:33 +02:00
LynithDev
48a2d67ae6 fix: Use higher stack size in debug builds 2026-07-19 10:37:30 +02:00
LynithDev
2ad94a192b feat: Use different launcher folder in dev builds 2026-07-19 10:34:08 +02:00
Julian Chang
e4c5d3fcd7
Dont use hickory on Windows 2026-07-19 11:46:48 +09:00
Julian Chang
eb7d6ec911
Add nightly builds 2026-07-19 10:30:48 +09:00
Julian Chang
54c9cf1ff6
Fix stale shortcuts when updating from 1.x to 2.x 2026-07-19 10:12:24 +09:00
Julian Chang
778be93a39
Add aur publish 2026-07-19 10:05:19 +09:00
Julian Chang
445ad49ec8
fix auto-updating for new oneclient macos 2026-07-19 08:27:07 +09:00
Julian Chang
668cad9ec4
bump to 2.0.1 2026-07-19 08:03:31 +09:00
Julian Chang
46efd39b6a
fix java locate errors killing whole java installation 2026-07-19 07:57:18 +09:00
Julian Chang
c95e57ef55
remove Legacy Fabric 2026-07-19 07:56:52 +09:00
Julian Chang
0317e3cd8b
Fix updates not being applied 2026-07-19 07:32:48 +09:00
Julian Chang
5b11415aae
Merge branch 'main' of https://github.com/Polyfrost/OneLauncher 2026-07-17 17:42:50 -04:00
Julian Chang
05cdb87a90
Update oneclient_release.yml 2026-07-17 17:42:49 -04:00
LynithDev
ccc34e0950 fix(core): Force plus websocekt to use http 1 2026-07-17 19:03:05 +02:00
LynithDev
5b24a81fe5 feat(core): Launcher migrations now take in effect cluster migrations 2026-07-17 18:23:43 +02:00
Julian Chang
2718105944
vanilla migration
#546
2026-07-16 16:28:21 -04:00
Julian Chang
7696d80fe8
revert lunar 2026-07-16 15:33:28 -04:00
LynithDev
a4753fb06b feat(ui): Hide changelog indicator in the settings sidebar if changelog was read 2026-07-16 20:25:34 +02:00
Julian Chang
7f8b62eb15
Reapply "feat: Added migration from Lunar Client"
This reverts commit 1243dbcd75.
2026-07-16 13:40:37 -04:00
Julian Chang
1243dbcd75
Revert "feat: Added migration from Lunar Client"
This reverts commit 08fe999691.
2026-07-16 13:31:58 -04:00
LynithDev
0cf43816bf feat(ui): Remove / disable some settings 2026-07-16 19:14:39 +02:00
LynithDev
c3c4b37483 feat(ui): Add the All category back to package manager views 2026-07-16 19:03:24 +02:00
LynithDev
98c2da4253 feat(core): Add predownload key to versions metadata and restrict onboarding downloads 2026-07-16 18:45:32 +02:00
LynithDev
6eb16028d6 feat(core): Add Curseforge API token to every curseforge request 2026-07-16 18:40:41 +02:00
LynithDev
8dca2550d1 feat(core): Process recovery (session exit times and live log after restarting launcher) 2026-07-16 17:48:16 +02:00
LynithDev
ddda1d66ba feat(ui): Navbar entry animation + cards only animate on home page entry 2026-07-16 14:38:34 +02:00
LynithDev
08fe999691 feat: Added migration from Lunar Client 2026-07-16 14:24:52 +02:00
LynithDev
0a51018954 feat(ui): Stats page tweaks (pie charts and consistent spacing) 2026-07-16 11:01:51 +02:00
Julian Chang
d593ecb09f
26.1.2 support 2026-07-16 01:49:33 -04:00
Julian Chang
6c7d0a1ca8
compile-time 2026-07-15 16:37:59 -04:00
Julian Chang
668737fc6c
Rewrite bundles page
Fixes #547, #576
2026-07-15 16:24:52 -04:00
Julian Chang
29d1f1c9d2
Bugs
Fixed #492
Fixed #510
Fixed #506
Fixed #568
Fixed #582
Fixed #578
Fixed #567
Fixed #588
Fixed #585
Fixed #571
Fixed #587
Fixed #584
2026-07-15 13:41:43 -04:00
Julian Chang
68337a79dc
Merge branch 'main' of https://github.com/Polyfrost/OneLauncher 2026-07-15 02:12:03 -04:00
Julian Chang
d4fc3a5cb6
support voice chat and stuff 2026-07-15 02:12:02 -04:00
Julian Chang
442feba6f2
Update onboarding message 2 2026-07-14 18:19:57 -04:00
Julian Chang
c98107f722
Update onboarding message 2026-07-14 18:19:39 -04:00
Julian Chang
e5cd435ecf
Merge branch 'main' of https://github.com/Polyfrost/OneLauncher 2026-07-14 16:42:17 -04:00
Julian Chang
669af41e1c
Ig bro 2026-07-14 16:42:15 -04:00
LynithDev
ae5fc08892 fix(core): Use junction crate on windows for symlinks 2026-07-14 19:48:16 +02:00
LynithDev
79497c0cc6 fix(core): Recursion limit reached because of tracing::instrument 2026-07-14 19:15:04 +02:00
LynithDev
983702ed81 fix(auth): Made auth load faster and refresh expired sessions on launch 2026-07-14 19:03:02 +02:00
LynithDev
c43e888ebd fix(ui): Fix cluster long description wrap missing gap + gallery images looking better 2026-07-14 18:23:23 +02:00
LynithDev
04c944ec30 chore: Add a bunch of logging 2026-07-14 18:06:23 +02:00
LynithDev
b7e5b0b75b feat(ui): Let the user pick multiple packages at once 2026-07-13 18:47:21 +02:00
LynithDev
cdd4504b84 chore: Switch to open crate rather than in-house solution 2026-07-13 18:41:55 +02:00
LynithDev
8cd617a78b feat(ui): very basic bundle overrides updating 2026-07-13 18:01:41 +02:00
LynithDev
44897b3e7f feat(ui): better downloading information 2026-07-13 16:41:33 +02:00
LynithDev
557b0e4b7b feat(ui): Make the launcher navigatable with the keyboard 2026-07-13 16:10:21 +02:00
LynithDev
21313b2093 feat(ui): Placeholder UI for bundle update notification + modal 2026-07-12 23:25:49 +02:00
LynithDev
d0c97b4177 feat(ui): Merge Microsoft Auth types into 1 popup
fix(ui): Microsoft Auth notification is no longer persistent on cancel
2026-07-12 19:17:38 +02:00
LynithDev
eeaecd3de4 feat(ui): Account Popup 2026-07-12 18:00:40 +02:00
LynithDev
1c8db8ceff feat: Java 25+ is now downloadable
fix(ui): Scrollviews with no scrollable areas capturing scroll wheel events
2026-07-12 17:38:36 +02:00
LynithDev
68c8762b08 fix(ui): Home page recent cluster cards scale and position properly 2026-07-12 16:20:46 +02:00
Julian Chang
5ef719dec7
Closes #517 2026-07-11 17:52:03 -04:00
Julian Chang
5b9d31195f
improve macOS install window
Closes #514
Closes #515
2026-07-11 17:38:46 -04:00
LynithDev
f32fbf3120 fix(core): Fix symlinks and logging 2026-07-11 21:01:55 +02:00
LynithDev
4ac89a44f2 fix(ui): Onboarding navbar window titlebar buttons finally work 2026-07-10 21:24:30 +02:00
LynithDev
fcc519d25e chore: Fix clippy warnings 2026-07-10 20:55:39 +02:00
LynithDev
f2bc2d888f feat: Onboarding Migration page 2026-07-10 20:53:24 +02:00
LynithDev
7def9a9c8c fix: Blur 2026-07-09 20:53:52 +02:00
LynithDev
784249005e feat: Alex + Slim skins support in avatar and player model renderer 2026-07-08 17:57:05 +02:00
LynithDev
2a2d992649 feat: More compact cluster package manager view + package manager filter popover 2026-07-08 17:19:37 +02:00
LynithDev
0af7c7455b some tweaks 2026-07-06 20:10:14 +02:00
Julian Chang
7416a3407f
enable Win32_UI_WindowsAndMessaging for ShellExecuteW 2026-07-06 10:11:32 -04:00
Julian Chang
199c679238
ig we can try again 2026-07-06 09:46:46 -04:00
Julian Chang
22ec1278d3
fix macOS signing (hopefully) 2026-07-06 09:40:29 -04:00
Julian Chang
21c01e07d3
fix MS auth not working on Windows 2026-07-06 09:23:30 -04:00
Julian Chang
f2f2368eff
Update oneclient_release.yml 2026-07-06 05:55:36 -04:00
Julian Chang
0f04462863
Folder button
Automatically add stuff added to the mods folder to the next-ran cluster if in a shared directory
Add a txt explanation as to why certain folders are empty in shared directory
2026-07-06 05:02:47 -04:00
Julian Chang
a645388a40
Shared .minecraft folder 2026-07-06 04:39:50 -04:00
Julian Chang
700b45dd6b
Fix some mods not downloading 2026-07-06 04:12:02 -04:00
Julian Chang
41801010a4
use authorize oauth2 instead of devicecode oauth2 2026-07-06 02:40:33 -04:00
Julian Chang
c27688c8d4
adds tips and parallax background to onboarding
update client id for MSA + fix account already logged in issues
2026-07-06 02:05:15 -04:00
Julian Chang
2bbecb6e86
Try to fix linux build 2026-07-06 01:58:42 -04:00
Julian Chang
c358dfd95a
Update Cargo.toml 2026-07-06 01:18:46 -04:00
Julian Chang
9cb5db15f0
Attempt installer/updating 2026-07-06 01:00:56 -04:00
Julian Chang
99d095088c
update README/CONTRIBUTING.md 2026-07-05 16:51:07 -04:00
LynithDev
9ab0a0ecdd
Freya rewrite
This is v2 of OneClient. Removed all web-related stuff.

Co-Authored-By: Julian Chang <wyvest@polyfrost.org>
2026-07-05 16:37:05 -04:00
Julian Chang
a10378e9d7
bruh 2026-07-02 11:01:04 -04:00
Julian Chang
a11949ebdf
Update oneclient.artifact-configuration.xml 2026-07-02 10:37:56 -04:00
Julian Chang
c8bd0ffd5e
Change organization ID to use secrets 2026-07-02 10:15:23 -04:00
Julian Chang
a06b21d6eb
1.1.7 2026-07-02 09:31:38 -04:00
Daksh Jain
467164a945
fix macOS (#509) 2026-06-30 18:31:07 -04:00
Julian Chang
e0a645f701
Bump to 1.1.6
Some checks are pending
Build and Lint / ES Checks (push) Waiting to run
Build and Lint / Rust Checks (push) Waiting to run
2026-06-29 01:17:10 -04:00
Julian Chang
d6dc358e35
track playtime 2026-06-29 01:14:10 -04:00
Julian Chang
7d1460f885
bump ver to 1.1.5
Some checks are pending
Build and Lint / ES Checks (push) Waiting to run
Build and Lint / Rust Checks (push) Waiting to run
2026-06-22 07:43:19 +07:00
Julian Chang
723d1e43ae
Fix overrides and updates n stuff 2026-06-22 07:17:23 +07:00
Julian Chang
1635ca38ce
poly+ backend 2026-06-20 05:39:16 +07:00
Wyvest
a822f8d098
Update format.yml to simplify triggers
Removed pull request trigger and workflow_dispatch from format.yml
2026-04-18 01:16:26 -04:00
Wyvest
442245ffca
bump to 1.1.4 2026-04-01 04:16:31 -04:00
Wyvest
c6f347f98c
Fix stale version fetching 2026-04-01 04:16:13 -04:00
Wyvest
ad4c0bd361
Bump to 1.1.3 2026-04-01 03:10:24 -04:00
Wyvest
c5f43a83cf
Remove all automatic dependency downloading 2026-04-01 03:10:05 -04:00
Wyvest
3e9e7b949d
Bump to 1.1.2 2026-04-01 01:10:51 -04:00
Wyvest
ceb6fcd6a9
Fix library downloading 2026-04-01 01:10:32 -04:00
Wyvest
e479813c07
Fix onboarding not being accounted for during migration check 2026-04-01 01:10:12 -04:00
Wyvest
ee177708c1
Update interpulse/interflow 2026-03-31 21:13:18 -04:00
Wyvest
f4cce7c43a
fix onboarding clusters not being accounted in migration stuff 2026-03-31 18:41:06 -04:00
Wyvest
54d259a489
Bump to 1.1.1 2026-03-31 18:31:26 -04:00
Wyvest
2847c44a81
fix rare crash 2026-03-31 18:30:39 -04:00
Wyvest
93fef599ae
add fabric loader updating 2026-03-31 00:41:24 -04:00
Wyvest
0ab1043082
Squashed commit of the following:
commit f1c274101561d8e3ebd24b7779ba989f2029549f
Merge: 49f304e 3b885cd
Author: Wyvest <wyvestbusiness@gmail.com>
Date:   Mon Mar 30 05:51:40 2026 -0400

    Merge branch 'main' into pr/500

commit 49f304e04178ae50c2e8c43b5401ee440b4125d7
Author: belle <sillysys@proton.me>
Date:   Sun Mar 29 20:40:10 2026 +0000

    Reword some descriptions from previous commit

commit e1949dd3b45b5facb6c9b5dad2a463a7e41b4d20
Author: belle <sillysys@proton.me>
Date:   Sun Mar 29 20:35:43 2026 +0000

    Fill placeholders
2026-03-30 05:52:11 -04:00
Wyvest
3b885cdb0f
Improve modpack download resiliency, onboarding
Track and surface partial modpack download failures across core and frontend. Adds a PartialModpackInstall error and counts failed/attempted downloads in the mrpack flow, returning an error if some files failed. Frontend download pipeline now runs parallel downloads that return per-item results, reports/logs failures, and exposes retry/continue UI in onboarding.

Backend robustness improvements: deduplicate concurrent package inserts by reusing existing row on unique-hash constraint, detect hard-link collisions and verify hashes before skipping or erroring, and return meaningful errors when partial installs occur.

Other changes: propagate richer error context when stamping migrated cluster created_at, invalidate relevant queries after migration, make settings writes awaitable and update the query cache optimistically, add queryClient usage in version-migration hook, and various type/bindings updates to reflect the new PartialModpackInstall error. These changes improve reliability and UX during batch package installs and onboarding downloads.
2026-03-30 05:50:29 -04:00
Wyvest
9f1b6d6ae2
Bump to 1.1.0 2026-03-30 03:26:27 -04:00
Wyvest
445eca2775
Spice up onboarding 2026-03-30 03:25:51 -04:00
Wyvest
1c3041679e
unify version downloads 2026-03-30 01:19:15 -04:00
Wyvest
5cac13a54c
Add cluster migration stuff
Implement cluster content migration and local versions override. Adds a new IPC API (copy_cluster_content) and CopyClusterResult, plus copy_dir_all helper to recursively copy files. Introduces migrate_non_bundle_packages and migrate_bundles_to_cluster to map and install provider-managed packages for the target MC version and to translate/copy bundle overrides; files without a compatible provider version are copied as .disabled and returned to the caller. Prefer a local versions_override.json when loading the online manifest (useful for testing) and adapt MC version parsing/formatting for year-based majors. Frontend: update generated bindings/types, add MigrationModal UI and useVersionMigration hook, integrate the migration modal into the root and debug screens, and persist seen_versions in settings. Misc: propagate manifest/versions into several UI routes and adjust bundle/package handling accordingly.
2026-03-30 00:28:14 -04:00
Jacob
247d23083d
fix: Resource Packs Compatibility Check (#498)
Sometimes they are tagged as only supporting Vanilla what is true but
that causes issues when downloading into a fabric cluster. Since fabric
IS NOT vanilla they "don't work" thus won't install. This just skips
that check and downloads it anyways

Co-authored-by: Wyvest <wyvestbusiness@gmail.com>
2026-03-08 16:52:09 +09:00
Jacob
978732a8fa
feat: toasts customizability (#497)
* fix: Toasts always using the info icon

* feat: Toast Position Customizability

* feat: Toast duration customizability

* fix: send toast button

wide lol

* feat: toast auto close customizability

* fix: SettingNumber being bad
2026-03-08 16:50:50 +09:00
belle
73a55ee58d
Fix PKGBUILDs (#495)
* Fix PKGBUILDs

* remove filter from pnpm prep
2026-03-08 16:49:23 +09:00
Jacob
adf9f4bd63
feat: debug page (#493)
* fix: discordRPC route sorting

It wasn't alphabetical and it was annoying me

* feat: debug page

* move stuff into hooks where they should be

* fix: building
2026-03-06 01:25:03 -05:00
Wyvest
963e7044f2
add backups for art images 2026-03-04 08:11:13 -05:00
Wyvest
e40278366c
fix linux window bar 2026-03-04 01:51:03 -05:00
Wyvest
801ed74ace
Fix oneclient description 2026-03-04 01:41:42 -05:00
Wyvest
f7c8256729
try to fix AUR build? 2026-03-04 01:23:23 -05:00
Wyvest
16b1036ccb rename tag 2026-03-03 23:08:37 -05:00
Wyvest
a86e1b174d merge-releases script 2026-03-03 23:06:47 -05:00
Wyvest
1ad200b5dc kath 2026-03-03 20:56:47 -05:00
Jacob
fb5da05ad9
feat: better debug (#486)
* fix: tauri os plugin not being fully loaded

* feat: debug keybind

Bound to `CTRL+SHIFT+D` (and `ALT+F12`) and copies the debug info to the
clipboard

* refactor: __root.tx

Clean up a lot of code and move them into there own files

* feat: os distro in debug

* refactor: get_full_debug_info_parsed

* feat: made by info in settings

Also made it so that you can click on it to copy debug info

* fix: warning in oneclient/desktop/lib.rs

* refactor: copyDebugInfo

Moved it to the backend to later be used

* feat: log out debug info when oneclient launches

* `inDev` -> `In Dev`

* feat: toggle debug logging

* fix rust compiler
2026-03-03 20:46:11 -05:00
Wyvest
45db558013 Fix default categories always being selected
Fixes #489 #481
2026-03-03 20:30:55 -05:00
Wyvest
79e6824891 Bump to 1.0.3 2026-03-01 05:19:17 -05:00
Wyvest
7bae85eb70 fix rust lint 2026-03-01 05:18:37 -05:00
Wyvest
ca80e7d6b2 Fix memory setting not updating 2026-03-01 04:47:55 -05:00
Wyvest
55a7f572a6
Update changelog fetch URL to DataStorage repo 2026-02-26 10:49:49 -05:00
Wyvest
30bb161156
Delete docs/OneClient/CHANGE_LOG.md 2026-02-26 10:49:10 -05:00
Wyvest
1249bbf920 Update CHANGE_LOG.md 2026-02-26 00:25:00 -05:00
Wyvest
d90d9b928c 1.0.2 2026-02-26 00:17:50 -05:00
Wyvest
31f033cc87 fix settings saving 2026-02-26 00:17:07 -05:00
Wyvest
3e6f2361ee sanitize pre-launch/wrapper/post-launch command 2026-02-26 00:16:46 -05:00
Wyvest
44742fa21f port fixes from https://github.com/modrinth/code/pull/2369/ 2026-02-25 23:23:27 -05:00
Wyvest
aecfbad53a pass lint 2026-02-25 21:03:12 -05:00
Wyvest
e7bb7d6b70 Squashed commit of the following:
commit a782b683f30d127936115d0e31a70de1d8268694
Author: Wyvest <wyvestbusiness@gmail.com>
Date:   Wed Feb 25 20:56:05 2026 -0500

    remove debug logging

commit 640950728f480f1b8c7939a720124ea581c227af
Author: Wyvest <wyvestbusiness@gmail.com>
Date:   Wed Feb 25 14:40:03 2026 -0500

    add some ms account error parsing

commit 014e3ecb26d75934798592f5be8cfbb437c92263
Merge: 83a6a1e ecfb98b
Author: Wyvest <wyvestbusiness@gmail.com>
Date:   Wed Feb 25 13:34:16 2026 -0500

    Merge branch 'main' into account-logging

commit 83a6a1e233dd4f3a3de18aabf1c7beac268d1594
Author: Wyvest <wyvestbusiness@gmail.com>
Date:   Wed Feb 25 04:05:05 2026 -0500

    add a lot of debug logging for accounts
2026-02-25 20:56:21 -05:00
Wyvest
5b566a03a3 update copyright year
fixes #485
2026-02-25 15:42:14 -05:00
Wyvest
ecfb98b6db lint 4 2026-02-25 10:36:48 -05:00
Wyvest
ea5054395b lint pt 3 2026-02-25 09:48:08 -05:00
Wyvest
96b380db25 lint pt 2 2026-02-25 09:31:45 -05:00
Wyvest
c515d00da1 lint 2026-02-25 08:14:57 -05:00
Wyvest
6811f3c41a Update discord.rs 2026-02-25 08:08:28 -05:00
Wyvest
db81396aa6 add jvm args setting 2026-02-25 06:43:55 -05:00
Wyvest
6190411635 make discord rpc more stable 2026-02-25 06:36:31 -05:00
Wyvest
d6aba6ab45 search for mods 2026-02-25 06:20:39 -05:00
Wyvest
ca4cea2ffb incredible art update 2026-02-25 05:44:05 -05:00
Wyvest
8d1b69d7a0
Update CHANGE_LOG for version 1.0.1 2026-02-24 07:09:59 -05:00
Wyvest
1e277084c2 Update oneclient_release.yml 2026-02-24 05:45:41 -05:00
Wyvest
229710d30c re-add macos/linux 2026-02-24 04:41:52 -05:00
Wyvest
f8b7a26fe1 remove everything except windows (temp) 2026-02-24 04:40:45 -05:00
Wyvest
6c07a835b0 fix windows process check 2026-02-24 04:40:19 -05:00
Wyvest
c259c39807 Update oneclient_release.yml 2026-02-24 04:22:21 -05:00
Wyvest
8b6ca89a70 Update bindings.gen.ts 2026-02-24 04:16:50 -05:00
Wyvest
a3d193fb4b fix strange freezes 2026-02-24 04:11:50 -05:00
Wyvest
926a4fdf6f bump to 1.0.1 2026-02-24 00:42:48 -05:00
Wyvest
bd7fd8b812 umm 2026-02-24 00:36:25 -05:00
Wyvest
e25e313155
Implement Apple Developer Certificate handling in workflow
Added steps to import and verify Apple Developer Certificate for macOS builds.
2026-02-24 00:20:04 -05:00
Wyvest
a40a4ddba4 Update CHANGE_LOG.md 2026-02-23 22:56:48 -05:00
Wyvest
bd85c8cdef 1.0.0 2026-02-23 22:45:33 -05:00
Wyvest
87cb86943c Add bundle update checking/apply and API
Introduce full bundle update management: adds bundle_updates module with checking, apply flow, per-cluster locking, subscription inference, and apply helpers for additions/updates/removals (plus unit and e2e test scaffold). Exposes new IPC/API methods (download_package_from_bundle, update_bundle_packages, is_bundle_syncing) and integrates bundle tracking in desktop commands. Adds bundle DAO/entity and migrations to support bundle_packages and bundle_overrides, updates related package/DAO/modpack code, and minor frontend bindings/components/hooks to surface the new functionality. Also adds sea-orm as a dev-dependency for the desktop crate.

Co-Authored-By: Jacob <contact@kath.lol>
2026-02-23 22:36:24 -05:00
Wyvest
64b3ec5f90 Squashed commit of the following:
commit 9d138882dec56d9f823a22dd2284b0f264a6b35a
Author: Wyvest <wyvestbusiness@gmail.com>
Date:   Mon Feb 23 17:14:58 2026 -0500

    Watch cluster dirs, toggle & custom-bundle support

    Enable filesystem watches and add support for directory-based packages, toggleable packages, and custom bundles.

    Highlights:
    - Enable tauri-plugin-fs "watch" feature and add fs:allow-watch capability.
    - Frontend: add useAllClusterDirWatch hook to watch cluster folders and call bindings.core.syncCluster on changes; add useCustomBundle to synthesize a "[Custom]" bundle for installed-but-unbundled packages and surface it in mods/datapacks/resource-packs/shaders routes via ModList/ModCard changes.
    - ModCard/ModList: introduce toggle mode (useToggleMode) to treat some bundles as toggleable; implement UI toggle behavior and skip interactivity for directory-based bundles.
    - Bindings: expose syncCluster and togglePackage in bindings.gen for IPC usage.
    - Backend: extend sync_cluster to detect directories, register directory-based packages as local, and reconcile/unlink DB links for files removed from disk; support removing directories when unlinking packages.
    - Backend API: add toggle_package to rename package files (.disabled toggling), update central store path, and return the new enabled state; add Tauri commands for sync_cluster and toggle_package.

    Reason: allow resourcepacks/shaders/datapacks stored as directories to be recognized as local packages, provide automatic sync on filesystem changes, and let users enable/disable packages by toggling their filenames.

commit 1b100f7ed2242d21f3fbb6229745cddbd3199db7
Merge: 4ea4216 6a2352c
Author: Wyvest <wyvestbusiness@gmail.com>
Date:   Mon Feb 23 06:30:25 2026 -0500

    Merge branch 'oneclient/main' into bruhhh

commit 4ea42169ad430bc8b127f829c528c258f49b5a3a
Author: Wyvest <wyvestbusiness@gmail.com>
Date:   Wed Dec 31 03:48:13 2025 +0900

    Fix external mod tracking

commit cb456f4f6d50165d05091ae65c9611ebf956df07
Merge: 8628380 18c37f8
Author: Wyvest <wyvestbusiness@gmail.com>
Date:   Wed Dec 31 01:48:00 2025 +0900

    Merge branch 'oneclient/main' into bruhhh

commit 86283800ab265361540f4cf20e9a843cb2c4f5f0
Author: Wyvest <wyvestbusiness@gmail.com>
Date:   Sun Dec 28 18:19:57 2025 +0900

    h
2026-02-23 17:15:26 -05:00
Wyvest
6a2352c5dd Add support for resource packs + shaders + datapacks 2026-02-23 06:30:01 -05:00
Wyvest
3bcf55907c fix shaderpacks installing to wrong folder 2026-02-23 06:16:19 -05:00
Wyvest
fe0b1eed06 Extract bundle overrides before downloading mods 2026-02-23 06:10:46 -05:00
Wyvest
e745c75cc8 Fix overrides not being downloaded 2026-02-23 05:56:01 -05:00
Wyvest
b5d6beada0 Fix minor verison bug 2026-02-23 04:35:58 -05:00
Jacob
f1317a4ad1
fix: remove account popup spacing (#477)
Closes: https://github.com/Polyfrost/OneLauncher/issues/468
2026-01-11 08:06:31 -05:00
Jacob
9220ed023d
fix(OneClient): building (#476) 2026-01-11 08:05:22 -05:00
Jacob
29adbbc541
feat(OneClient-SettingsRow): optional settings icon (#475)
* feat(OneClient-SettingsRow): optional settings icon

* fix: building
2026-01-11 08:04:50 -05:00
Jacob
682a08765b
feat(OneClient-ChangeLog) (#474)
* feat(OneClient): change log

* feat(OneClient-ChangeLog)

* fix: CHANGE_LOG url

* fix: formatting
2026-01-11 08:03:52 -05:00
Jacob
7050a6b108
feat: nixos dev stuff (#470)
Co-authored-by: not a cow <104355555+not-a-cowfr@users.noreply.github.com>
2026-01-10 09:25:26 -05:00
Jacob
a513b62b0b
update shadow rs (#473) 2026-01-10 09:25:18 -05:00
Jacob
2d806df712
Merge pull request #471 from Kathund/fix/456
feat(OneClient-Onboarding): Version number
2026-01-09 10:50:45 -05:00
Jacob
fce0ea35a4 style: disable prettier 2026-01-09 10:50:22 -05:00
Wyvest
ea7e5e816b bump to 1.0.0-alpha.6 2026-01-02 00:51:38 +09:00
Wyvest
b85d5f6930 refresh accounts function 2026-01-02 00:44:40 +09:00
1386 changed files with 145431 additions and 69942 deletions

27
.cargo/config.toml Normal file
View file

@ -0,0 +1,27 @@
[target.x86_64-unknown-linux-gnu]
linker = "clang"
rustflags = ["-C", "link-arg=-fuse-ld=lld"]
[target.aarch64-apple-darwin]
linker = "aarch64-apple-darwin-clang"
rustflags = [
"-C", "link-arg=-fuse-ld=lld",
"-C", "link-arg=-isysroot",
"-C", "link-arg=/home/oiupoyt/.local/share/MacOSX11.3.sdk",
]
[target.x86_64-apple-darwin]
linker = "x86_64-apple-darwin-clang"
rustflags = [
"-C", "link-arg=-fuse-ld=lld",
"-C", "link-arg=-isysroot",
"-C", "link-arg=/home/oiupoyt/.local/share/MacOSX11.3.sdk",
]
# Linux and Macos by default have 8MB of stack storage.
# Windows has 1MB, it isn't enough, so it's changed to 8MB also.
[target.x86_64-pc-windows-msvc]
rustflags = ["-C", "link-arg=/STACK:8388608"]
[target.aarch64-pc-windows-msvc]
rustflags = ["-C", "link-arg=/STACK:8388608"]

View file

@ -1,34 +0,0 @@
{{#isMacOS}}
[target.x86_64-apple-darwin]
rustflags = ["-Csplit-debuginfo=unpacked"]
[target.aarch64-apple-darwin]
rustflags = ["-Csplit-debuginfo=unpacked"]
{{/isMacOS}}
{{#isWin}}
[target.'cfg(windows)']
rustflags = [
"-C",
"link-args=/STACK:16777220"
]
[target.x86_64-pc-windows-msvc]
{{#hasLLD}}
linker = "lld-link.exe"
{{/hasLLD}}
{{/isWin}}
{{#isLinux}}
[target.x86_64-unknown-linux-gnu]
{{#hasLLD}}
linker = "clang"
rustflags = ["-C", "link-args=-fuse-ld={{{linker}}}"]
{{/hasLLD}}
[target.aarch64-unknown-linux-gnu]
{{#hasLLD}}
linker = "clang"
rustflags = ["-C", "link-args=-fuse-ld={{{linker}}}"]
{{/hasLLD}}
{{/isLinux}}

View file

@ -1 +0,0 @@
cognitive-complexity-threshold = 30

View file

@ -1,3 +0,0 @@
# Used by sea-orm-cli
# DOES NOT AFFECT THE CODE
DATABASE_URL=sqlite:///path/to/user_data.db?mode=rwc

View file

@ -0,0 +1,122 @@
name: Release Binaries (Forgejo)
on:
push:
tags:
- 'v*'
workflow_dispatch:
inputs:
tag:
description: 'Release Tag (e.g. v2.8.0-c1)'
required: false
default: 'v2.8.0-c1'
type: string
permissions:
contents: write
env:
SQLX_OFFLINE: true
SQLX_OFFLINE_DIR: packages/oneclient_db/.sqlx
jobs:
build-linux:
runs-on: ubuntu-22.04
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
with:
targets: x86_64-unknown-linux-gnu
- name: Rust Cache
uses: Swatinem/rust-cache@v2
with:
key: x86_64-unknown-linux-gnu
cache-all-crates: true
- name: Install Linux build dependencies
run: |
sudo apt-get update
sudo apt-get install -y \
libwebkit2gtk-4.1-dev \
build-essential \
curl \
wget \
file \
libxdo-dev \
libssl-dev \
libayatana-appindicator3-dev \
librsvg2-dev \
libfontconfig1-dev \
libfreetype6-dev \
libgl1-mesa-dev \
libvulkan-dev \
libasound2-dev
- name: Install cargo-packager
run: cargo install cargo-packager --locked || true
- name: Build Release Binary
run: cargo build --release --bin oneclient_app --target x86_64-unknown-linux-gnu
- name: Package Application
run: cargo packager --release --target x86_64-unknown-linux-gnu --formats deb,appimage
continue-on-error: true
- name: Generate RPM Package (Linux)
run: |
cargo install cargo-generate-rpm --locked || true
cargo generate-rpm --target x86_64-unknown-linux-gnu -p oneclient_app || true
- name: Determine Release Tag
id: release_tag
run: |
if [[ "${{ github.ref_name }}" =~ ^v ]]; then
echo "tag=${{ github.ref_name }}" >> $GITHUB_OUTPUT
elif [ -n "${{ inputs.tag }}" ]; then
echo "tag=${{ inputs.tag }}" >> $GITHUB_OUTPUT
else
echo "tag=v2.8.0-c1" >> $GITHUB_OUTPUT
fi
- name: Publish Assets to Forgejo Release
run: |
TAG="${{ steps.release_tag.outputs.tag }}"
API_URL="${{ github.server_url }}/api/v1/repos/${{ github.repository }}"
echo "Connecting to $API_URL for release $TAG"
# 1. Fetch or create release on Forgejo
RELEASE_ID=$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" "$API_URL/releases/tags/$TAG" | jq -r '.id // empty')
if [ -z "$RELEASE_ID" ] || [ "$RELEASE_ID" = "null" ]; then
RESP=$(curl -s -X POST "$API_URL/releases" \
-H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
-H "Content-Type: application/json" \
-d "{\"tag_name\":\"$TAG\",\"name\":\"OneLauncher-Cracked $TAG\",\"draft\":false,\"prerelease\":false,\"target_commitish\":\"main\"}")
RELEASE_ID=$(echo "$RESP" | jq -r '.id // empty')
fi
echo "Target Release ID: $RELEASE_ID"
# 2. Upload generated packages
shopt -s nullglob
FILES=(
target/x86_64-unknown-linux-gnu/release/*.deb
target/x86_64-unknown-linux-gnu/release/*.AppImage
target/x86_64-unknown-linux-gnu/generate-rpm/*.rpm
target/release/*.deb
target/release/*.AppImage
target/generate-rpm/*.rpm
)
for f in "${FILES[@]}"; do
if [ -f "$f" ]; then
fname=$(basename "$f")
echo "Uploading asset $fname..."
curl -s -X POST "$API_URL/releases/$RELEASE_ID/assets?name=$fname" \
-H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
-F "attachment=@$f"
fi
done
echo "Release upload completed!"

View file

@ -1,4 +0,0 @@
code_review:
comment_severity_threshold: LOW
ignore_patterns:
- '**/*.gen.ts'

4
.gitattributes vendored
View file

@ -1,6 +1,2 @@
* text=auto eol=lf
Cargo.lock -diff linguist-generated
pnpm-lock.yaml -diff linguist-generated
packages/client/src/bindings.ts -diff linguist-generated=true
.github/actions/publish-artifacts/dist/index.js -diff linguist-generated=true
.github/actions/clippy/dist/index.js -diff linguist-generated=true

View file

@ -0,0 +1,47 @@
name: Install cargo tool
description: >
Install a cargo binary from a prebuilt release instead of compiling it from
source, and skip the work entirely when the Rust cache already restored it.
inputs:
tool:
description: Crate name providing the binary (e.g. cargo-packager)
required: true
version:
description: Exact version to install
required: true
runs:
using: composite
steps:
# Swatinem/rust-cache restores $CARGO_HOME/bin, so on a cache hit the tool is
# already here and `cargo install` would otherwise re-resolve it every run.
- name: Check for an already-installed ${{ inputs.tool }}
id: check
shell: bash
env:
TOOL: ${{ inputs.tool }}
VERSION: ${{ inputs.version }}
run: |
if command -v "$TOOL" > /dev/null 2>&1 \
&& cargo install --list | grep -qF "$TOOL v$VERSION:"; then
echo "Found $TOOL v$VERSION in \$CARGO_HOME/bin"
echo "installed=true" >> "$GITHUB_OUTPUT"
else
echo "installed=false" >> "$GITHUB_OUTPUT"
fi
- name: Setup cargo-binstall
if: steps.check.outputs.installed == 'false'
uses: cargo-bins/cargo-binstall@e00d2c94cc0067b77737821097a62d91c0301baa # v1.21.1
- name: Install ${{ inputs.tool }}
if: steps.check.outputs.installed == 'false'
shell: bash
env:
TOOL: ${{ inputs.tool }}
VERSION: ${{ inputs.version }}
run: |
# Prebuilt download takes seconds; building cargo-packager from source
# takes minutes on every leg of the matrix. Fall back to a source build
# so a missing prebuilt artifact can never break a release.
cargo binstall --no-confirm --force "${TOOL}@${VERSION}" \
|| cargo install "${TOOL}" --version "${VERSION}" --locked --force

View file

@ -1,14 +0,0 @@
name: Publish Artifacts
description: Publish Artifacts
inputs:
target:
description: Target triples for build artifact
profile:
description: '''debug'' or ''release'''
os:
description: '''darwin'', ''windows'', or ''linux'''
arch:
description: '''x86_64'' or ''aarch64'''
runs:
using: node20
main: dist/index.js

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

View file

@ -1,26 +0,0 @@
{
"name": "@onelauncher/action-publish-artifacts",
"version": "1.0.0-alpha.5",
"private": true,
"description": "Next-generation open source Minecraft launcher",
"license": "GPL-3.0-only",
"repository": {
"type": "git",
"url": "git@github.com:polyfrost/onelauncher",
"directory": ".github/actions/publish-artifacts"
},
"bugs": "https://github.com/polyfrost/onelauncher/issues",
"sideEffects": false,
"scripts": {
"build": "rimraf dist && ncc build src/index.ts -m -q --license ../../LICENSE"
},
"dependencies": {
"@actions/artifact": "^2.1.9",
"@actions/core": "^1.10.1",
"@actions/glob": "^0.5.0",
"@actions/io": "^1.1.3"
},
"devDependencies": {
"@vercel/ncc": "^0.38.2"
}
}

View file

@ -1,147 +0,0 @@
import process from 'node:process';
import client from '@actions/artifact';
import core from '@actions/core';
import glob from '@actions/glob';
import io from '@actions/io';
import { exists } from '@actions/io/lib/io-util';
type OS = 'darwin' | 'windows' | 'linux';
type Arch = 'x64' | 'arm64';
type Profile = 'debug' | 'release' | 'dev' | 'dev-debug';
interface Updater {
bundle: string;
bundleExt: string;
archiveExt: string;
}
interface TargetConfig {
bundle: string;
ext: string;
}
interface BuildTarget {
updater: false | Updater;
standalone: Array<TargetConfig>;
}
const osTargets = {
darwin: {
updater: {
bundle: 'macos',
bundleExt: 'app',
archiveExt: 'tar.gz',
},
standalone: [
{ ext: 'dmg', bundle: 'dmg' },
],
},
windows: {
updater: {
bundle: 'msi',
bundleExt: 'msi',
archiveExt: 'zip',
},
standalone: [
{ ext: 'msi', bundle: 'msi' },
],
},
linux: {
updater: false, // TODO
standalone: [
{ ext: 'deb', bundle: 'deb' },
],
},
} satisfies Record<OS, BuildTarget>;
const getInput = <T = string>(name: string): T => core.getInput(name) as T;
const os: OS = getInput('os');
const arch: Arch = getInput('arch');
const profile: Profile = getInput('profile');
const target = getInput('target');
const binaryName = getInput<string | undefined>('binary');
const targetDir = `target/${target}`;
const bundleDir = `${targetDir}/${profile}/bundle`;
const artifactsDir = '.artifacts';
const artifactBase = `OneLauncher-${os}-${arch}`;
const frontendBundle = 'apps/frontend/dist.tar.xz';
const updaterName = `OneLauncher-Updater-${os}-${arch}`;
const frontendName = `OneLauncher-Frontend-${os}-${arch}`;
const globFiles = async (pattern: string): Promise<Array<string>> => await (await glob.create(pattern)).glob();
async function uploadFrontend() {
if (!(await exists(frontendBundle))) {
console.error('frontend archive missing!');
return;
}
const artifactName = `${frontendName}.tar.xz`;
const artifactPath = `${artifactsDir}/${artifactName}`;
await io.cp(frontendBundle, artifactPath);
await client.uploadArtifact(artifactName, [artifactPath], artifactsDir);
}
async function uploadUpdater(updater: BuildTarget['updater']) {
if (!updater)
return;
const { bundle, bundleExt, archiveExt } = updater;
const fullExt = `${bundleExt}.${archiveExt}`;
const files = await globFiles(`${bundleDir}/${bundle}/*.${fullExt}*`);
const updaterPath = files.find(f => f.endsWith(fullExt));
if (!updaterPath)
throw new Error(`failed to find updater path in ${files.join(',')}`);
const artifactPath = `${artifactsDir}/${updaterName}.${archiveExt}`;
await io.cp(updaterPath, artifactPath);
await io.cp(`${updaterPath}.sig`, `${artifactPath}.sig`);
await client.uploadArtifact(updaterName, [artifactPath, `${artifactPath}.sig`], artifactsDir);
}
async function uploadStandalone({ bundle, ext }: TargetConfig) {
const files = await globFiles(`${bundleDir}/${bundle}/*.${ext}*`);
const standalonePath = files.find(f => f.endsWith(ext));
if (!standalonePath)
throw new Error(`failed to find standalone path in ${files.join(',')}`);
const artifactName = `${artifactBase}.${ext}`;
const artifactPath = `${artifactsDir}/${artifactName}`;
await io.cp(standalonePath, artifactPath, { recursive: true });
await client.uploadArtifact(artifactName, [artifactPath], artifactsDir);
}
async function uploadBinary() {
if (typeof binaryName !== 'string')
return;
const file = binaryName || 'onelauncher_gui';
const binaryPath = `${targetDir}/${file}`;
if (!(await exists(binaryPath))) {
console.error('binary missing!');
return;
}
await io.cp(binaryPath, `${artifactsDir}/${file}`);
await client.uploadArtifact(file, [`${artifactsDir}/${file}`], artifactsDir);
}
async function run() {
await io.mkdirP(artifactsDir);
const { updater, standalone } = osTargets[os];
await Promise.all([
uploadUpdater(updater),
uploadFrontend(),
uploadBinary(),
...standalone.map(uploadStandalone),
]);
}
run().catch((error) => {
console.error(error);
process.exit(1);
});

View file

@ -1,9 +0,0 @@
{
"extends": "../../../tsconfig.base.json",
"compilerOptions": {
"allowImportingTsExtensions": false,
"noEmit": true,
"skipLibCheck": true
},
"exclude": ["**/dist/**"]
}

View file

@ -1,69 +0,0 @@
name: Setup System and Rust
description: Setup System and Rust
inputs:
token:
description: GitHub token
required: false
default: ''
setup-arg:
description: Argument for the system setup script
required: false
default: ''
runs:
using: composite
steps:
- name: (macOS) Install bash@latest
shell: bash
if: ${{ runner.os == 'macOS' }}
run: brew install bash
- name: (Linux) Install mold@latest
shell: bash
if: ${{ runner.os == 'Linux' }}
run: |
curl -L# 'https://github.com/rui314/mold/releases/download/v2.33.0/mold-2.33.0-x86_64-linux.tar.gz' \
| sudo tar -xzf- -C /usr/local
- name: (Linux) Cleanup Runner
shell: bash
if: ${{ runner.os == 'Linux' }}
run: |
set -eux
if dpkg -l | grep i386; then
sudo apt-get purge --allow-remove-essential libc6-i386 ".*:i386" || true
sudo dpkg --remove-architecture i386 || true
fi
sudo apt-get remove libunwind-* || true
- name: (Linux/macOS) - Setup System
shell: bash
if: ${{ runner.os == 'Linux' || runner.os == 'macOS' }}
run: ./packages/scripts/setup.sh ${{ inputs.setup-arg }}
- name: (Windows) - Setup System
if: ${{ runner.os == 'Windows' }}
shell: powershell
run: ./packages/scripts/setup.ps1
- name: Setup pnpm
uses: ./.github/actions/setup-pnpm
with:
token: ${{ github.token }}
- name: Setup Shared Libraries
shell: bash
env:
GITHUB_TOKEN: ${{ inputs.token }}
NODE_ENV: debug
run: pnpm prep
- name: Override linuxdeploy version (fixes AppImage)
shell: bash
if: matrix.platform == 'ubuntu-22.04'
run: |
# Pin linuxdeploy version to prevent @tauri-apps/cli-linux-x64-gnu from pulling in an outdated version
TAURI_TOOLKIT_PATH="${XDG_CACHE_HOME:-$HOME/.cache}/tauri"
mkdir -p "$TAURI_TOOLKIT_PATH"
wget https://github.com/linuxdeploy/linuxdeploy/releases/download/1-alpha-20250213-2/linuxdeploy-x86_64.AppImage -O "$TAURI_TOOLKIT_PATH/linuxdeploy-x86_64.AppImage"
chmod +x "$TAURI_TOOLKIT_PATH/linuxdeploy-x86_64.AppImage"

View file

@ -1,29 +0,0 @@
name: Setup Pnpm
description: Setup Pnpm
inputs:
token:
description: GitHub token
required: false
default: ''
runs:
using: composite
steps:
- name: Install pnpm
uses: pnpm/action-setup@v4
with:
version: 10
- name: Install Node.js
uses: actions/setup-node@v4
with:
token: ${{ inputs.token }}
check-latest: true
node-version-file: .nvmrc
cache: pnpm
- name: Install dependencies
shell: ${{ runner.os == 'Windows' && 'powershell' || 'bash' }}
env:
NODE_ENV: debug
GITHUB_TOKEN: ${{ inputs.token }}
run: pnpm install --frozen-lockfile

View file

@ -1,42 +1,43 @@
name: Setup Rust
description: Setup Rust
description: Install the Rust toolchain (+ optional targets) and restore the build cache.
inputs:
target:
description: Toolchain target triple
description: Comma-separated extra target triples to install
required: false
default: ''
save-cache:
description: Whether or not to save the rust cache
description: Whether to save the Rust cache
required: false
default: 'false'
restore-cache:
description: Whether or not to restore the rust cache
description: Whether to restore the Rust cache
required: false
default: 'true'
cache-namespace:
description: >
Cache namespace. Workflows that compile with different profile settings
MUST use different namespaces - cargo fingerprints every dependency by its
profile, so sharing one would mean each workflow evicts artifacts the other
cannot use.
required: false
default: release-cache
runs:
using: composite
steps:
# - name: Install Rust Stable
# uses: dtolnay/rust-toolchain@7b1c307e0dcbda6122208f10795a713336a9b35a
# with:
# toolchain: stable
# targets: ${{ inputs.target }}
# components: clippy, rustfmt
- name: Install Rust Nightly
uses: dtolnay/rust-toolchain@master
- name: Install Rust (stable)
uses: dtolnay/rust-toolchain@4cda84d5c5c54efe2404f9d843567869ab1699d4 # stable branch @ 2026-07-16
with:
toolchain: nightly-2025-07-23
toolchain: stable
targets: ${{ inputs.target }}
components: cargo, clippy, rustc, rustfmt
- name: Cache Rust
if: ${{ inputs.restore-cache == 'true' }}
uses: Swatinem/rust-cache@master
uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2
with:
key: ${{ inputs.target }}
save-if: ${{ inputs.save-cache }}
shared-key: stable-cache
- name: Prepare Cargo
shell: bash
run: echo '{}' | npx -y mustache - .cargo/config.toml.mustache .cargo/config.toml
shared-key: ${{ inputs.cache-namespace }}
# Release builds are long and can fail late (signing, notarization,
# upload). Without this the whole compile is thrown away on those runs.
cache-on-failure: true

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

After

Width:  |  Height:  |  Size: 21 KiB

97
.github/workflows/aur_publish.yml vendored Normal file
View file

@ -0,0 +1,97 @@
name: Publish AUR Packages
on:
release:
types: [published]
workflow_dispatch:
inputs:
tag:
description: 'Release tag (e.g. oneclient-2.0.1)'
required: true
jobs:
resolve:
runs-on: ubuntu-latest
outputs:
version: ${{ steps.parse.outputs.version }}
steps:
- name: Parse release tag
id: parse
run: |
TAG="${{ github.event.release.tag_name || inputs.tag }}"
if [[ "$TAG" =~ ^oneclient-(.+)$ ]]; then
echo "version=${BASH_REMATCH[1]}" >> "$GITHUB_OUTPUT"
else
echo "::error::Tag '$TAG' does not match oneclient-*"
exit 1
fi
publish-source:
needs: resolve
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
- name: Compute source sha256
id: hash
env:
VERSION: ${{ needs.resolve.outputs.version }}
run: |
URL="https://github.com/${{ github.repository }}/archive/refs/tags/oneclient-${VERSION}.tar.gz"
SHA=$(curl -sL "$URL" | sha256sum | cut -d' ' -f1)
echo "sha256=$SHA" >> "$GITHUB_OUTPUT"
- name: Prepare PKGBUILD
env:
VERSION: ${{ needs.resolve.outputs.version }}
SHA256: ${{ steps.hash.outputs.sha256 }}
run: |
PKGBUILD="distribution/aur/oneclient/PKGBUILD"
sed -i "s/^pkgver=.*/pkgver=${VERSION}/" "$PKGBUILD"
sed -i "s/^pkgrel=.*/pkgrel=1/" "$PKGBUILD"
sed -i "s/^sha256sums=.*/sha256sums=('${SHA256}')/" "$PKGBUILD"
- name: Publish to AUR
uses: KSXGitHub/github-actions-deploy-aur@a97f56a8425a7a7f3b8c58607f769c69b089cadb # v3.0.1
with:
pkgname: oneclient
pkgbuild: distribution/aur/oneclient/PKGBUILD
commit_username: ${{ secrets.AUR_USERNAME }}
commit_email: ${{ secrets.AUR_EMAIL }}
ssh_private_key: ${{ secrets.AUR_SSH_PRIVATE_KEY }}
commit_message: "oneclient ${{ needs.resolve.outputs.version }}-1"
publish-bin:
needs: resolve
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
- name: Compute deb sha256
id: hash
env:
VERSION: ${{ needs.resolve.outputs.version }}
run: |
URL="https://github.com/${{ github.repository }}/releases/download/oneclient-${VERSION}/OneClient_${VERSION}_linux_x86_64.deb"
SHA=$(curl -sL "$URL" | sha256sum | cut -d' ' -f1)
echo "sha256=$SHA" >> "$GITHUB_OUTPUT"
- name: Prepare PKGBUILD
env:
VERSION: ${{ needs.resolve.outputs.version }}
SHA256: ${{ steps.hash.outputs.sha256 }}
run: |
PKGBUILD="distribution/aur/oneclient-bin/PKGBUILD"
sed -i "s/^pkgver=.*/pkgver=${VERSION}/" "$PKGBUILD"
sed -i "s/^pkgrel=.*/pkgrel=1/" "$PKGBUILD"
sed -i "s/^sha256sums=.*/sha256sums=('${SHA256}')/" "$PKGBUILD"
- name: Publish to AUR
uses: KSXGitHub/github-actions-deploy-aur@a97f56a8425a7a7f3b8c58607f769c69b089cadb # v3.0.1
with:
pkgname: oneclient-bin
pkgbuild: distribution/aur/oneclient-bin/PKGBUILD
commit_username: ${{ secrets.AUR_USERNAME }}
commit_email: ${{ secrets.AUR_EMAIL }}
ssh_private_key: ${{ secrets.AUR_SSH_PRIVATE_KEY }}
commit_message: "oneclient-bin ${{ needs.resolve.outputs.version }}-1"

35
.github/workflows/changelog_publish.yml vendored Normal file
View file

@ -0,0 +1,35 @@
name: Publish Changelog
on:
release:
types: [published, edited]
workflow_dispatch:
concurrency:
group: changelog-publish
cancel-in-progress: true
jobs:
publish:
runs-on: ubuntu-latest
permissions:
contents: write
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GH_REPO: ${{ github.repository }}
steps:
# The launcher reads releases/latest/download/changelog.json, so the
# snapshot of the last 50 release bodies always lives on the latest release.
- name: Build changelog.json from release bodies
run: |
gh api "repos/$GH_REPO/releases?per_page=50" --jq '[.[]
| select(.draft | not)
| select(.tag_name | startswith("oneclient-"))
| {
version: (.tag_name | ltrimstr("oneclient-")),
body: ((.body // "") | sub("^Automated release for OneClient [^\n]*\\s*"; ""))
}]' > changelog.json
jq -r '.[].version' changelog.json
- name: Upload to latest release
run: gh release upload "$(gh release view --json tagName -q .tagName)" changelog.json --clobber

23
.github/workflows/changeset_check.yml vendored Normal file
View file

@ -0,0 +1,23 @@
name: Changeset Check
on:
pull_request:
types: [opened, synchronize, reopened, labeled, unlabeled]
jobs:
changeset:
if: ${{ !contains(github.event.pull_request.labels.*.name, 'no changeset') }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
with:
fetch-depth: 0
- name: Require a change file
env:
BASE_REF: ${{ github.base_ref }}
run: |
if ! git diff --name-only --diff-filter=A "origin/$BASE_REF...HEAD" -- '.changeset/*.md' | grep -q .; then
echo "::error::Add a change file with \`knope document-change\`, or label the PR 'no changeset' if it isn't user-facing."
exit 1
fi

60
.github/workflows/copr_publish.yml vendored Normal file
View file

@ -0,0 +1,60 @@
name: Publish COPR Package
on:
release:
types: [published]
workflow_dispatch:
inputs:
tag:
description: 'Release tag (e.g. oneclient-2.0.1)'
required: true
jobs:
resolve:
runs-on: ubuntu-latest
outputs:
version: ${{ steps.parse.outputs.version }}
steps:
- name: Parse release tag
id: parse
run: |
TAG="${{ github.event.release.tag_name || inputs.tag }}"
if [[ "$TAG" =~ ^oneclient-(.+)$ ]]; then
echo "version=${BASH_REMATCH[1]}" >> "$GITHUB_OUTPUT"
else
echo "::error::Tag '$TAG' does not match oneclient-*"
exit 1
fi
publish-bin:
needs: resolve
runs-on: ubuntu-latest
container: fedora:latest
steps:
- name: Install tooling
run: dnf -y install rpm-build rpmdevtools copr-cli bsdtar git
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
- name: Prepare spec
env:
VERSION: ${{ needs.resolve.outputs.version }}
run: |
SPEC="distribution/copr/oneclient-bin.spec"
sed -i "s/^Version:.*/Version: ${VERSION}/" "$SPEC"
sed -i "s/^Release:.*/Release: 1%{?dist}/" "$SPEC"
- name: Build SRPM
run: |
rpmdev-setuptree
spectool -g -R distribution/copr/oneclient-bin.spec
rpmbuild -bs distribution/copr/oneclient-bin.spec
- name: Submit to COPR
env:
COPR_CONFIG_CONTENT: ${{ secrets.COPR_CONFIG }}
run: |
mkdir -p ~/.config
printf '%s' "$COPR_CONFIG_CONTENT" > ~/.config/copr
chmod 600 ~/.config/copr
copr-cli build polyfrost/OneClient ~/rpmbuild/SRPMS/oneclient-bin-*.src.rpm

View file

@ -1,51 +0,0 @@
name: Build and Lint
on:
push:
branches: [main]
pull_request:
types: [opened, synchronize]
merge_group:
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
es:
name: ES Checks
runs-on: ubuntu-22.04
timeout-minutes: 7
steps:
- name: Prepare Target
run: echo "PR_FETCH_DEPTH=$(( ${{ github.event.pull_request.commits }} + 1))" >> "${GITHUB_ENV}"
- name: Checkout
uses: actions/checkout@v4
- name: Setup Pnpm
uses: ./.github/actions/setup-pnpm
with:
token: ${{ secrets.GITHUB_TOKEN }}
- name: Linting
run: pnpm lint:es
clippy:
name: Rust Checks
runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Rust
uses: ./.github/actions/setup-rust
with:
save-cache: true
restore-cache: true
- name: Setup Packages
uses: ./.github/actions/setup-packages
- name: Run Clippy
run: cargo clippy --all-targets --all-features -- -D warnings

324
.github/workflows/oneclient_nightly.yml vendored Normal file
View file

@ -0,0 +1,324 @@
name: OneClient Nightly (Unsigned)
on:
push:
branches: [main]
workflow_dispatch:
concurrency:
group: oneclient-nightly-${{ github.ref }}
cancel-in-progress: true
# Nightlies are unsigned test builds, so they do not need the release profile's
# whole-program optimization - and that optimization is exactly what makes them
# slow. `lto = "fat"` + `codegen-units = 1` force a single-threaded re-optimization
# of the entire dependency graph at link time, on every run, which no cache can
# ever skip. Thin LTO keeps nearly all of the runtime benefit at a fraction of the
# link cost, and 16 codegen units lets the whole compile use every runner core.
#
# These are cargo's documented profile overrides, so `target/release` stays the
# output directory and every path below is unaffected. The shipped release binary
# is untouched: oneclient_release.yml still builds the fat-LTO profile from
# Cargo.toml. That difference is why the two workflows must not share a cache
# namespace - see `cache-namespace` on the Setup Rust step.
env:
CARGO_PROFILE_RELEASE_LTO: thin
CARGO_PROFILE_RELEASE_CODEGEN_UNITS: '16'
jobs:
build:
permissions:
contents: read
strategy:
fail-fast: false
matrix:
include:
- platform: macos-latest
target: aarch64-apple-darwin
os_key: darwin
arch: aarch64
formats: app,dmg
- platform: macos-latest
target: x86_64-apple-darwin
os_key: darwin
arch: x86_64
formats: app,dmg
macos_deployment_target: '10.14'
- platform: ubuntu-22.04
target: ''
os_key: linux
arch: x86_64
formats: deb,appimage
- platform: windows-latest
target: ''
os_key: windows
arch: x86_64
formats: nsis
runs-on: ${{ matrix.platform }}
steps:
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
- name: (macOS) Pin deployment target
if: matrix.macos_deployment_target != ''
shell: bash
run: echo "MACOSX_DEPLOYMENT_TARGET=${{ matrix.macos_deployment_target }}" >> "$GITHUB_ENV"
- name: Setup Rust
uses: ./.github/actions/setup-rust
with:
target: ${{ matrix.target }}
save-cache: true
restore-cache: true
# Separate namespace: nightly's thin-LTO dependency artifacts have
# different cargo fingerprints than the release workflow's fat-LTO ones,
# so a shared cache would just thrash between the two.
cache-namespace: nightly-cache
- name: (Linux) Install system dependencies
if: matrix.platform == 'ubuntu-22.04'
run: |
sudo apt-get update
sudo apt-get install -y --no-install-recommends \
build-essential cmake pkg-config clang python3 \
libfontconfig-dev libfreetype-dev \
libgl1-mesa-dev libx11-dev libxcursor-dev libxi-dev libxrandr-dev \
libxkbcommon-dev libxkbcommon-x11-dev libwayland-dev libdbus-1-dev \
libgtk-3-dev libayatana-appindicator3-dev \
libfuse2
- name: Install cargo-packager
uses: ./.github/actions/install-cargo-tool
with:
tool: cargo-packager
version: 0.11.8
- name: Build release binary
shell: bash
run: |
if [ -n "${{ matrix.target }}" ]; then
cargo build --release --bin oneclient_app --target ${{ matrix.target }}
else
cargo build --release --bin oneclient_app
fi
- name: (macOS) Verify deployment target
if: matrix.macos_deployment_target != ''
shell: bash
run: |
set -euo pipefail
bin="target/${{ matrix.target }}/release/oneclient_app"
minos="$(vtool -show-build "$bin" | awk '/minos/ {print $2; exit}')"
echo "linked minos=$minos, declared minimum=${{ matrix.macos_deployment_target }}"
if [ "$(printf '%s\n%s\n' "$minos" "${{ matrix.macos_deployment_target }}" | sort -V | tail -n1)" != "${{ matrix.macos_deployment_target }}" ]; then
echo "::error::Binary requires macOS $minos but the bundle advertises ${{ matrix.macos_deployment_target }}."
exit 1
fi
- name: (macOS) Compile app icon catalog
if: startsWith(matrix.platform, 'macos')
shell: bash
run: |
set -euo pipefail
out="packages/oneclient_app/icons/generated"
mkdir -p "$out"
xcrun actool packages/oneclient_app/icons/OneClient.icon \
--compile "$out" \
--app-icon OneClient \
--output-partial-info-plist "$out/partial.plist" \
--platform macosx \
--minimum-deployment-target 26.0 \
--errors --warnings --notices
rm -f "$out/OneClient.icns"
test -f "$out/Assets.car" || { echo "::error::actool produced no Assets.car"; exit 1; }
- name: (Windows) Stage app-local VC++ runtime
if: matrix.platform == 'windows-latest'
shell: bash
run: python3 distribution/windows/bundle-crt.py
- name: (Windows) Verify staged runtime is Microsoft-signed
if: matrix.platform == 'windows-latest'
shell: pwsh
run: |
$dlls = @(Get-ChildItem 'target/crt/*.dll')
if ($dlls.Count -eq 0) { Write-Error 'no CRT DLLs staged'; exit 1 }
foreach ($dll in $dlls) {
$sig = Get-AuthenticodeSignature $dll.FullName
Write-Host "$($dll.Name): $($sig.Status) $($sig.SignerCertificate.Subject)"
if ($sig.Status -ne 'Valid') {
Write-Error "$($dll.Name) signature is $($sig.Status), refusing to ship it"
exit 1
}
if ($sig.SignerCertificate.Subject -notmatch 'O=Microsoft Corporation') {
Write-Error "$($dll.Name) is not signed by Microsoft"
exit 1
}
}
- name: Package (unsigned)
shell: bash
env:
CI: 'true'
run: |
ARGS="--release --formats ${{ matrix.formats }}"
if [ -n "${{ matrix.target }}" ]; then
ARGS="$ARGS --target ${{ matrix.target }}"
fi
cargo packager $ARGS --verbose
- name: Resolve packager output dir
id: outdir
shell: bash
run: |
if [ -n "${{ matrix.target }}" ]; then
echo "dir=target/${{ matrix.target }}/release" >> "$GITHUB_OUTPUT"
else
echo "dir=target/release" >> "$GITHUB_OUTPUT"
fi
- name: (Linux) Install cargo-generate-rpm
if: matrix.platform == 'ubuntu-22.04'
uses: ./.github/actions/install-cargo-tool
with:
tool: cargo-generate-rpm
version: 0.21.0
- name: (Linux) Build RPM
if: matrix.platform == 'ubuntu-22.04'
shell: bash
run: |
set -euo pipefail
cp target/release/.cargo-packager/deb/*/data/usr/share/applications/oneclient_app.desktop \
target/release/oneclient_app.desktop
cargo generate-rpm -p packages/oneclient_app
cp target/generate-rpm/*.rpm "${{ steps.outdir.outputs.dir }}/"
- name: (Windows) Smoke-test installer layout
if: matrix.platform == 'windows-latest'
shell: pwsh
run: |
$ErrorActionPreference = 'Stop'
$dest = 'C:\oneclient-smoke'
Remove-Item -Recurse -Force $dest -ErrorAction SilentlyContinue
$exe = Resolve-Path (Get-ChildItem '${{ steps.outdir.outputs.dir }}/*-setup.exe')[0].FullName
# NSIS: /S is silent, /D= sets the install dir and must be the last arg.
$p = Start-Process -FilePath $exe -ArgumentList '/S', "/D=$dest" -Wait -PassThru
if ($p.ExitCode -ne 0) { Write-Error "installer exited $($p.ExitCode)"; exit 1 }
Write-Host '--- installed layout ---'
Get-ChildItem -Recurse $dest | ForEach-Object { Write-Host $_.FullName }
if (-not (Test-Path "$dest\oneclient_app.exe")) {
Write-Error "oneclient_app.exe is not at the root of $dest"
exit 1
}
foreach ($dll in @(Get-ChildItem 'target/crt/*.dll')) {
if (-not (Test-Path (Join-Path $dest $dll.Name))) {
Write-Error "$($dll.Name) did not land beside oneclient_app.exe - cargo-packager put resources elsewhere, so app-local CRT loading will not work"
exit 1
}
}
Write-Host "OK: $($(Get-ChildItem 'target/crt/*.dll').Count) CRT DLLs sit beside oneclient_app.exe"
# Upload debug info (dSYM / .dwp / .pdb produced by the release profile's
# split-debuginfo) to Sentry so nightly crash reports get real file/function/
# line stack traces instead of raw addresses. Runs on every main push, so
# each unique build's symbols land in Sentry (matched by debug-id). Skips
# silently unless SENTRY_AUTH_TOKEN secret + SENTRY_ORG/SENTRY_PROJECT vars
# are configured.
- name: Upload debug symbols to Sentry
shell: bash
env:
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
SENTRY_ORG: ${{ vars.SENTRY_ORG }}
SENTRY_PROJECT: ${{ vars.SENTRY_PROJECT }}
OUT_DIR: ${{ steps.outdir.outputs.dir }}
run: |
set -euo pipefail
if [ -z "${SENTRY_AUTH_TOKEN:-}" ] || [ -z "${SENTRY_ORG:-}" ] || [ -z "${SENTRY_PROJECT:-}" ]; then
echo "Sentry credentials not configured (need SENTRY_AUTH_TOKEN secret + SENTRY_ORG/SENTRY_PROJECT vars); skipping debug-symbol upload."
exit 0
fi
curl -sL https://sentry.io/get-cli/ | bash
export PATH="/usr/local/bin:$PATH"
SYMS="$(mktemp -d)"
shopt -s nullglob
for f in "$OUT_DIR"/oneclient_app "$OUT_DIR"/oneclient_app.exe \
"$OUT_DIR"/oneclient_app.pdb "$OUT_DIR"/*.dwp "$OUT_DIR"/*.dSYM; do
[ -e "$f" ] || continue
cp -R "$f" "$SYMS/"
done
sentry-cli debug-files upload --include-sources "$SYMS"
- name: Collect installers
id: collect
shell: bash
run: |
set -euo pipefail
shopt -s nullglob
mkdir -p dist
# Human-facing installers only; skip the .sig-paired updater bundles
# (no updater manifest is produced for unsigned nightly builds).
for f in "${{ steps.outdir.outputs.dir }}"/*.dmg \
"${{ steps.outdir.outputs.dir }}"/*.deb \
"${{ steps.outdir.outputs.dir }}"/*.rpm \
"${{ steps.outdir.outputs.dir }}"/*.AppImage; do
[ -e "$f" ] || continue
cp "$f" dist/
done
# Raw executable, renamed per platform so the unzipped uploads don't collide.
bin="${{ steps.outdir.outputs.dir }}/oneclient_app"
ext=""
[ -e "$bin.exe" ] && ext=".exe"
cp "$bin$ext" "dist/oneclient_app-${{ matrix.os_key }}-${{ matrix.arch }}$ext"
if [ -z "$(ls -A dist)" ]; then
echo "::error::No installers found in ${{ steps.outdir.outputs.dir }}"
exit 1
fi
ls -la dist
- name: Upload unsigned executable
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
path: dist/oneclient_app-${{ matrix.os_key }}-${{ matrix.arch }}*
archive: false
if-no-files-found: error
retention-days: 14
- name: (macOS) Upload unsigned dmg
if: matrix.os_key == 'darwin'
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
path: dist/*.dmg
archive: false
if-no-files-found: error
retention-days: 14
- name: (Linux) Upload unsigned deb
if: matrix.os_key == 'linux'
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
path: dist/*.deb
archive: false
if-no-files-found: error
retention-days: 14
- name: (Linux) Upload unsigned rpm
if: matrix.os_key == 'linux'
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
path: dist/*.rpm
archive: false
if-no-files-found: error
retention-days: 14
- name: (Linux) Upload unsigned AppImage
if: matrix.os_key == 'linux'
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
path: dist/*.AppImage
archive: false
if-no-files-found: error
retention-days: 14

View file

@ -1,55 +1,612 @@
name: OneClient Release Build
on:
workflow_dispatch:
# NOTE: CARGO_PACKAGER_SIGN_PRIVATE_KEY* are deliberately NOT declared at
# workflow level. Swatinem/rust-cache folds every `CARGO*`-prefixed environment
# variable into its cache key, so a workflow-level declaration gave this workflow
# a cache namespace that the nightly workflow could never populate - every
# release built the whole dependency graph from scratch. They are scoped to the
# individual steps that actually need them instead.
concurrency:
group: oneclient-release
cancel-in-progress: false
jobs:
publish-tauri:
prepare:
runs-on: ubuntu-latest
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 }}
outputs:
version: ${{ steps.version.outputs.version }}
tag: ${{ steps.version.outputs.tag }}
sha: ${{ steps.version.outputs.sha }}
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
with:
# Knope finds the commit (and so the PR author) that added each change file
fetch-depth: 0
- 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' || '' }}
restore-cache: false
- name: Install Knope
uses: ./.github/actions/install-cargo-tool
with:
tool: knope
version: 0.23.0
- name: Consume changesets
id: version
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
shell: bash
run: |
set -euo pipefail
read_version() {
sed -n -E '/^\[workspace\.package\]/,/^\[/ s/^version[[:space:]]*=[[:space:]]*"([^"]+)".*/\1/p' Cargo.toml | head -n1
}
# No change files means a re-run of a release whose version commit
# already landed, so carry on with the current version.
RELEASED=0
if compgen -G ".changeset/*.md" > /dev/null; then
knope prepare-release
cargo update --workspace --offline || cargo update --workspace
RELEASED=1
fi
VERSION="$(read_version)"
if [ -z "$VERSION" ]; then
echo "::error::Could not read version from [workspace.package] in Cargo.toml"
exit 1
fi
TAG="oneclient-$VERSION"
echo "Releasing OneClient $VERSION"
# Abort rather than clobber: a published release (or an existing tag,
# which only appears once a release is published) means this version
# already shipped. A *draft* is a previous failed/partial run of this
# same workflow, so reuse it.
if git ls-remote --exit-code --tags origin "refs/tags/$TAG" >/dev/null 2>&1; then
echo "::error::Tag $TAG already exists on origin - OneClient $VERSION has already been released. Add a change file with \`knope document-change\` first."
exit 1
fi
RELEASE_EXISTS=0
IS_DRAFT=""
if IS_DRAFT="$(gh release view "$TAG" --json isDraft -q .isDraft 2>/dev/null)"; then
RELEASE_EXISTS=1
fi
if [ "$RELEASE_EXISTS" = "1" ] && [ "$IS_DRAFT" != "true" ]; then
echo "::error::Release $TAG already exists and is published - refusing to overwrite OneClient $VERSION. Add a change file with \`knope document-change\` first."
exit 1
fi
# Commit only after the guards pass, so a rejected release does not
# leave a stray version bump on the branch.
if [ "$RELEASED" = "1" ]; then
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
git add -A Cargo.toml Cargo.lock .changeset CHANGELOG.md
git commit -m "chore: release $VERSION"
git push origin "HEAD:${GITHUB_REF_NAME}"
fi
SHA="$(git rev-parse HEAD)"
if [ "$RELEASE_EXISTS" = "1" ]; then
echo "Reusing existing draft release $TAG"
gh release edit "$TAG" --target "$SHA"
else
# The body is what the launcher's changelog page shows
awk -v heading="## $VERSION " '/^## /{p = index($0, heading) == 1; next} p' \
CHANGELOG.md > notes.md 2>/dev/null || true
if ! grep -q '[^[:space:]]' notes.md; then
echo "::error::No changelog entry for $VERSION. Add a change file with \`knope document-change\` first."
exit 1
fi
gh release create "$TAG" \
--draft \
--target "$SHA" \
--title "OneClient $VERSION" \
--notes-file notes.md
fi
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
echo "tag=$TAG" >> "$GITHUB_OUTPUT"
echo "sha=$SHA" >> "$GITHUB_OUTPUT"
# ---------------------------------------------------------------------------
package:
needs: prepare
permissions:
contents: write
# Required so SignPath can download the uploaded build artifact.
actions: read
strategy:
fail-fast: false
matrix:
include:
- platform: macos-latest
target: aarch64-apple-darwin
os_key: darwin
arch: aarch64
formats: app,dmg
- platform: macos-latest
target: x86_64-apple-darwin
os_key: darwin
arch: x86_64
formats: app,dmg
macos_deployment_target: '10.14'
- platform: ubuntu-22.04
target: ''
os_key: linux
arch: x86_64
formats: deb,appimage
- platform: windows-latest
target: ''
os_key: windows
arch: x86_64
formats: nsis
runs-on: ${{ matrix.platform }}
steps:
# Pin to the commit `prepare` resolved - after a release that is the version
# commit it just pushed, which github.sha would not point at.
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
with:
ref: ${{ needs.prepare.outputs.sha }}
- name: (macOS) Pin deployment target
if: matrix.macos_deployment_target != ''
shell: bash
run: echo "MACOSX_DEPLOYMENT_TARGET=${{ matrix.macos_deployment_target }}" >> "$GITHUB_ENV"
- name: Setup Rust
uses: ./.github/actions/setup-rust
with:
target: ${{ matrix.target }}
save-cache: true
restore-cache: true
- name: Add x86_64-apple-darwin target
if: contains(matrix.args, 'x86_64-apple-darwin')
run: rustup target add x86_64-apple-darwin
- name: (Linux) Install system dependencies
if: matrix.platform == 'ubuntu-22.04'
run: |
sudo apt-get update
sudo apt-get install -y --no-install-recommends \
build-essential cmake pkg-config clang python3 \
libfontconfig-dev libfreetype-dev \
libgl1-mesa-dev libx11-dev libxcursor-dev libxi-dev libxrandr-dev \
libxkbcommon-dev libxkbcommon-x11-dev libwayland-dev libdbus-1-dev \
libgtk-3-dev libayatana-appindicator3-dev \
libfuse2
- name: Setup Packages
uses: ./.github/actions/setup-packages
- name: Install cargo-packager
uses: ./.github/actions/install-cargo-tool
with:
tool: cargo-packager
version: 0.11.8
- uses: tauri-apps/tauri-action@dev
- name: Import Apple Developer certificate
if: startsWith(matrix.platform, 'macos')
env:
APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }}
APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }}
run: |
echo "$APPLE_CERTIFICATE" | base64 --decode > certificate.p12
security create-keychain -p "$KEYCHAIN_PASSWORD" build.keychain
security default-keychain -s build.keychain
security unlock-keychain -p "$KEYCHAIN_PASSWORD" build.keychain
security set-keychain-settings -t 3600 -u build.keychain
security import certificate.p12 -k build.keychain -P "$APPLE_CERTIFICATE_PASSWORD" -T /usr/bin/codesign
security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k "$KEYCHAIN_PASSWORD" build.keychain
CERT_ID=$(security find-identity -v -p codesigning build.keychain | awk -F'"' '/Developer ID Application/ {print $2; exit}')
if [ -z "$CERT_ID" ]; then
echo "::error::No Developer ID Application certificate found in keychain."
exit 1
fi
echo "APPLE_SIGNING_IDENTITY=$CERT_ID" >> "$GITHUB_ENV"
# cargo-packager only codesigns when `signing-identity` is present in the
# packager config; it does NOT read APPLE_SIGNING_IDENTITY. Inject it into
# the macOS metadata so signing + notarization actually run.
CERT_ID="$CERT_ID" python3 - <<'PY'
import os, re
p = "packages/oneclient_app/Cargo.toml"
s = open(p).read()
ident = os.environ["CERT_ID"]
hdr = "[package.metadata.packager.macos]"
assert hdr in s, "macos packager section not found"
if "signing-identity" not in s:
s = s.replace(hdr, f'{hdr}\nsigning-identity = "{ident}"', 1)
open(p, "w").write(s)
print(f"signing-identity set to: {ident}")
PY
- name: Build release binary
shell: bash
run: |
if [ -n "${{ matrix.target }}" ]; then
cargo build --release --bin oneclient_app --target ${{ matrix.target }}
else
cargo build --release --bin oneclient_app
fi
- name: (macOS) Verify deployment target
if: matrix.macos_deployment_target != ''
shell: bash
run: |
set -euo pipefail
bin="target/${{ matrix.target }}/release/oneclient_app"
minos="$(vtool -show-build "$bin" | awk '/minos/ {print $2; exit}')"
echo "linked minos=$minos, declared minimum=${{ matrix.macos_deployment_target }}"
if [ "$(printf '%s\n%s\n' "$minos" "${{ matrix.macos_deployment_target }}" | sort -V | tail -n1)" != "${{ matrix.macos_deployment_target }}" ]; then
echo "::error::Binary requires macOS $minos but the bundle advertises ${{ matrix.macos_deployment_target }}."
exit 1
fi
- name: (Windows) Upload unsigned app binary artifact
if: matrix.platform == 'windows-latest'
id: win_upload_unsigned_bin
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: oneclient-windows-binary-unsigned
path: target/release/oneclient_app.exe
- name: (Windows) Submit SignPath signing request for app binary
if: matrix.platform == 'windows-latest'
uses: signpath/github-action-submit-signing-request@ced31329c0317e779dad2eec2a7c3bb46ea1343e # v1.3
with:
api-token: ${{ secrets.SIGNPATH_API_TOKEN }}
organization-id: ${{ secrets.SIGNPATH_ORGANIZATION_ID }}
project-slug: onelauncher
signing-policy-slug: release-signing
artifact-configuration-slug: onelauncher-binary
github-artifact-id: ${{ steps.win_upload_unsigned_bin.outputs.artifact-id }}
wait-for-completion: true
output-artifact-directory: signed-bin
- name: (Windows) Swap in signed app binary
if: matrix.platform == 'windows-latest'
shell: bash
run: |
set -euo pipefail
signed="signed-bin/oneclient_app.exe"
if [ ! -e "$signed" ]; then
echo "::error::SignPath did not return signed-bin/oneclient_app.exe"
ls -R signed-bin || true
exit 1
fi
cp "$signed" target/release/oneclient_app.exe
- name: (Windows) Verify app binary is signed
if: matrix.platform == 'windows-latest'
shell: pwsh
run: |
$sig = Get-AuthenticodeSignature 'target/release/oneclient_app.exe'
Write-Host "Authenticode status: $($sig.Status)"
Write-Host "Signer: $($sig.SignerCertificate.Subject)"
if ($sig.Status -eq 'NotSigned') {
Write-Error 'oneclient_app.exe carries no Authenticode signature'
exit 1
}
- name: (macOS) Compile app icon catalog
if: startsWith(matrix.platform, 'macos')
shell: bash
run: |
set -euo pipefail
out="packages/oneclient_app/icons/generated"
mkdir -p "$out"
xcrun actool packages/oneclient_app/icons/OneClient.icon \
--compile "$out" \
--app-icon OneClient \
--output-partial-info-plist "$out/partial.plist" \
--platform macosx \
--minimum-deployment-target 26.0 \
--errors --warnings --notices
rm -f "$out/OneClient.icns"
test -f "$out/Assets.car" || { echo "::error::actool produced no Assets.car"; exit 1; }
- name: (Windows) Stage app-local VC++ runtime
if: matrix.platform == 'windows-latest'
shell: bash
run: python3 distribution/windows/bundle-crt.py
- name: (Windows) Verify staged runtime is Microsoft-signed
if: matrix.platform == 'windows-latest'
shell: pwsh
run: |
$dlls = @(Get-ChildItem 'target/crt/*.dll')
if ($dlls.Count -eq 0) { Write-Error 'no CRT DLLs staged'; exit 1 }
foreach ($dll in $dlls) {
$sig = Get-AuthenticodeSignature $dll.FullName
Write-Host "$($dll.Name): $($sig.Status) $($sig.SignerCertificate.Subject)"
if ($sig.Status -ne 'Valid') {
Write-Error "$($dll.Name) signature is $($sig.Status), refusing to ship it"
exit 1
}
if ($sig.SignerCertificate.Subject -notmatch 'O=Microsoft Corporation') {
Write-Error "$($dll.Name) is not signed by Microsoft"
exit 1
}
}
- name: Package
shell: bash
env:
APPLE_ID: ${{ secrets.APPLE_ID }}
APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }}
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
CI: ${{ startsWith(matrix.platform, 'macos') && 'false' || 'true' }}
CARGO_PACKAGER_SIGN_PRIVATE_KEY: ${{ secrets.CARGO_PACKAGER_SIGN_PRIVATE_KEY }}
CARGO_PACKAGER_SIGN_PRIVATE_KEY_PASSWORD: ${{ secrets.CARGO_PACKAGER_SIGN_PRIVATE_KEY_PASSWORD }}
run: |
ARGS="--release --formats ${{ matrix.formats }}"
if [ -n "${{ matrix.target }}" ]; then
ARGS="$ARGS --target ${{ matrix.target }}"
fi
cargo packager $ARGS --verbose
- name: Resolve packager output dir
id: outdir
shell: bash
run: |
if [ -n "${{ matrix.target }}" ]; then
echo "dir=target/${{ matrix.target }}/release" >> "$GITHUB_OUTPUT"
else
echo "dir=target/release" >> "$GITHUB_OUTPUT"
fi
- name: (Linux) Install cargo-generate-rpm
if: matrix.platform == 'ubuntu-22.04'
uses: ./.github/actions/install-cargo-tool
with:
tool: cargo-generate-rpm
version: 0.21.0
- name: (Linux) Build RPM
if: matrix.platform == 'ubuntu-22.04'
shell: bash
run: |
set -euo pipefail
cp target/release/.cargo-packager/deb/*/data/usr/share/applications/oneclient_app.desktop \
target/release/oneclient_app.desktop
cargo generate-rpm -p packages/oneclient_app
cp target/generate-rpm/*.rpm "${{ steps.outdir.outputs.dir }}/"
# Upload debug info (dSYM / .dwp / .pdb produced by the release profile's
# split-debuginfo) to Sentry so crash reports get real file/function/line
# stack traces instead of raw addresses. Skips silently unless the repo has
# a SENTRY_AUTH_TOKEN secret plus SENTRY_ORG / SENTRY_PROJECT variables.
- name: Upload debug symbols to Sentry
shell: bash
env:
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
SENTRY_ORG: ${{ vars.SENTRY_ORG }}
SENTRY_PROJECT: ${{ vars.SENTRY_PROJECT }}
OUT_DIR: ${{ steps.outdir.outputs.dir }}
run: |
set -euo pipefail
if [ -z "${SENTRY_AUTH_TOKEN:-}" ] || [ -z "${SENTRY_ORG:-}" ] || [ -z "${SENTRY_PROJECT:-}" ]; then
echo "Sentry credentials not configured (need SENTRY_AUTH_TOKEN secret + SENTRY_ORG/SENTRY_PROJECT vars); skipping debug-symbol upload."
exit 0
fi
curl -sL https://sentry.io/get-cli/ | bash
export PATH="/usr/local/bin:$PATH"
SYMS="$(mktemp -d)"
shopt -s nullglob
for f in "$OUT_DIR"/oneclient_app "$OUT_DIR"/oneclient_app.exe \
"$OUT_DIR"/oneclient_app.pdb "$OUT_DIR"/*.dwp "$OUT_DIR"/*.dSYM; do
[ -e "$f" ] || continue
cp -R "$f" "$SYMS/"
done
sentry-cli debug-files upload --include-sources "$SYMS"
- name: (Windows) Locate installer
if: matrix.platform == 'windows-latest'
id: win_installer
shell: bash
run: echo "path=$(ls ${{ steps.outdir.outputs.dir }}/*-setup.exe | head -n1)" >> "$GITHUB_OUTPUT"
- name: (Windows) Smoke-test installer layout
if: matrix.platform == 'windows-latest'
shell: pwsh
run: |
$ErrorActionPreference = 'Stop'
$dest = 'C:\oneclient-smoke'
Remove-Item -Recurse -Force $dest -ErrorAction SilentlyContinue
$exe = Resolve-Path '${{ steps.win_installer.outputs.path }}'
# NSIS: /S is silent, /D= sets the install dir and must be the last arg.
$p = Start-Process -FilePath $exe -ArgumentList '/S', "/D=$dest" -Wait -PassThru
if ($p.ExitCode -ne 0) { Write-Error "installer exited $($p.ExitCode)"; exit 1 }
Write-Host '--- installed layout ---'
Get-ChildItem -Recurse $dest | ForEach-Object { Write-Host $_.FullName }
if (-not (Test-Path "$dest\oneclient_app.exe")) {
Write-Error "oneclient_app.exe is not at the root of $dest"
exit 1
}
foreach ($dll in @(Get-ChildItem 'target/crt/*.dll')) {
if (-not (Test-Path (Join-Path $dest $dll.Name))) {
Write-Error "$($dll.Name) did not land beside oneclient_app.exe - cargo-packager put resources elsewhere, so app-local CRT loading will not work"
exit 1
}
}
Write-Host "OK: $($(Get-ChildItem 'target/crt/*.dll').Count) CRT DLLs sit beside oneclient_app.exe"
- name: (Windows) Upload unsigned installer artifact
if: matrix.platform == 'windows-latest'
id: win_upload_unsigned
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: oneclient-windows-installer-unsigned
path: ${{ steps.win_installer.outputs.path }}
- name: (Windows) Submit SignPath signing request
if: matrix.platform == 'windows-latest'
uses: signpath/github-action-submit-signing-request@ced31329c0317e779dad2eec2a7c3bb46ea1343e # v1.3
with:
api-token: ${{ secrets.SIGNPATH_API_TOKEN }}
organization-id: ${{ secrets.SIGNPATH_ORGANIZATION_ID }}
project-slug: onelauncher
signing-policy-slug: release-signing
artifact-configuration-slug: onelauncher-installer
github-artifact-id: ${{ steps.win_upload_unsigned.outputs.artifact-id }}
wait-for-completion: true
output-artifact-directory: signed
- name: (Windows) Replace installer with signed one + recompute updater sig
if: matrix.platform == 'windows-latest'
shell: bash
env:
CARGO_PACKAGER_SIGN_PRIVATE_KEY: ${{ secrets.CARGO_PACKAGER_SIGN_PRIVATE_KEY }}
CARGO_PACKAGER_SIGN_PRIVATE_KEY_PASSWORD: ${{ secrets.CARGO_PACKAGER_SIGN_PRIVATE_KEY_PASSWORD }}
run: |
signed="$(ls signed/*-setup.exe | head -n1)"
# Overwrite the unsigned installer in the packager out dir with the signed exe.
cp "$signed" "${{ steps.win_installer.outputs.path }}"
# Recompute the updater signature over the SIGNED exe.
cargo packager signer sign \
--private-key "$CARGO_PACKAGER_SIGN_PRIVATE_KEY" \
--password "$CARGO_PACKAGER_SIGN_PRIVATE_KEY_PASSWORD" \
"${{ steps.win_installer.outputs.path }}"
- name: Upload installers and build manifest fragment
shell: bash
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
TAG: ${{ needs.prepare.outputs.tag }}
OUT_DIR: ${{ steps.outdir.outputs.dir }}
OS_KEY: ${{ matrix.os_key }}
ARCH: ${{ matrix.arch }}
VERSION: ${{ needs.prepare.outputs.version }}
run: |
set -euo pipefail
shopt -s nullglob
# Identify the single updater artifact for this platform (the file with a
# sibling .sig): -setup.exe (nsis), *.app.tar.gz (app), *.AppImage (appimage).
# NOTE: nullglob is on, so an unmatched glob expands to nothing. Use arrays
# rather than `ls <glob> | head` - the latter falls back to listing the cwd
# when nothing matches, silently picking an unrelated file.
fmt=""; ext=""; matches=()
case "$OS_KEY" in
windows) matches=("$OUT_DIR"/*-setup.exe); fmt="nsis"; ext="exe" ;;
darwin) matches=("$OUT_DIR"/*.app.tar.gz); fmt="app"; ext="app.tar.gz" ;;
linux) matches=("$OUT_DIR"/*.AppImage); fmt="appimage"; ext="AppImage" ;;
esac
updater_file="${matches[0]:-}"
if [ -z "$updater_file" ]; then
echo "::error::No updater artifact found in $OUT_DIR for $OS_KEY"
exit 1
fi
# The updater bundle isn't always arch-tagged by cargo-packager, so the two
# macOS legs would collide on the release. Rename the updater artifact + its .sig
# to an arch-unique name before upload, and point the manifest at that name.
unique="OneClient_${VERSION}_${OS_KEY}_${ARCH}.${ext}"
cp "$updater_file" "$OUT_DIR/$unique"
cp "$updater_file.sig" "$OUT_DIR/$unique.sig"
# cargo-packager names the .deb after the binary (oneclient_app_<ver>_amd64.deb).
# Rename it to the same OneClient_<ver>_<os>_<arch> scheme as the other assets so
# the AUR oneclient-bin package can point at a stable, predictable URL.
deb_unique=""
deb_matches=("$OUT_DIR"/*.deb)
if [ -e "${deb_matches[0]:-}" ]; then
deb_unique="OneClient_${VERSION}_${OS_KEY}_${ARCH}.deb"
cp "${deb_matches[0]}" "$OUT_DIR/$deb_unique"
fi
# Same treatment for the .rpm (cargo-generate-rpm names it
# oneclient_app-<ver>-1.x86_64.rpm).
rpm_unique=""
rpm_matches=("$OUT_DIR"/*.rpm)
if [ -e "${rpm_matches[0]:-}" ]; then
rpm_unique="OneClient_${VERSION}_${OS_KEY}_${ARCH}.rpm"
cp "${rpm_matches[0]}" "$OUT_DIR/$rpm_unique"
fi
# Upload human-facing installers (dmg/renamed deb/renamed rpm/AppImage/signed exe) +
# the renamed updater bundle and its .sig. Skip the un-renamed updater bundle to avoid clashes.
for f in "$OUT_DIR"/*.dmg ${deb_unique:+"$OUT_DIR/$deb_unique"} ${rpm_unique:+"$OUT_DIR/$rpm_unique"} "$OUT_DIR"/*.AppImage "$OUT_DIR"/*-setup.exe "$OUT_DIR/$unique" "$OUT_DIR/$unique.sig"; do
[ -e "$f" ] || continue
gh release upload "$TAG" "$f" --clobber
done
base="$unique"
mkdir -p fragments
case "$OS_KEY" in
darwin) KEYS="darwin-${ARCH} macos-${ARCH}" ;;
*) KEYS="${OS_KEY}-${ARCH}" ;;
esac
SIG="$(cat "$updater_file.sig")" \
URL="https://github.com/${GITHUB_REPOSITORY}/releases/download/${TAG}/${base}" \
FMT="$fmt" \
KEYS="$KEYS" \
FRAG_NAME="${OS_KEY}-${ARCH}" \
python3 - <<'PY'
import json, os
entry = {
"signature": os.environ["SIG"],
"url": os.environ["URL"],
"format": os.environ["FMT"],
}
frag = {key: entry for key in os.environ["KEYS"].split()}
with open(f"fragments/{os.environ['FRAG_NAME']}.json", "w") as f:
json.dump(frag, f)
PY
- name: Upload manifest fragment
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
tagName: oneclient-__VERSION__
releaseName: OneClient __VERSION__
releaseDraft: true
prerelease: ${{ startsWith(github.ref, 'refs/tags/v') && contains(github.ref, '-alpha') || false }}
tauriScript: pnpm -w oneclient:desktop
args: ${{ matrix.args }}
projectPath: ./apps/oneclient/desktop/
uploadUpdaterJson: true
name: manifest-${{ matrix.os_key }}-${{ matrix.arch }}
path: fragments/*.json
manifest:
needs: [prepare, package]
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Download all manifest fragments
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
with:
pattern: manifest-*
path: fragments
merge-multiple: true
- name: Assemble latest.json
env:
VERSION: ${{ needs.prepare.outputs.version }}
run: |
python3 - <<'PY'
import json, glob, os, datetime
platforms = {}
for path in glob.glob("fragments/*.json"):
with open(path) as f:
platforms.update(json.load(f))
manifest = {
"version": os.environ["VERSION"],
"pub_date": datetime.datetime.now(datetime.timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ"),
"platforms": platforms,
}
with open("latest.json", "w") as f:
json.dump(manifest, f, indent=2)
print(json.dumps(manifest, indent=2))
PY
- name: Upload latest.json to release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
TAG: ${{ needs.prepare.outputs.tag }}
run: gh release upload "$TAG" latest.json --clobber --repo "$GITHUB_REPOSITORY"

View file

@ -1,48 +0,0 @@
name: OneLauncher 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@dev
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tagName: onelauncher-__VERSION__
releaseName: OneLauncher __VERSION__
releaseDraft: true
prerelease: ${{ startsWith(github.ref, 'refs/tags/v') && contains(github.ref, '-alpha') || false }}
tauriScript: pnpm -w onelauncher:desktop
args: ${{ matrix.args }}
projectPath: ./apps/onelauncher/desktop/

171
.github/workflows/release.yml vendored Normal file
View file

@ -0,0 +1,171 @@
name: Release Multiplatform Binaries
on:
push:
tags:
- 'v*'
workflow_dispatch:
inputs:
tag:
description: 'Release Tag (e.g. v2.5.1)'
required: false
default: 'v2.5.1-c3'
type: string
permissions:
contents: write
env:
SQLX_OFFLINE: true
SQLX_OFFLINE_DIR: packages/oneclient_db/.sqlx
jobs:
build:
strategy:
fail-fast: false
matrix:
include:
# Linux x86_64
- os: ubuntu-22.04
target: x86_64-unknown-linux-gnu
name: linux-x86_64
formats: deb,appimage
# Windows x86_64
- os: windows-latest
target: x86_64-pc-windows-msvc
name: windows-x86_64
formats: nsis
# macOS Apple Silicon
- os: macos-14
target: aarch64-apple-darwin
name: macos-arm64
formats: dmg,app
# macOS Intel (cross-compiled on macos-14)
- os: macos-14
target: x86_64-apple-darwin
name: macos-x86_64
formats: dmg,app
runs-on: ${{ matrix.os }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.target }}
- name: Rust Cache
uses: Swatinem/rust-cache@v2
with:
key: ${{ matrix.target }}
cache-all-crates: true
- name: Install Linux build dependencies
if: runner.os == 'Linux'
run: |
sudo apt-get update
sudo apt-get install -y \
libwebkit2gtk-4.1-dev \
build-essential \
curl \
wget \
file \
libxdo-dev \
libssl-dev \
libayatana-appindicator3-dev \
librsvg2-dev \
libfontconfig1-dev \
libfreetype6-dev \
libgl1-mesa-dev \
libvulkan-dev \
libasound2-dev
- name: Install cargo-packager
run: cargo install cargo-packager --locked || true
- name: Build Release Binary
run: cargo build --release --bin oneclient_app --target ${{ matrix.target }}
- name: Package Application
run: cargo packager --release --target ${{ matrix.target }} --formats ${{ matrix.formats }}
continue-on-error: true
- name: Generate RPM Package (Linux)
if: runner.os == 'Linux'
run: |
cargo install cargo-generate-rpm --locked || true
cargo generate-rpm --target ${{ matrix.target }} -p oneclient_app || true
- name: Upload Build Artifacts
uses: actions/upload-artifact@v4
with:
name: binaries-${{ matrix.name }}
if-no-files-found: warn
path: |
target/${{ matrix.target }}/release/*.deb
target/${{ matrix.target }}/release/*.AppImage
target/${{ matrix.target }}/release/*.dmg
target/${{ matrix.target }}/release/*-setup.exe
target/${{ matrix.target }}/generate-rpm/*.rpm
target/generate-rpm/*.rpm
target/release/*.deb
target/release/*.AppImage
target/release/*.dmg
target/release/*-setup.exe
create-release:
needs: build
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch'
steps:
- name: Download all artifacts
uses: actions/download-artifact@v4
with:
path: ./artifacts
merge-multiple: true
- name: Determine Release Tag
id: release_tag
run: |
if [[ "${{ github.ref_name }}" =~ ^v ]]; then
echo "tag=${{ github.ref_name }}" >> $GITHUB_OUTPUT
elif [ -n "${{ inputs.tag }}" ]; then
echo "tag=${{ inputs.tag }}" >> $GITHUB_OUTPUT
else
echo "tag=v2.5.1-c3" >> $GITHUB_OUTPUT
fi
- name: Clean up previous release if exists
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
gh release delete "${{ steps.release_tag.outputs.tag }}" -y --cleanup-tag=false || true
- name: Publish GitHub Release
uses: softprops/action-gh-release@v2
with:
files: ./artifacts/**/*
tag_name: ${{ steps.release_tag.outputs.tag }}
name: "OneLauncher-Cracked ${{ steps.release_tag.outputs.tag }}"
body: |
### What's New in ${{ steps.release_tag.outputs.tag }}
- **Complete Multiplayer Server Skin Support**: Native integration with client-side `OfflineSkins Reloaded` for Fabric 1.21.11, allowing skins to render directly on cracked multiplayer servers (e.g. `alwto.net`) when the server transmits empty player profiles.
- **Proper Isolated Offline Skin System (Authlib-Injector)**: Embedded, zero-network-dependency Authlib-Injector session provider with RSA signature verification. Your skin is attached strictly and exclusively to your player profile, completely eliminating the bug where other players or NPCs on offline servers would receive your skin.
- **Dynamic Version Compatibility**: Automatically gates offline skin mod integration strictly to matching versions, while Authlib-Injector handles clean, zero-dependency offline profile signing across all Minecraft versions.
- **Purged Incompatible Mods**: Completely cleaned and prevented CustomSkinLoader crashes on modern Fabric Loader (0.17+) and Sponge Mixin 0.8.7.
- **Vanilla & Multi-server Integrity**: Other offline players remain authentic vanilla Steve/Alex, while online players on hybrid servers display their legitimate Mojang skins via transparent caching session proxying.
- **Automatic Legacy Cleanup**: Restores pristine `client.jar` and removes stale skin resource packs from `options.txt` on launch.
- **Guaranteed Offline Game Launch**: Direct offline launching with 0 Microsoft accounts required.
- **In-Launcher 3D Skin Changer**: Full 3D skin preview, slim/classic arm model toggle, local file import, and online skin downloads.
- **Rebased on Upstream 2.5.1**: All upstream 2.5.1 features, hook error reporting, and metadata self-healing.
draft: false
prerelease: false
generate_release_notes: false
make_latest: true
fail_on_unmatched_files: false

522
.gitignore vendored
View file

@ -1,519 +1,7 @@
dev.db
dev.db-journal
.cargo/config.toml
.deps/*
vite.config.ts.timestamp*
# Created by https://www.toptal.com/developers/gitignore/api/node,rust,yarn,linux,macos,windows,intellij+all,rust-analyzer,visualstudiocode,intellij,intellij+iml,git
# Edit at https://www.toptal.com/developers/gitignore?templates=node,rust,yarn,linux,macos,windows,intellij+all,rust-analyzer,visualstudiocode,intellij,intellij+iml,git
### Git ###
# Created by git for backups. To disable backups in Git:
# $ git config --global mergetool.keepBackup false
*.orig
# Created by git when using merge tools for conflicts
*.BACKUP.*
*.BASE.*
*.LOCAL.*
*.REMOTE.*
*_BACKUP_*.txt
*_BASE_*.txt
*_LOCAL_*.txt
*_REMOTE_*.txt
### Intellij ###
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
# User-specific stuff
.idea/**/workspace.xml
.idea/**/tasks.xml
.idea/**/usage.statistics.xml
.idea/**/dictionaries
.idea/**/shelf
# AWS User-specific
.idea/**/aws.xml
# Generated files
.idea/**/contentModel.xml
# Sensitive or high-churn files
.idea/**/dataSources/
.idea/**/dataSources.ids
.idea/**/dataSources.local.xml
.idea/**/sqlDataSources.xml
.idea/**/dynamic.xml
.idea/**/uiDesigner.xml
.idea/**/dbnavigator.xml
# Gradle
.idea/**/gradle.xml
.idea/**/libraries
# Gradle and Maven with auto-import
# When using Gradle or Maven with auto-import, you should exclude module files,
# since they will be recreated, and may cause churn. Uncomment if using
# auto-import.
# .idea/artifacts
# .idea/compiler.xml
# .idea/jarRepositories.xml
# .idea/modules.xml
# .idea/*.iml
# .idea/modules
# *.iml
# *.ipr
# CMake
cmake-build-*/
# Mongo Explorer plugin
.idea/**/mongoSettings.xml
# File-based project format
*.iws
# IntelliJ
out/
# mpeltonen/sbt-idea plugin
.idea_modules/
# JIRA plugin
atlassian-ide-plugin.xml
# Cursive Clojure plugin
.idea/replstate.xml
# SonarLint plugin
.idea/sonarlint/
# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties
# Editor-based Rest Client
.idea/httpRequests
# Android studio 3.1+ serialized cache file
.idea/caches/build_file_checksums.ser
### Intellij Patch ###
# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721
# *.iml
# modules.xml
# .idea/misc.xml
# *.ipr
# Sonarlint plugin
# https://plugins.jetbrains.com/plugin/7973-sonarlint
.idea/**/sonarlint/
# SonarQube Plugin
# https://plugins.jetbrains.com/plugin/7238-sonarqube-community-plugin
.idea/**/sonarIssues.xml
# Markdown Navigator plugin
# https://plugins.jetbrains.com/plugin/7896-markdown-navigator-enhanced
.idea/**/markdown-navigator.xml
.idea/**/markdown-navigator-enh.xml
.idea/**/markdown-navigator/
# Cache file creation bug
# See https://youtrack.jetbrains.com/issue/JBR-2257
.idea/$CACHE_FILE$
# CodeStream plugin
# https://plugins.jetbrains.com/plugin/12206-codestream
.idea/codestream.xml
# Azure Toolkit for IntelliJ plugin
# https://plugins.jetbrains.com/plugin/8053-azure-toolkit-for-intellij
.idea/**/azureSettings.xml
### Intellij+all ###
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
# User-specific stuff
# AWS User-specific
# Generated files
# Sensitive or high-churn files
# Gradle
# Gradle and Maven with auto-import
# When using Gradle or Maven with auto-import, you should exclude module files,
# since they will be recreated, and may cause churn. Uncomment if using
# auto-import.
# .idea/artifacts
# .idea/compiler.xml
# .idea/jarRepositories.xml
# .idea/modules.xml
# .idea/*.iml
# .idea/modules
# *.iml
# *.ipr
# CMake
# Mongo Explorer plugin
# File-based project format
# IntelliJ
# mpeltonen/sbt-idea plugin
# JIRA plugin
# Cursive Clojure plugin
# SonarLint plugin
# Crashlytics plugin (for Android Studio and IntelliJ)
# Editor-based Rest Client
# Android studio 3.1+ serialized cache file
### Intellij+all Patch ###
# Ignore everything but code style settings and run configurations
# that are supposed to be shared within teams.
.idea/*
### Intellij+iml ###
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
# User-specific stuff
# AWS User-specific
# Generated files
# Sensitive or high-churn files
# Gradle
# Gradle and Maven with auto-import
# When using Gradle or Maven with auto-import, you should exclude module files,
# since they will be recreated, and may cause churn. Uncomment if using
# auto-import.
# .idea/artifacts
# .idea/compiler.xml
# .idea/jarRepositories.xml
# .idea/modules.xml
# .idea/*.iml
# .idea/modules
# *.iml
# *.ipr
# CMake
# Mongo Explorer plugin
# File-based project format
# IntelliJ
# mpeltonen/sbt-idea plugin
# JIRA plugin
# Cursive Clojure plugin
# SonarLint plugin
# Crashlytics plugin (for Android Studio and IntelliJ)
# Editor-based Rest Client
# Android studio 3.1+ serialized cache file
### Intellij+iml Patch ###
# Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-249601023
*.iml
modules.xml
.idea/misc.xml
*.ipr
### Linux ###
*~
# temporary files which can be created if a process still has a handle open of a deleted file
.fuse_hidden*
# KDE directory preferences
.directory
# Linux trash folder which might appear on any partition or disk
.Trash-*
# .nfs files are created when an open file is removed but is still being accessed
.nfs*
### macOS ###
# General
/target
/dist
.DS_Store
.AppleDouble
.LSOverride
/.idea
OneLauncher.iml
# Icon must end with two \r
Icon
# Thumbnails
._*
# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
### macOS Patch ###
# iCloud generated files
*.icloud
### Node ###
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*
.pnpm-debug.log*
# Diagnostic reports (https://nodejs.org/api/report.html)
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
# Runtime data
pids
*.pid
*.seed
*.pid.lock
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
*.lcov
# nyc test coverage
.nyc_output
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# Bower dependency directory (https://bower.io/)
bower_components
# node-waf configuration
.lock-wscript
# Compiled binary addons (https://nodejs.org/api/addons.html)
build/Release
# Dependency directories
node_modules/
jspm_packages/
# Snowpack dependency directory (https://snowpack.dev/)
web_modules/
# TypeScript cache
*.tsbuildinfo
# Optional npm cache directory
.npm
# Optional eslint cache
.eslintcache
# Optional stylelint cache
.stylelintcache
# Microbundle cache
.rpt2_cache/
.rts2_cache_cjs/
.rts2_cache_es/
.rts2_cache_umd/
# Optional REPL history
.node_repl_history
# Output of 'npm pack'
*.tgz
# Yarn Integrity file
.yarn-integrity
# dotenv environment variable files
.env
.env.development.local
.env.test.local
.env.production.local
.env.local
# parcel-bundler cache (https://parceljs.org/)
.cache
.parcel-cache
# Next.js build output
.next
out
# Nuxt.js build / generate output
.nuxt
# Gatsby files
.cache/
# Comment in the public line in if your project uses Gatsby and not Next.js
# https://nextjs.org/blog/next-9-1#public-directory-support
# public
# vuepress build output
# vuepress v2.x temp and cache directory
.temp
# Docusaurus cache and generated files
.docusaurus
# Serverless directories
.serverless/
# FuseBox cache
.fusebox/
# DynamoDB Local files
.dynamodb/
# TernJS port file
.tern-port
# Stores VSCode versions used for testing VSCode extensions
.vscode-test
# yarn v2
.yarn/cache
.yarn/unplugged
.yarn/build-state.yml
.yarn/install-state.gz
.pnp.*
### Node Patch ###
# Serverless Webpack directories
.webpack/
# Optional stylelint cache
# SvelteKit build / generate output
.svelte-kit
### Rust ###
# Generated by Cargo
# will have compiled files and executables
debug/
target/
# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries
# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html
# Cargo.lock
# These are backup files generated by rustfmt
**/*.rs.bk
# MSVC Windows builds of rustc generate these, which store debugging information
*.pdb
### rust-analyzer ###
# Can be generated by other build systems other than cargo (ex: bazelbuild/rust_rules)
rust-project.json
### VisualStudioCode ###
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
!.vscode/*.code-snippets
# Local History for Visual Studio Code
.history/
# Built Visual Studio Code Extensions
*.vsix
### VisualStudioCode Patch ###
# Ignore all local history of files
.history
.ionide
### Windows ###
# Windows thumbnail cache files
Thumbs.db
Thumbs.db:encryptable
ehthumbs.db
ehthumbs_vista.db
# Dump file
*.stackdump
# Folder config file
[Dd]esktop.ini
# Recycle Bin used on file shares
$RECYCLE.BIN/
# Windows Installer files
*.cab
*.msi
*.msix
*.msm
*.msp
# Windows shortcuts
*.lnk
### yarn ###
# https://yarnpkg.com/getting-started/qa#which-files-should-be-gitignored
.yarn/*
!.yarn/releases
!.yarn/patches
!.yarn/plugins
!.yarn/sdks
!.yarn/versions
# if you are NOT using Zero-installs, then:
# comment the following lines
!.yarn/cache
# and uncomment the following lines
# .pnp.*
# End of https://www.toptal.com/developers/gitignore/api/node,rust,yarn,linux,macos,windows,intellij+all,rust-analyzer,visualstudiocode,intellij,intellij+iml,git
/packages/oneclient_app/icons/generated/

View file

@ -1 +0,0 @@
pnpm lint-staged

9
.npmrc
View file

@ -1,9 +0,0 @@
; make all engine requirements (e.g. node version) strictly kept
engine-strict=true
dedupe-peer-dependents=true
# strict-peer-dependencies=true
auto-install-peers=true
max-old-space-size=4096
enable-pre-post-scripts=true
package-manager-strict=true
package-manager-strict-version=true

1
.nvmrc
View file

@ -1 +0,0 @@
24

View file

@ -1,23 +0,0 @@
max_width = 100
hard_tabs = true
newline_style = "Unix"
use_small_heuristics = "Default"
reorder_imports = true
imports_granularity = "Module"
reorder_modules = true
remove_nested_parens = true
edition = "2024"
merge_derives = true
use_try_shorthand = false
use_field_init_shorthand = false
force_explicit_abi = true
unstable_features = true
deprecated = "warn"
deprecated_in_future = "forbid"
rust_2018_idioms = { level = "warn", priority = -1 }
trivial_casts = "warn"
trivial_numeric_casts = "warn"
unused_allocation = "warn"
unused_import_braces = "warn"
unused_must_use = "deny"
unused_qualifications = "warn"

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<artifact-configuration xmlns="http://signpath.io/artifact-configuration/v1">
<zip-file>
<pe-file path="oneclient_app.exe">
<authenticode-sign />
</pe-file>
</zip-file>
</artifact-configuration>

View file

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
SignPath artifact configuration for the OneClient Windows installer.
GitHub Actions wraps every uploaded artifact in a ZIP archive, so the root
element MUST be <zip-file> (see https://docs.signpath.io/trusted-build-systems/github).
The NSIS bundle produced by Tauri is named e.g. "OneClient_1.1.6_x64-setup.exe",
so we match it with a wildcard instead of a fixed, version-specific name.
Upload this file in the SignPath portal:
Project "onelauncher" -> Artifact Configurations -> slug "onelauncher-installer"
-->
<artifact-configuration xmlns="http://signpath.io/artifact-configuration/v1">
<zip-file>
<pe-file path="*-setup.exe" min-matches="1" max-matches="unbounded">
<!-- optionally, add metadata constraints: product-name, product-version, file-version, company-name, copyright, original-filename -->
<authenticode-sign />
</pe-file>
</zip-file>
</artifact-configuration>

View file

@ -0,0 +1,12 @@
{
"db_name": "SQLite",
"query": "\n INSERT OR IGNORE INTO cluster_bundle_choices (cluster_id, bundle_name, accepted)\n SELECT ?, bundle_name, accepted\n FROM cluster_bundle_choices\n WHERE cluster_id = ?\n ",
"describe": {
"columns": [],
"parameters": {
"Right": 2
},
"nullable": []
},
"hash": "001a994c740f7a015152319eb16fc113954af25ebd2a44d55e95833adda53268"
}

View file

@ -0,0 +1,12 @@
{
"db_name": "SQLite",
"query": "UPDATE cluster_artifacts SET seen_status = ? WHERE seen_status <> ?",
"describe": {
"columns": [],
"parameters": {
"Right": 2
},
"nullable": []
},
"hash": "011448f2ce79e981700ee75c8cd5db5e0fcb793b72671c20a925b73ee6fb9456"
}

View file

@ -0,0 +1,170 @@
{
"db_name": "SQLite",
"query": "\n\t\tSELECT name, java_path, resolution, force_fullscreen, mem_max, launch_args, game_args, launch_env,\n\t\t hook_pre, hook_wrapper, hook_post, os_extra, browser_update_mode\n\t\tFROM setting_profiles\n\t\tORDER BY name ASC\n\t\t",
"describe": {
"columns": [
{
"name": "name",
"ordinal": 0,
"type_info": "Text",
"origin": {
"Table": {
"table": "setting_profiles",
"name": "name"
}
}
},
{
"name": "java_path",
"ordinal": 1,
"type_info": "Text",
"origin": {
"Table": {
"table": "setting_profiles",
"name": "java_path"
}
}
},
{
"name": "resolution",
"ordinal": 2,
"type_info": "Text",
"origin": {
"Table": {
"table": "setting_profiles",
"name": "resolution"
}
}
},
{
"name": "force_fullscreen",
"ordinal": 3,
"type_info": "Integer",
"origin": {
"Table": {
"table": "setting_profiles",
"name": "force_fullscreen"
}
}
},
{
"name": "mem_max",
"ordinal": 4,
"type_info": "Integer",
"origin": {
"Table": {
"table": "setting_profiles",
"name": "mem_max"
}
}
},
{
"name": "launch_args",
"ordinal": 5,
"type_info": "Text",
"origin": {
"Table": {
"table": "setting_profiles",
"name": "launch_args"
}
}
},
{
"name": "game_args",
"ordinal": 6,
"type_info": "Text",
"origin": {
"Table": {
"table": "setting_profiles",
"name": "game_args"
}
}
},
{
"name": "launch_env",
"ordinal": 7,
"type_info": "Text",
"origin": {
"Table": {
"table": "setting_profiles",
"name": "launch_env"
}
}
},
{
"name": "hook_pre",
"ordinal": 8,
"type_info": "Text",
"origin": {
"Table": {
"table": "setting_profiles",
"name": "hook_pre"
}
}
},
{
"name": "hook_wrapper",
"ordinal": 9,
"type_info": "Text",
"origin": {
"Table": {
"table": "setting_profiles",
"name": "hook_wrapper"
}
}
},
{
"name": "hook_post",
"ordinal": 10,
"type_info": "Text",
"origin": {
"Table": {
"table": "setting_profiles",
"name": "hook_post"
}
}
},
{
"name": "os_extra",
"ordinal": 11,
"type_info": "Text",
"origin": {
"Table": {
"table": "setting_profiles",
"name": "os_extra"
}
}
},
{
"name": "browser_update_mode",
"ordinal": 12,
"type_info": "Text",
"origin": {
"Table": {
"table": "setting_profiles",
"name": "browser_update_mode"
}
}
}
],
"parameters": {
"Right": 0
},
"nullable": [
false,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true
]
},
"hash": "01b2ef24541af92505a3c2bc14037a61470a393dffa06da8bebfba98138709d0"
}

View file

@ -0,0 +1,74 @@
{
"db_name": "SQLite",
"query": "\n\t\tSELECT cluster_id, hash, cluster_file_name, enabled, seen_status\n\t\tFROM cluster_artifacts\n\t\tWHERE cluster_id = ? AND hash = ?\n\t\t",
"describe": {
"columns": [
{
"name": "cluster_id",
"ordinal": 0,
"type_info": "Integer",
"origin": {
"Table": {
"table": "cluster_artifacts",
"name": "cluster_id"
}
}
},
{
"name": "hash",
"ordinal": 1,
"type_info": "Text",
"origin": {
"Table": {
"table": "cluster_artifacts",
"name": "hash"
}
}
},
{
"name": "cluster_file_name",
"ordinal": 2,
"type_info": "Text",
"origin": {
"Table": {
"table": "cluster_artifacts",
"name": "cluster_file_name"
}
}
},
{
"name": "enabled",
"ordinal": 3,
"type_info": "Integer",
"origin": {
"Table": {
"table": "cluster_artifacts",
"name": "enabled"
}
}
},
{
"name": "seen_status",
"ordinal": 4,
"type_info": "Integer",
"origin": {
"Table": {
"table": "cluster_artifacts",
"name": "seen_status"
}
}
}
],
"parameters": {
"Right": 2
},
"nullable": [
false,
false,
false,
false,
false
]
},
"hash": "071d02aba0d2eb073b8ca1e6488087101255147c064612fad99500d3c993f61f"
}

View file

@ -0,0 +1,26 @@
{
"db_name": "SQLite",
"query": "SELECT id FROM applied_migrations WHERE id = ?",
"describe": {
"columns": [
{
"name": "id",
"ordinal": 0,
"type_info": "Text",
"origin": {
"Table": {
"table": "applied_migrations",
"name": "id"
}
}
}
],
"parameters": {
"Right": 1
},
"nullable": [
false
]
},
"hash": "07450861d48b3bff106b7c06e958665f6be44e7937deffb921ddb6a5450805ab"
}

View file

@ -0,0 +1,38 @@
{
"db_name": "SQLite",
"query": "\n\t\tSELECT started_at, ended_at\n\t\tFROM game_sessions\n\t\tWHERE ended_at IS NOT NULL\n\t\tORDER BY started_at ASC\n\t\t",
"describe": {
"columns": [
{
"name": "started_at",
"ordinal": 0,
"type_info": "Text",
"origin": {
"Table": {
"table": "game_sessions",
"name": "started_at"
}
}
},
{
"name": "ended_at",
"ordinal": 1,
"type_info": "Text",
"origin": {
"Table": {
"table": "game_sessions",
"name": "ended_at"
}
}
}
],
"parameters": {
"Right": 0
},
"nullable": [
false,
true
]
},
"hash": "0c13ec99c2157d0f8fe60a159807e23cd24ddea07917d5f77b7c0d01cc617ccb"
}

View file

@ -0,0 +1,98 @@
{
"db_name": "SQLite",
"query": "\n SELECT absolute_path, major, version, vendor, os_arch, is_jdk as \"is_jdk: bool\", probe_version\n FROM java_versions\n ORDER BY major DESC, version DESC\n ",
"describe": {
"columns": [
{
"name": "absolute_path",
"ordinal": 0,
"type_info": "Text",
"origin": {
"Table": {
"table": "java_versions",
"name": "absolute_path"
}
}
},
{
"name": "major",
"ordinal": 1,
"type_info": "Integer",
"origin": {
"Table": {
"table": "java_versions",
"name": "major"
}
}
},
{
"name": "version",
"ordinal": 2,
"type_info": "Text",
"origin": {
"Table": {
"table": "java_versions",
"name": "version"
}
}
},
{
"name": "vendor",
"ordinal": 3,
"type_info": "Text",
"origin": {
"Table": {
"table": "java_versions",
"name": "vendor"
}
}
},
{
"name": "os_arch",
"ordinal": 4,
"type_info": "Text",
"origin": {
"Table": {
"table": "java_versions",
"name": "os_arch"
}
}
},
{
"name": "is_jdk: bool",
"ordinal": 5,
"type_info": "Integer",
"origin": {
"Table": {
"table": "java_versions",
"name": "is_jdk"
}
}
},
{
"name": "probe_version",
"ordinal": 6,
"type_info": "Integer",
"origin": {
"Table": {
"table": "java_versions",
"name": "probe_version"
}
}
}
],
"parameters": {
"Right": 0
},
"nullable": [
false,
false,
false,
false,
false,
false,
false
]
},
"hash": "0c3651cf175cb900c2466f0e97beca338b95637d43d9d067b974327f7720637b"
}

View file

@ -0,0 +1,158 @@
{
"db_name": "SQLite",
"query": "\n\t\tINSERT INTO clusters (\n\t\t\tname, folder_name, mc_version, mc_loader, mc_loader_version,\n\t\t\tsetting_profile_name, stage, created_at\n\t\t)\n\t\tVALUES (?, ?, ?, ?, ?, ?, ?, ?)\n\t\tRETURNING\n\t\t\tid, name, folder_name, setting_profile_name, mc_version, mc_loader,\n\t\t\tstage, mc_loader_version, created_at, last_played, overall_played, linked_modpack_hash\n\t\t",
"describe": {
"columns": [
{
"name": "id",
"ordinal": 0,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "id"
}
}
},
{
"name": "name",
"ordinal": 1,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "name"
}
}
},
{
"name": "folder_name",
"ordinal": 2,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "folder_name"
}
}
},
{
"name": "setting_profile_name",
"ordinal": 3,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "setting_profile_name"
}
}
},
{
"name": "mc_version",
"ordinal": 4,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "mc_version"
}
}
},
{
"name": "mc_loader",
"ordinal": 5,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "mc_loader"
}
}
},
{
"name": "stage",
"ordinal": 6,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "stage"
}
}
},
{
"name": "mc_loader_version",
"ordinal": 7,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "mc_loader_version"
}
}
},
{
"name": "created_at",
"ordinal": 8,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "created_at"
}
}
},
{
"name": "last_played",
"ordinal": 9,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "last_played"
}
}
},
{
"name": "overall_played",
"ordinal": 10,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "overall_played"
}
}
},
{
"name": "linked_modpack_hash",
"ordinal": 11,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "linked_modpack_hash"
}
}
}
],
"parameters": {
"Right": 8
},
"nullable": [
false,
false,
false,
false,
false,
false,
false,
true,
true,
true,
true,
true
]
},
"hash": "0f4cedf6055f4ba6a5e6ef78304c5f9df31fc6de0f6aa3dc09c4341fcb19c871"
}

View file

@ -0,0 +1,110 @@
{
"db_name": "SQLite",
"query": "\n SELECT\n cluster_id, hash, cluster_file_name, enabled,\n bundle_name, bundle_version_id, package_id, installed_at\n FROM cluster_artifacts\n WHERE cluster_id = ? AND bundle_name IS NOT NULL\n ",
"describe": {
"columns": [
{
"name": "cluster_id",
"ordinal": 0,
"type_info": "Integer",
"origin": {
"Table": {
"table": "cluster_artifacts",
"name": "cluster_id"
}
}
},
{
"name": "hash",
"ordinal": 1,
"type_info": "Text",
"origin": {
"Table": {
"table": "cluster_artifacts",
"name": "hash"
}
}
},
{
"name": "cluster_file_name",
"ordinal": 2,
"type_info": "Text",
"origin": {
"Table": {
"table": "cluster_artifacts",
"name": "cluster_file_name"
}
}
},
{
"name": "enabled",
"ordinal": 3,
"type_info": "Integer",
"origin": {
"Table": {
"table": "cluster_artifacts",
"name": "enabled"
}
}
},
{
"name": "bundle_name",
"ordinal": 4,
"type_info": "Text",
"origin": {
"Table": {
"table": "cluster_artifacts",
"name": "bundle_name"
}
}
},
{
"name": "bundle_version_id",
"ordinal": 5,
"type_info": "Text",
"origin": {
"Table": {
"table": "cluster_artifacts",
"name": "bundle_version_id"
}
}
},
{
"name": "package_id",
"ordinal": 6,
"type_info": "Text",
"origin": {
"Table": {
"table": "cluster_artifacts",
"name": "package_id"
}
}
},
{
"name": "installed_at",
"ordinal": 7,
"type_info": "Text",
"origin": {
"Table": {
"table": "cluster_artifacts",
"name": "installed_at"
}
}
}
],
"parameters": {
"Right": 1
},
"nullable": [
false,
false,
false,
false,
true,
true,
true,
true
]
},
"hash": "0fa6a144689ecd95fc076d340645a3417d56b455c6bb2a9ef3e027a3e1915813"
}

View file

@ -0,0 +1,98 @@
{
"db_name": "SQLite",
"query": "\n\t\tSELECT absolute_path, major, version, vendor, os_arch, is_jdk as \"is_jdk: bool\", probe_version\n\t\tFROM java_versions\n\t\tWHERE major = ?\n\t\tORDER BY version DESC\n\t\tLIMIT 1\n\t\t",
"describe": {
"columns": [
{
"name": "absolute_path",
"ordinal": 0,
"type_info": "Text",
"origin": {
"Table": {
"table": "java_versions",
"name": "absolute_path"
}
}
},
{
"name": "major",
"ordinal": 1,
"type_info": "Integer",
"origin": {
"Table": {
"table": "java_versions",
"name": "major"
}
}
},
{
"name": "version",
"ordinal": 2,
"type_info": "Text",
"origin": {
"Table": {
"table": "java_versions",
"name": "version"
}
}
},
{
"name": "vendor",
"ordinal": 3,
"type_info": "Text",
"origin": {
"Table": {
"table": "java_versions",
"name": "vendor"
}
}
},
{
"name": "os_arch",
"ordinal": 4,
"type_info": "Text",
"origin": {
"Table": {
"table": "java_versions",
"name": "os_arch"
}
}
},
{
"name": "is_jdk: bool",
"ordinal": 5,
"type_info": "Integer",
"origin": {
"Table": {
"table": "java_versions",
"name": "is_jdk"
}
}
},
{
"name": "probe_version",
"ordinal": 6,
"type_info": "Integer",
"origin": {
"Table": {
"table": "java_versions",
"name": "probe_version"
}
}
}
],
"parameters": {
"Right": 1
},
"nullable": [
false,
false,
false,
false,
false,
false,
false
]
},
"hash": "14ab205c5b8d4c1c435814e4b7a155acbae41a67925b6b179b82dea1758d621a"
}

View file

@ -0,0 +1,110 @@
{
"db_name": "SQLite",
"query": "\n\t\tSELECT\n\t\t\ttarget_cluster_id, provider, project_id, content_type,\n\t\t\tsource_hash, display_name, expires_at, enabled\n\t\tFROM release_migration_waitlist\n\t\t",
"describe": {
"columns": [
{
"name": "target_cluster_id",
"ordinal": 0,
"type_info": "Integer",
"origin": {
"Table": {
"table": "release_migration_waitlist",
"name": "target_cluster_id"
}
}
},
{
"name": "provider",
"ordinal": 1,
"type_info": "Integer",
"origin": {
"Table": {
"table": "release_migration_waitlist",
"name": "provider"
}
}
},
{
"name": "project_id",
"ordinal": 2,
"type_info": "Text",
"origin": {
"Table": {
"table": "release_migration_waitlist",
"name": "project_id"
}
}
},
{
"name": "content_type",
"ordinal": 3,
"type_info": "Integer",
"origin": {
"Table": {
"table": "release_migration_waitlist",
"name": "content_type"
}
}
},
{
"name": "source_hash",
"ordinal": 4,
"type_info": "Text",
"origin": {
"Table": {
"table": "release_migration_waitlist",
"name": "source_hash"
}
}
},
{
"name": "display_name",
"ordinal": 5,
"type_info": "Text",
"origin": {
"Table": {
"table": "release_migration_waitlist",
"name": "display_name"
}
}
},
{
"name": "expires_at",
"ordinal": 6,
"type_info": "Text",
"origin": {
"Table": {
"table": "release_migration_waitlist",
"name": "expires_at"
}
}
},
{
"name": "enabled",
"ordinal": 7,
"type_info": "Integer",
"origin": {
"Table": {
"table": "release_migration_waitlist",
"name": "enabled"
}
}
}
],
"parameters": {
"Right": 0
},
"nullable": [
false,
false,
false,
false,
false,
false,
false,
false
]
},
"hash": "15dc690e91fe0bc7e1932a5051f8edd855deaeb31e52209ae436680962dea954"
}

View file

@ -0,0 +1,38 @@
{
"db_name": "SQLite",
"query": "\n SELECT bundle_name, accepted\n FROM cluster_bundle_choices\n WHERE cluster_id = ?\n ",
"describe": {
"columns": [
{
"name": "bundle_name",
"ordinal": 0,
"type_info": "Text",
"origin": {
"Table": {
"table": "cluster_bundle_choices",
"name": "bundle_name"
}
}
},
{
"name": "accepted",
"ordinal": 1,
"type_info": "Integer",
"origin": {
"Table": {
"table": "cluster_bundle_choices",
"name": "accepted"
}
}
}
],
"parameters": {
"Right": 1
},
"nullable": [
false,
false
]
},
"hash": "171c6771d06656c2fe375f6a0da889f828f400e950f103f0ed44f5f98a48dc50"
}

View file

@ -0,0 +1,158 @@
{
"db_name": "SQLite",
"query": "\n\t\tUPDATE clusters\n\t\tSET mc_version = ?,\n\t\t name = ?,\n\t\t folder_name = ?\n\t\tWHERE id = ?\n\t\tRETURNING\n\t\t\tid, name, folder_name, setting_profile_name, mc_version, mc_loader,\n\t\t\tstage, mc_loader_version, created_at, last_played, overall_played, linked_modpack_hash\n\t\t",
"describe": {
"columns": [
{
"name": "id",
"ordinal": 0,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "id"
}
}
},
{
"name": "name",
"ordinal": 1,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "name"
}
}
},
{
"name": "folder_name",
"ordinal": 2,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "folder_name"
}
}
},
{
"name": "setting_profile_name",
"ordinal": 3,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "setting_profile_name"
}
}
},
{
"name": "mc_version",
"ordinal": 4,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "mc_version"
}
}
},
{
"name": "mc_loader",
"ordinal": 5,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "mc_loader"
}
}
},
{
"name": "stage",
"ordinal": 6,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "stage"
}
}
},
{
"name": "mc_loader_version",
"ordinal": 7,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "mc_loader_version"
}
}
},
{
"name": "created_at",
"ordinal": 8,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "created_at"
}
}
},
{
"name": "last_played",
"ordinal": 9,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "last_played"
}
}
},
{
"name": "overall_played",
"ordinal": 10,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "overall_played"
}
}
},
{
"name": "linked_modpack_hash",
"ordinal": 11,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "linked_modpack_hash"
}
}
}
],
"parameters": {
"Right": 4
},
"nullable": [
false,
false,
false,
true,
false,
false,
false,
true,
true,
true,
true,
true
]
},
"hash": "1a83654d854901219ca4be57d793ddef96835a67aa8affe3453845a646e5ba61"
}

View file

@ -0,0 +1,12 @@
{
"db_name": "SQLite",
"query": "DELETE FROM release_migration_waitlist WHERE target_cluster_id = ? AND provider = ? AND project_id = ?",
"describe": {
"columns": [],
"parameters": {
"Right": 3
},
"nullable": []
},
"hash": "1e43f93b56bb495e13826c734fe5fb64515cf1d7c28bc6a1bf1fb1645fdba2a1"
}

View file

@ -0,0 +1,12 @@
{
"db_name": "SQLite",
"query": "DELETE FROM setting_profiles WHERE name = ?",
"describe": {
"columns": [],
"parameters": {
"Right": 1
},
"nullable": []
},
"hash": "1f0b5e466773838f6b800f9d5afe5b84ad8ece01b56b9e22d595271db2c5c202"
}

View file

@ -0,0 +1,146 @@
{
"db_name": "SQLite",
"query": "\n\t\tSELECT\n\t\t\tcluster_id, hash, provider as \"provider!: i64\", project_id,\n\t\t\tinstalled_version_id, installed_version_name,\n\t\t\tlatest_version_id, latest_version_name,\n\t\t\tdisplay_name, checked_at, skipped\n\t\tFROM browser_package_updates\n\t\t",
"describe": {
"columns": [
{
"name": "cluster_id",
"ordinal": 0,
"type_info": "Integer",
"origin": {
"Table": {
"table": "browser_package_updates",
"name": "cluster_id"
}
}
},
{
"name": "hash",
"ordinal": 1,
"type_info": "Text",
"origin": {
"Table": {
"table": "browser_package_updates",
"name": "hash"
}
}
},
{
"name": "provider!: i64",
"ordinal": 2,
"type_info": "Integer",
"origin": {
"Table": {
"table": "browser_package_updates",
"name": "provider"
}
}
},
{
"name": "project_id",
"ordinal": 3,
"type_info": "Text",
"origin": {
"Table": {
"table": "browser_package_updates",
"name": "project_id"
}
}
},
{
"name": "installed_version_id",
"ordinal": 4,
"type_info": "Text",
"origin": {
"Table": {
"table": "browser_package_updates",
"name": "installed_version_id"
}
}
},
{
"name": "installed_version_name",
"ordinal": 5,
"type_info": "Text",
"origin": {
"Table": {
"table": "browser_package_updates",
"name": "installed_version_name"
}
}
},
{
"name": "latest_version_id",
"ordinal": 6,
"type_info": "Text",
"origin": {
"Table": {
"table": "browser_package_updates",
"name": "latest_version_id"
}
}
},
{
"name": "latest_version_name",
"ordinal": 7,
"type_info": "Text",
"origin": {
"Table": {
"table": "browser_package_updates",
"name": "latest_version_name"
}
}
},
{
"name": "display_name",
"ordinal": 8,
"type_info": "Text",
"origin": {
"Table": {
"table": "browser_package_updates",
"name": "display_name"
}
}
},
{
"name": "checked_at",
"ordinal": 9,
"type_info": "Text",
"origin": {
"Table": {
"table": "browser_package_updates",
"name": "checked_at"
}
}
},
{
"name": "skipped",
"ordinal": 10,
"type_info": "Integer",
"origin": {
"Table": {
"table": "browser_package_updates",
"name": "skipped"
}
}
}
],
"parameters": {
"Right": 0
},
"nullable": [
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false
]
},
"hash": "2005ac6f15d4c5fe36d5bfa87191e6be22264a2ca3e91155cb01f2debd39b319"
}

View file

@ -0,0 +1,74 @@
{
"db_name": "SQLite",
"query": "\n\t\tINSERT INTO cluster_artifacts (cluster_id, hash, cluster_file_name, enabled)\n\t\tVALUES (?, ?, ?, 1)\n\t\tON CONFLICT(cluster_id, hash) DO UPDATE SET\n\t\t\tcluster_file_name = excluded.cluster_file_name\n\t\tRETURNING cluster_id, hash, cluster_file_name, enabled, seen_status\n\t\t",
"describe": {
"columns": [
{
"name": "cluster_id",
"ordinal": 0,
"type_info": "Integer",
"origin": {
"Table": {
"table": "cluster_artifacts",
"name": "cluster_id"
}
}
},
{
"name": "hash",
"ordinal": 1,
"type_info": "Text",
"origin": {
"Table": {
"table": "cluster_artifacts",
"name": "hash"
}
}
},
{
"name": "cluster_file_name",
"ordinal": 2,
"type_info": "Text",
"origin": {
"Table": {
"table": "cluster_artifacts",
"name": "cluster_file_name"
}
}
},
{
"name": "enabled",
"ordinal": 3,
"type_info": "Integer",
"origin": {
"Table": {
"table": "cluster_artifacts",
"name": "enabled"
}
}
},
{
"name": "seen_status",
"ordinal": 4,
"type_info": "Integer",
"origin": {
"Table": {
"table": "cluster_artifacts",
"name": "seen_status"
}
}
}
],
"parameters": {
"Right": 3
},
"nullable": [
false,
false,
false,
false,
false
]
},
"hash": "25259e9d6eda7f5113e0d88f00b24b28b98de1eda40a1e25d48bbcf212af42b5"
}

View file

@ -0,0 +1,74 @@
{
"db_name": "SQLite",
"query": "\n\t\tSELECT DISTINCT ca.cluster_id, ca.hash, ca.cluster_file_name, ca.enabled, ca.seen_status\n\t\tFROM cluster_artifacts ca\n\t\tJOIN provider_releases pr ON pr.hash = ca.hash\n\t\tWHERE ca.cluster_id = ?\n\t\t\tAND pr.provider = ?\n\t\t\tAND pr.project_id = ?\n\t\t\tAND ca.hash <> ?\n\t\t",
"describe": {
"columns": [
{
"name": "cluster_id",
"ordinal": 0,
"type_info": "Integer",
"origin": {
"Table": {
"table": "cluster_artifacts",
"name": "cluster_id"
}
}
},
{
"name": "hash",
"ordinal": 1,
"type_info": "Text",
"origin": {
"Table": {
"table": "cluster_artifacts",
"name": "hash"
}
}
},
{
"name": "cluster_file_name",
"ordinal": 2,
"type_info": "Text",
"origin": {
"Table": {
"table": "cluster_artifacts",
"name": "cluster_file_name"
}
}
},
{
"name": "enabled",
"ordinal": 3,
"type_info": "Integer",
"origin": {
"Table": {
"table": "cluster_artifacts",
"name": "enabled"
}
}
},
{
"name": "seen_status",
"ordinal": 4,
"type_info": "Integer",
"origin": {
"Table": {
"table": "cluster_artifacts",
"name": "seen_status"
}
}
}
],
"parameters": {
"Right": 4
},
"nullable": [
false,
false,
false,
false,
false
]
},
"hash": "25f4eb2e9040bb8f1c9a38ca41a773225099f150c3fc8a41d31fd40c09711d0c"
}

View file

@ -0,0 +1,110 @@
{
"db_name": "SQLite",
"query": "\n UPDATE cluster_artifacts\n SET\n bundle_name = ?,\n bundle_version_id = ?,\n package_id = ?,\n installed_at = ?\n WHERE cluster_id = ? AND hash = ?\n RETURNING\n cluster_id, hash, cluster_file_name, enabled,\n bundle_name, bundle_version_id, package_id, installed_at\n ",
"describe": {
"columns": [
{
"name": "cluster_id",
"ordinal": 0,
"type_info": "Integer",
"origin": {
"Table": {
"table": "cluster_artifacts",
"name": "cluster_id"
}
}
},
{
"name": "hash",
"ordinal": 1,
"type_info": "Text",
"origin": {
"Table": {
"table": "cluster_artifacts",
"name": "hash"
}
}
},
{
"name": "cluster_file_name",
"ordinal": 2,
"type_info": "Text",
"origin": {
"Table": {
"table": "cluster_artifacts",
"name": "cluster_file_name"
}
}
},
{
"name": "enabled",
"ordinal": 3,
"type_info": "Integer",
"origin": {
"Table": {
"table": "cluster_artifacts",
"name": "enabled"
}
}
},
{
"name": "bundle_name",
"ordinal": 4,
"type_info": "Text",
"origin": {
"Table": {
"table": "cluster_artifacts",
"name": "bundle_name"
}
}
},
{
"name": "bundle_version_id",
"ordinal": 5,
"type_info": "Text",
"origin": {
"Table": {
"table": "cluster_artifacts",
"name": "bundle_version_id"
}
}
},
{
"name": "package_id",
"ordinal": 6,
"type_info": "Text",
"origin": {
"Table": {
"table": "cluster_artifacts",
"name": "package_id"
}
}
},
{
"name": "installed_at",
"ordinal": 7,
"type_info": "Text",
"origin": {
"Table": {
"table": "cluster_artifacts",
"name": "installed_at"
}
}
}
],
"parameters": {
"Right": 6
},
"nullable": [
false,
false,
false,
false,
true,
true,
true,
true
]
},
"hash": "26faf03500344e939addc574799459bb3294907c8fdf0727c0ef503e4b7bdf2c"
}

View file

@ -0,0 +1,146 @@
{
"db_name": "SQLite",
"query": "\n\t\tSELECT\n\t\t\tcluster_id, hash, provider as \"provider!: i64\", project_id,\n\t\t\tinstalled_version_id, installed_version_name,\n\t\t\tlatest_version_id, latest_version_name,\n\t\t\tdisplay_name, checked_at, skipped\n\t\tFROM browser_package_updates\n\t\tWHERE cluster_id = ?\n\t\t",
"describe": {
"columns": [
{
"name": "cluster_id",
"ordinal": 0,
"type_info": "Integer",
"origin": {
"Table": {
"table": "browser_package_updates",
"name": "cluster_id"
}
}
},
{
"name": "hash",
"ordinal": 1,
"type_info": "Text",
"origin": {
"Table": {
"table": "browser_package_updates",
"name": "hash"
}
}
},
{
"name": "provider!: i64",
"ordinal": 2,
"type_info": "Integer",
"origin": {
"Table": {
"table": "browser_package_updates",
"name": "provider"
}
}
},
{
"name": "project_id",
"ordinal": 3,
"type_info": "Text",
"origin": {
"Table": {
"table": "browser_package_updates",
"name": "project_id"
}
}
},
{
"name": "installed_version_id",
"ordinal": 4,
"type_info": "Text",
"origin": {
"Table": {
"table": "browser_package_updates",
"name": "installed_version_id"
}
}
},
{
"name": "installed_version_name",
"ordinal": 5,
"type_info": "Text",
"origin": {
"Table": {
"table": "browser_package_updates",
"name": "installed_version_name"
}
}
},
{
"name": "latest_version_id",
"ordinal": 6,
"type_info": "Text",
"origin": {
"Table": {
"table": "browser_package_updates",
"name": "latest_version_id"
}
}
},
{
"name": "latest_version_name",
"ordinal": 7,
"type_info": "Text",
"origin": {
"Table": {
"table": "browser_package_updates",
"name": "latest_version_name"
}
}
},
{
"name": "display_name",
"ordinal": 8,
"type_info": "Text",
"origin": {
"Table": {
"table": "browser_package_updates",
"name": "display_name"
}
}
},
{
"name": "checked_at",
"ordinal": 9,
"type_info": "Text",
"origin": {
"Table": {
"table": "browser_package_updates",
"name": "checked_at"
}
}
},
{
"name": "skipped",
"ordinal": 10,
"type_info": "Integer",
"origin": {
"Table": {
"table": "browser_package_updates",
"name": "skipped"
}
}
}
],
"parameters": {
"Right": 1
},
"nullable": [
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false
]
},
"hash": "271e5a3e03861f3699e3b32dc4a9bb0c0dcb880fcff67a096fa94b236fbe6107"
}

View file

@ -0,0 +1,158 @@
{
"db_name": "SQLite",
"query": "\n\t\tUPDATE clusters\n\t\tSET name = ?,\n\t\t setting_profile_name = ?,\n\t\t mc_loader_version = ?,\n\t\t linked_modpack_hash = ?\n\t\tWHERE id = ?\n\t\tRETURNING\n\t\t\tid, name, folder_name, setting_profile_name, mc_version, mc_loader,\n\t\t\tstage, mc_loader_version, created_at, last_played, overall_played, linked_modpack_hash\n\t\t",
"describe": {
"columns": [
{
"name": "id",
"ordinal": 0,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "id"
}
}
},
{
"name": "name",
"ordinal": 1,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "name"
}
}
},
{
"name": "folder_name",
"ordinal": 2,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "folder_name"
}
}
},
{
"name": "setting_profile_name",
"ordinal": 3,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "setting_profile_name"
}
}
},
{
"name": "mc_version",
"ordinal": 4,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "mc_version"
}
}
},
{
"name": "mc_loader",
"ordinal": 5,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "mc_loader"
}
}
},
{
"name": "stage",
"ordinal": 6,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "stage"
}
}
},
{
"name": "mc_loader_version",
"ordinal": 7,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "mc_loader_version"
}
}
},
{
"name": "created_at",
"ordinal": 8,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "created_at"
}
}
},
{
"name": "last_played",
"ordinal": 9,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "last_played"
}
}
},
{
"name": "overall_played",
"ordinal": 10,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "overall_played"
}
}
},
{
"name": "linked_modpack_hash",
"ordinal": 11,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "linked_modpack_hash"
}
}
}
],
"parameters": {
"Right": 5
},
"nullable": [
false,
false,
false,
false,
false,
false,
false,
true,
true,
true,
true,
true
]
},
"hash": "2b5b633bb658e5f3c733acc7977b3c7fd7f8d8b5f425e71989e98a2b27338b42"
}

View file

@ -0,0 +1,98 @@
{
"db_name": "SQLite",
"query": "\n SELECT absolute_path, major, version, vendor, os_arch, is_jdk as \"is_jdk: bool\", probe_version\n FROM java_versions\n WHERE absolute_path = ?\n ",
"describe": {
"columns": [
{
"name": "absolute_path",
"ordinal": 0,
"type_info": "Text",
"origin": {
"Table": {
"table": "java_versions",
"name": "absolute_path"
}
}
},
{
"name": "major",
"ordinal": 1,
"type_info": "Integer",
"origin": {
"Table": {
"table": "java_versions",
"name": "major"
}
}
},
{
"name": "version",
"ordinal": 2,
"type_info": "Text",
"origin": {
"Table": {
"table": "java_versions",
"name": "version"
}
}
},
{
"name": "vendor",
"ordinal": 3,
"type_info": "Text",
"origin": {
"Table": {
"table": "java_versions",
"name": "vendor"
}
}
},
{
"name": "os_arch",
"ordinal": 4,
"type_info": "Text",
"origin": {
"Table": {
"table": "java_versions",
"name": "os_arch"
}
}
},
{
"name": "is_jdk: bool",
"ordinal": 5,
"type_info": "Integer",
"origin": {
"Table": {
"table": "java_versions",
"name": "is_jdk"
}
}
},
{
"name": "probe_version",
"ordinal": 6,
"type_info": "Integer",
"origin": {
"Table": {
"table": "java_versions",
"name": "probe_version"
}
}
}
],
"parameters": {
"Right": 1
},
"nullable": [
false,
false,
false,
false,
false,
false,
false
]
},
"hash": "331bee3da454f39a8a2cc8ed4e5338b743a7cd033fdef023c4b3b93827248be1"
}

View file

@ -0,0 +1,74 @@
{
"db_name": "SQLite",
"query": "\n\t\tSELECT session_started_at, address, port, joined_at, disconnected_at\n\t\tFROM game_session_servers\n\t\tORDER BY joined_at ASC\n\t\t",
"describe": {
"columns": [
{
"name": "session_started_at",
"ordinal": 0,
"type_info": "Text",
"origin": {
"Table": {
"table": "game_session_servers",
"name": "session_started_at"
}
}
},
{
"name": "address",
"ordinal": 1,
"type_info": "Text",
"origin": {
"Table": {
"table": "game_session_servers",
"name": "address"
}
}
},
{
"name": "port",
"ordinal": 2,
"type_info": "Integer",
"origin": {
"Table": {
"table": "game_session_servers",
"name": "port"
}
}
},
{
"name": "joined_at",
"ordinal": 3,
"type_info": "Text",
"origin": {
"Table": {
"table": "game_session_servers",
"name": "joined_at"
}
}
},
{
"name": "disconnected_at",
"ordinal": 4,
"type_info": "Text",
"origin": {
"Table": {
"table": "game_session_servers",
"name": "disconnected_at"
}
}
}
],
"parameters": {
"Right": 0
},
"nullable": [
false,
false,
true,
false,
true
]
},
"hash": "3ab373a6f0167df9b2fa3a6a2f2c6ee2a9a36d8ae0948b71369897c014acae77"
}

View file

@ -0,0 +1,12 @@
{
"db_name": "SQLite",
"query": "\n INSERT INTO cluster_optional_mods\n (cluster_id, bundle_name, package_id, bundle_version_id, seen_status)\n VALUES (?, ?, ?, ?, ?)\n ON CONFLICT(cluster_id, package_id) DO UPDATE SET\n bundle_name = excluded.bundle_name,\n bundle_version_id = excluded.bundle_version_id\n ",
"describe": {
"columns": [],
"parameters": {
"Right": 5
},
"nullable": []
},
"hash": "3b87531a1231c467072ec4d1f9afd3c93114777031250c7f9e74f6b9eef4ab9f"
}

View file

@ -0,0 +1,158 @@
{
"db_name": "SQLite",
"query": "\n\t\tUPDATE clusters\n\t\tSET overall_played = COALESCE(overall_played, 0) + ?,\n\t\t last_played = ?\n\t\tWHERE id = ?\n\t\tRETURNING\n\t\t\tid, name, folder_name, setting_profile_name, mc_version, mc_loader,\n\t\t\tstage, mc_loader_version, created_at, last_played, overall_played, linked_modpack_hash\n\t\t",
"describe": {
"columns": [
{
"name": "id",
"ordinal": 0,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "id"
}
}
},
{
"name": "name",
"ordinal": 1,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "name"
}
}
},
{
"name": "folder_name",
"ordinal": 2,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "folder_name"
}
}
},
{
"name": "setting_profile_name",
"ordinal": 3,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "setting_profile_name"
}
}
},
{
"name": "mc_version",
"ordinal": 4,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "mc_version"
}
}
},
{
"name": "mc_loader",
"ordinal": 5,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "mc_loader"
}
}
},
{
"name": "stage",
"ordinal": 6,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "stage"
}
}
},
{
"name": "mc_loader_version",
"ordinal": 7,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "mc_loader_version"
}
}
},
{
"name": "created_at",
"ordinal": 8,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "created_at"
}
}
},
{
"name": "last_played",
"ordinal": 9,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "last_played"
}
}
},
{
"name": "overall_played",
"ordinal": 10,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "overall_played"
}
}
},
{
"name": "linked_modpack_hash",
"ordinal": 11,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "linked_modpack_hash"
}
}
}
],
"parameters": {
"Right": 3
},
"nullable": [
false,
false,
false,
true,
false,
false,
false,
true,
true,
true,
true,
true
]
},
"hash": "3fb91d89cb135d2af105a0f40f7150d03ab2fa9b955ba223066edf210e3556a1"
}

View file

@ -0,0 +1,74 @@
{
"db_name": "SQLite",
"query": "\n\t\tSELECT session_started_at, address, port, joined_at, disconnected_at\n\t\tFROM game_session_servers\n\t\tWHERE session_started_at = ?\n\t\tORDER BY joined_at ASC\n\t\t",
"describe": {
"columns": [
{
"name": "session_started_at",
"ordinal": 0,
"type_info": "Text",
"origin": {
"Table": {
"table": "game_session_servers",
"name": "session_started_at"
}
}
},
{
"name": "address",
"ordinal": 1,
"type_info": "Text",
"origin": {
"Table": {
"table": "game_session_servers",
"name": "address"
}
}
},
{
"name": "port",
"ordinal": 2,
"type_info": "Integer",
"origin": {
"Table": {
"table": "game_session_servers",
"name": "port"
}
}
},
{
"name": "joined_at",
"ordinal": 3,
"type_info": "Text",
"origin": {
"Table": {
"table": "game_session_servers",
"name": "joined_at"
}
}
},
{
"name": "disconnected_at",
"ordinal": 4,
"type_info": "Text",
"origin": {
"Table": {
"table": "game_session_servers",
"name": "disconnected_at"
}
}
}
],
"parameters": {
"Right": 1
},
"nullable": [
false,
false,
true,
false,
true
]
},
"hash": "42c26d63ca860840c0e8e75bf1a46218b16c849301fa3db250e24ec81d15d1c7"
}

View file

@ -0,0 +1,12 @@
{
"db_name": "SQLite",
"query": "\n DELETE FROM cluster_bundle_overrides\n WHERE cluster_id = ? AND package_id = ? AND override_type IN ('disabled', 'removed')\n ",
"describe": {
"columns": [],
"parameters": {
"Right": 2
},
"nullable": []
},
"hash": "43521070cb5de5b2fe5e25c88e683b933c2f6788e2d2482ca9fd7d71ee67381a"
}

View file

@ -0,0 +1,74 @@
{
"db_name": "SQLite",
"query": "\n\t\tSELECT hash, content_type, path, file_name, size_bytes\n\t\tFROM artifacts\n\t\tWHERE hash = ?\n\t\t",
"describe": {
"columns": [
{
"name": "hash",
"ordinal": 0,
"type_info": "Text",
"origin": {
"Table": {
"table": "artifacts",
"name": "hash"
}
}
},
{
"name": "content_type",
"ordinal": 1,
"type_info": "Integer",
"origin": {
"Table": {
"table": "artifacts",
"name": "content_type"
}
}
},
{
"name": "path",
"ordinal": 2,
"type_info": "Text",
"origin": {
"Table": {
"table": "artifacts",
"name": "path"
}
}
},
{
"name": "file_name",
"ordinal": 3,
"type_info": "Text",
"origin": {
"Table": {
"table": "artifacts",
"name": "file_name"
}
}
},
{
"name": "size_bytes",
"ordinal": 4,
"type_info": "Integer",
"origin": {
"Table": {
"table": "artifacts",
"name": "size_bytes"
}
}
}
],
"parameters": {
"Right": 1
},
"nullable": [
false,
false,
false,
false,
true
]
},
"hash": "439e74ae2697056b206fc346749b190781cf0aac8ae6b4e1a333608d29946919"
}

View file

@ -0,0 +1,12 @@
{
"db_name": "SQLite",
"query": "\n\t\tUPDATE game_sessions\n\t\tSET ended_at = ?, exit_code = ?\n\t\tWHERE started_at = ? AND ended_at IS NULL\n\t\t",
"describe": {
"columns": [],
"parameters": {
"Right": 3
},
"nullable": []
},
"hash": "44e40c724779e5e1cffbbbcf857223cac28f59431933ffefea04e59b62deab3a"
}

View file

@ -0,0 +1,158 @@
{
"db_name": "SQLite",
"query": "\n\t\tSELECT\n\t\t\tid, name, folder_name, setting_profile_name, mc_version, mc_loader,\n\t\t\tstage, mc_loader_version, created_at, last_played, overall_played, linked_modpack_hash\n\t\tFROM clusters\n\t\tORDER BY last_played IS NULL, last_played DESC, name ASC\n\t\t",
"describe": {
"columns": [
{
"name": "id",
"ordinal": 0,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "id"
}
}
},
{
"name": "name",
"ordinal": 1,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "name"
}
}
},
{
"name": "folder_name",
"ordinal": 2,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "folder_name"
}
}
},
{
"name": "setting_profile_name",
"ordinal": 3,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "setting_profile_name"
}
}
},
{
"name": "mc_version",
"ordinal": 4,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "mc_version"
}
}
},
{
"name": "mc_loader",
"ordinal": 5,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "mc_loader"
}
}
},
{
"name": "stage",
"ordinal": 6,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "stage"
}
}
},
{
"name": "mc_loader_version",
"ordinal": 7,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "mc_loader_version"
}
}
},
{
"name": "created_at",
"ordinal": 8,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "created_at"
}
}
},
{
"name": "last_played",
"ordinal": 9,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "last_played"
}
}
},
{
"name": "overall_played",
"ordinal": 10,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "overall_played"
}
}
},
{
"name": "linked_modpack_hash",
"ordinal": 11,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "linked_modpack_hash"
}
}
}
],
"parameters": {
"Right": 0
},
"nullable": [
false,
false,
false,
true,
false,
false,
false,
true,
true,
true,
true,
true
]
},
"hash": "4557535ab4f4e972a2b3111cc29af15fd91e22e080742f75a0a393fc45c59b22"
}

View file

@ -0,0 +1,12 @@
{
"db_name": "SQLite",
"query": "\n\t\tUPDATE browser_package_updates\n\t\tSET skipped = ?\n\t\tWHERE cluster_id = ? AND hash = ?\n\t\t",
"describe": {
"columns": [],
"parameters": {
"Right": 3
},
"nullable": []
},
"hash": "472a614b1f1484e839f373fcfecf338462888518de3307bdab3db0b419a82be9"
}

View file

@ -0,0 +1,158 @@
{
"db_name": "SQLite",
"query": "\n\t\tSELECT\n\t\t\tid, name, folder_name, setting_profile_name, mc_version, mc_loader,\n\t\t\tstage, mc_loader_version, created_at, last_played, overall_played, linked_modpack_hash\n\t\tFROM clusters\n\t\tWHERE id = ?\n\t\t",
"describe": {
"columns": [
{
"name": "id",
"ordinal": 0,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "id"
}
}
},
{
"name": "name",
"ordinal": 1,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "name"
}
}
},
{
"name": "folder_name",
"ordinal": 2,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "folder_name"
}
}
},
{
"name": "setting_profile_name",
"ordinal": 3,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "setting_profile_name"
}
}
},
{
"name": "mc_version",
"ordinal": 4,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "mc_version"
}
}
},
{
"name": "mc_loader",
"ordinal": 5,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "mc_loader"
}
}
},
{
"name": "stage",
"ordinal": 6,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "stage"
}
}
},
{
"name": "mc_loader_version",
"ordinal": 7,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "mc_loader_version"
}
}
},
{
"name": "created_at",
"ordinal": 8,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "created_at"
}
}
},
{
"name": "last_played",
"ordinal": 9,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "last_played"
}
}
},
{
"name": "overall_played",
"ordinal": 10,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "overall_played"
}
}
},
{
"name": "linked_modpack_hash",
"ordinal": 11,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "linked_modpack_hash"
}
}
}
],
"parameters": {
"Right": 1
},
"nullable": [
false,
false,
false,
true,
false,
false,
false,
true,
true,
true,
true,
true
]
},
"hash": "4b7fa3441d3d18943086acd54232c492521a693f48d07f9230cda440297ac02d"
}

View file

@ -0,0 +1,218 @@
{
"db_name": "SQLite",
"query": "\n\t\tUPDATE clusters\n\t\tSET overall_played = COALESCE(overall_played, 0) + ?,\n\t\t last_played = ?\n\t\tWHERE id = ?\n\t\tRETURNING\n\t\t\tid, name, folder_name, setting_profile_name, mc_version, mc_loader,\n\t\t\tstage, mc_loader_version, created_at, last_played, overall_played, linked_modpack_hash,\n\t\t\tkind, user_created, description, tags, cover_path\n\t\t",
"describe": {
"columns": [
{
"name": "id",
"ordinal": 0,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "id"
}
}
},
{
"name": "name",
"ordinal": 1,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "name"
}
}
},
{
"name": "folder_name",
"ordinal": 2,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "folder_name"
}
}
},
{
"name": "setting_profile_name",
"ordinal": 3,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "setting_profile_name"
}
}
},
{
"name": "mc_version",
"ordinal": 4,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "mc_version"
}
}
},
{
"name": "mc_loader",
"ordinal": 5,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "mc_loader"
}
}
},
{
"name": "stage",
"ordinal": 6,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "stage"
}
}
},
{
"name": "mc_loader_version",
"ordinal": 7,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "mc_loader_version"
}
}
},
{
"name": "created_at",
"ordinal": 8,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "created_at"
}
}
},
{
"name": "last_played",
"ordinal": 9,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "last_played"
}
}
},
{
"name": "overall_played",
"ordinal": 10,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "overall_played"
}
}
},
{
"name": "linked_modpack_hash",
"ordinal": 11,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "linked_modpack_hash"
}
}
},
{
"name": "kind",
"ordinal": 12,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "kind"
}
}
},
{
"name": "user_created",
"ordinal": 13,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "user_created"
}
}
},
{
"name": "description",
"ordinal": 14,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "description"
}
}
},
{
"name": "tags",
"ordinal": 15,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "tags"
}
}
},
{
"name": "cover_path",
"ordinal": 16,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "cover_path"
}
}
}
],
"parameters": {
"Right": 3
},
"nullable": [
false,
false,
false,
true,
false,
false,
false,
true,
true,
true,
true,
true,
false,
false,
true,
false,
true
]
},
"hash": "4c6d40e97401e1321abccd7f413b49dda16a5bdf29eb90459ac140d8208db479"
}

View file

@ -0,0 +1,12 @@
{
"db_name": "SQLite",
"query": "DELETE FROM artifacts WHERE hash = ?",
"describe": {
"columns": [],
"parameters": {
"Right": 1
},
"nullable": []
},
"hash": "4ce8e2a5f335030cf0b851a92bd08f37b12f571608bbafc0a2e1a083ec73239f"
}

View file

@ -0,0 +1,110 @@
{
"db_name": "SQLite",
"query": "\n SELECT\n cluster_id, hash, cluster_file_name, enabled,\n bundle_name, bundle_version_id, package_id, installed_at\n FROM cluster_artifacts\n WHERE cluster_id = ? AND hash = ? AND bundle_name IS NOT NULL\n ",
"describe": {
"columns": [
{
"name": "cluster_id",
"ordinal": 0,
"type_info": "Integer",
"origin": {
"Table": {
"table": "cluster_artifacts",
"name": "cluster_id"
}
}
},
{
"name": "hash",
"ordinal": 1,
"type_info": "Text",
"origin": {
"Table": {
"table": "cluster_artifacts",
"name": "hash"
}
}
},
{
"name": "cluster_file_name",
"ordinal": 2,
"type_info": "Text",
"origin": {
"Table": {
"table": "cluster_artifacts",
"name": "cluster_file_name"
}
}
},
{
"name": "enabled",
"ordinal": 3,
"type_info": "Integer",
"origin": {
"Table": {
"table": "cluster_artifacts",
"name": "enabled"
}
}
},
{
"name": "bundle_name",
"ordinal": 4,
"type_info": "Text",
"origin": {
"Table": {
"table": "cluster_artifacts",
"name": "bundle_name"
}
}
},
{
"name": "bundle_version_id",
"ordinal": 5,
"type_info": "Text",
"origin": {
"Table": {
"table": "cluster_artifacts",
"name": "bundle_version_id"
}
}
},
{
"name": "package_id",
"ordinal": 6,
"type_info": "Text",
"origin": {
"Table": {
"table": "cluster_artifacts",
"name": "package_id"
}
}
},
{
"name": "installed_at",
"ordinal": 7,
"type_info": "Text",
"origin": {
"Table": {
"table": "cluster_artifacts",
"name": "installed_at"
}
}
}
],
"parameters": {
"Right": 2
},
"nullable": [
false,
false,
false,
false,
true,
true,
true,
true
]
},
"hash": "4d14a10baba86d0d63f6b172873f4fffe319a5de18e34f5f190366a113a8831c"
}

View file

@ -0,0 +1,146 @@
{
"db_name": "SQLite",
"query": "\n\t\tINSERT INTO browser_package_updates (\n\t\t\tcluster_id, hash, provider, project_id,\n\t\t\tinstalled_version_id, installed_version_name,\n\t\t\tlatest_version_id, latest_version_name,\n\t\t\tdisplay_name, checked_at, skipped\n\t\t)\n\t\tVALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 0)\n\t\tON CONFLICT(cluster_id, hash) DO UPDATE SET\n\t\t\tprovider = excluded.provider,\n\t\t\tproject_id = excluded.project_id,\n\t\t\tinstalled_version_id = excluded.installed_version_id,\n\t\t\tinstalled_version_name = excluded.installed_version_name,\n\t\t\tlatest_version_name = excluded.latest_version_name,\n\t\t\tdisplay_name = excluded.display_name,\n\t\t\tchecked_at = excluded.checked_at,\n\t\t\tskipped = CASE\n\t\t\t\tWHEN browser_package_updates.latest_version_id = excluded.latest_version_id\n\t\t\t\tTHEN browser_package_updates.skipped\n\t\t\t\tELSE 0\n\t\t\tEND,\n\t\t\tlatest_version_id = excluded.latest_version_id\n\t\tRETURNING\n\t\t\tcluster_id, hash, provider as \"provider!: i64\", project_id,\n\t\t\tinstalled_version_id, installed_version_name,\n\t\t\tlatest_version_id, latest_version_name,\n\t\t\tdisplay_name, checked_at, skipped\n\t\t",
"describe": {
"columns": [
{
"name": "cluster_id",
"ordinal": 0,
"type_info": "Integer",
"origin": {
"Table": {
"table": "browser_package_updates",
"name": "cluster_id"
}
}
},
{
"name": "hash",
"ordinal": 1,
"type_info": "Text",
"origin": {
"Table": {
"table": "browser_package_updates",
"name": "hash"
}
}
},
{
"name": "provider!: i64",
"ordinal": 2,
"type_info": "Integer",
"origin": {
"Table": {
"table": "browser_package_updates",
"name": "provider"
}
}
},
{
"name": "project_id",
"ordinal": 3,
"type_info": "Text",
"origin": {
"Table": {
"table": "browser_package_updates",
"name": "project_id"
}
}
},
{
"name": "installed_version_id",
"ordinal": 4,
"type_info": "Text",
"origin": {
"Table": {
"table": "browser_package_updates",
"name": "installed_version_id"
}
}
},
{
"name": "installed_version_name",
"ordinal": 5,
"type_info": "Text",
"origin": {
"Table": {
"table": "browser_package_updates",
"name": "installed_version_name"
}
}
},
{
"name": "latest_version_id",
"ordinal": 6,
"type_info": "Text",
"origin": {
"Table": {
"table": "browser_package_updates",
"name": "latest_version_id"
}
}
},
{
"name": "latest_version_name",
"ordinal": 7,
"type_info": "Text",
"origin": {
"Table": {
"table": "browser_package_updates",
"name": "latest_version_name"
}
}
},
{
"name": "display_name",
"ordinal": 8,
"type_info": "Text",
"origin": {
"Table": {
"table": "browser_package_updates",
"name": "display_name"
}
}
},
{
"name": "checked_at",
"ordinal": 9,
"type_info": "Text",
"origin": {
"Table": {
"table": "browser_package_updates",
"name": "checked_at"
}
}
},
{
"name": "skipped",
"ordinal": 10,
"type_info": "Integer",
"origin": {
"Table": {
"table": "browser_package_updates",
"name": "skipped"
}
}
}
],
"parameters": {
"Right": 10
},
"nullable": [
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false
]
},
"hash": "5183d452802d8bbec7f2a52ceba7ffe26960fdc25855f6cc993d6ab5deb84c02"
}

View file

@ -0,0 +1,74 @@
{
"db_name": "SQLite",
"query": "\n\t\tSELECT s.session_started_at, s.address, s.port, s.joined_at, s.disconnected_at\n\t\tFROM game_session_servers s\n\t\tJOIN game_sessions g ON g.started_at = s.session_started_at\n\t\tWHERE g.cluster_id = ?\n\t\tORDER BY s.joined_at ASC\n\t\t",
"describe": {
"columns": [
{
"name": "session_started_at",
"ordinal": 0,
"type_info": "Text",
"origin": {
"Table": {
"table": "game_session_servers",
"name": "session_started_at"
}
}
},
{
"name": "address",
"ordinal": 1,
"type_info": "Text",
"origin": {
"Table": {
"table": "game_session_servers",
"name": "address"
}
}
},
{
"name": "port",
"ordinal": 2,
"type_info": "Integer",
"origin": {
"Table": {
"table": "game_session_servers",
"name": "port"
}
}
},
{
"name": "joined_at",
"ordinal": 3,
"type_info": "Text",
"origin": {
"Table": {
"table": "game_session_servers",
"name": "joined_at"
}
}
},
{
"name": "disconnected_at",
"ordinal": 4,
"type_info": "Text",
"origin": {
"Table": {
"table": "game_session_servers",
"name": "disconnected_at"
}
}
}
],
"parameters": {
"Right": 1
},
"nullable": [
false,
false,
true,
false,
true
]
},
"hash": "53373194f104bdefd553ff6669b53d367c52a142b7afdae2f1bf8c07444d9e30"
}

View file

@ -0,0 +1,12 @@
{
"db_name": "SQLite",
"query": "DELETE FROM clusters WHERE id = ?",
"describe": {
"columns": [],
"parameters": {
"Right": 1
},
"nullable": []
},
"hash": "54da501aee46ee04b6f3c628737cece742d6ce62a230335e56e987b6b1d0996a"
}

View file

@ -0,0 +1,218 @@
{
"db_name": "SQLite",
"query": "\n\t\tINSERT INTO clusters (\n\t\t\tname, folder_name, mc_version, mc_loader, mc_loader_version,\n\t\t\tsetting_profile_name, stage, created_at,\n\t\t\tkind, user_created, description, tags, cover_path\n\t\t)\n\t\tVALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n\t\tRETURNING\n\t\t\tid, name, folder_name, setting_profile_name, mc_version, mc_loader,\n\t\t\tstage, mc_loader_version, created_at, last_played, overall_played, linked_modpack_hash,\n\t\t\tkind, user_created, description, tags, cover_path\n\t\t",
"describe": {
"columns": [
{
"name": "id",
"ordinal": 0,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "id"
}
}
},
{
"name": "name",
"ordinal": 1,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "name"
}
}
},
{
"name": "folder_name",
"ordinal": 2,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "folder_name"
}
}
},
{
"name": "setting_profile_name",
"ordinal": 3,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "setting_profile_name"
}
}
},
{
"name": "mc_version",
"ordinal": 4,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "mc_version"
}
}
},
{
"name": "mc_loader",
"ordinal": 5,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "mc_loader"
}
}
},
{
"name": "stage",
"ordinal": 6,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "stage"
}
}
},
{
"name": "mc_loader_version",
"ordinal": 7,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "mc_loader_version"
}
}
},
{
"name": "created_at",
"ordinal": 8,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "created_at"
}
}
},
{
"name": "last_played",
"ordinal": 9,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "last_played"
}
}
},
{
"name": "overall_played",
"ordinal": 10,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "overall_played"
}
}
},
{
"name": "linked_modpack_hash",
"ordinal": 11,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "linked_modpack_hash"
}
}
},
{
"name": "kind",
"ordinal": 12,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "kind"
}
}
},
{
"name": "user_created",
"ordinal": 13,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "user_created"
}
}
},
{
"name": "description",
"ordinal": 14,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "description"
}
}
},
{
"name": "tags",
"ordinal": 15,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "tags"
}
}
},
{
"name": "cover_path",
"ordinal": 16,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "cover_path"
}
}
}
],
"parameters": {
"Right": 13
},
"nullable": [
false,
false,
false,
false,
false,
false,
false,
true,
true,
true,
true,
true,
false,
false,
true,
false,
true
]
},
"hash": "54dea3f4093ceee9dcd5f0ae9bf072ec3615954b60bffa33bff7fd3f9bf14210"
}

View file

@ -0,0 +1,12 @@
{
"db_name": "SQLite",
"query": "\n INSERT INTO cluster_bundle_overrides (cluster_id, bundle_name, package_id, override_type)\n VALUES (?, ?, ?, ?)\n ON CONFLICT(cluster_id, bundle_name, package_id) DO UPDATE SET\n override_type = excluded.override_type\n ",
"describe": {
"columns": [],
"parameters": {
"Right": 4
},
"nullable": []
},
"hash": "56a95ce1cf65b5628481aeb2c6bbd20f083308b702a51c3e490409c37d0e8549"
}

View file

@ -0,0 +1,170 @@
{
"db_name": "SQLite",
"query": "\n\t\tINSERT INTO setting_profiles (\n\t\t\tname, java_path, resolution, force_fullscreen, mem_max, launch_args, game_args, launch_env,\n\t\t\thook_pre, hook_wrapper, hook_post, os_extra, browser_update_mode\n\t\t)\n\t\tVALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n\t\tON CONFLICT(name) DO UPDATE SET\n\t\t\tjava_path = excluded.java_path,\n\t\t\tresolution = excluded.resolution,\n\t\t\tforce_fullscreen = excluded.force_fullscreen,\n\t\t\tmem_max = excluded.mem_max,\n\t\t\tlaunch_args = excluded.launch_args,\n\t\t\tgame_args = excluded.game_args,\n\t\t\tlaunch_env = excluded.launch_env,\n\t\t\thook_pre = excluded.hook_pre,\n\t\t\thook_wrapper = excluded.hook_wrapper,\n\t\t\thook_post = excluded.hook_post,\n\t\t\tos_extra = excluded.os_extra,\n\t\t\tbrowser_update_mode = excluded.browser_update_mode\n\t\tRETURNING name, java_path, resolution, force_fullscreen, mem_max, launch_args, game_args, launch_env,\n hook_pre, hook_wrapper, hook_post, os_extra, browser_update_mode\n\t\t",
"describe": {
"columns": [
{
"name": "name",
"ordinal": 0,
"type_info": "Text",
"origin": {
"Table": {
"table": "setting_profiles",
"name": "name"
}
}
},
{
"name": "java_path",
"ordinal": 1,
"type_info": "Text",
"origin": {
"Table": {
"table": "setting_profiles",
"name": "java_path"
}
}
},
{
"name": "resolution",
"ordinal": 2,
"type_info": "Text",
"origin": {
"Table": {
"table": "setting_profiles",
"name": "resolution"
}
}
},
{
"name": "force_fullscreen",
"ordinal": 3,
"type_info": "Integer",
"origin": {
"Table": {
"table": "setting_profiles",
"name": "force_fullscreen"
}
}
},
{
"name": "mem_max",
"ordinal": 4,
"type_info": "Integer",
"origin": {
"Table": {
"table": "setting_profiles",
"name": "mem_max"
}
}
},
{
"name": "launch_args",
"ordinal": 5,
"type_info": "Text",
"origin": {
"Table": {
"table": "setting_profiles",
"name": "launch_args"
}
}
},
{
"name": "game_args",
"ordinal": 6,
"type_info": "Text",
"origin": {
"Table": {
"table": "setting_profiles",
"name": "game_args"
}
}
},
{
"name": "launch_env",
"ordinal": 7,
"type_info": "Text",
"origin": {
"Table": {
"table": "setting_profiles",
"name": "launch_env"
}
}
},
{
"name": "hook_pre",
"ordinal": 8,
"type_info": "Text",
"origin": {
"Table": {
"table": "setting_profiles",
"name": "hook_pre"
}
}
},
{
"name": "hook_wrapper",
"ordinal": 9,
"type_info": "Text",
"origin": {
"Table": {
"table": "setting_profiles",
"name": "hook_wrapper"
}
}
},
{
"name": "hook_post",
"ordinal": 10,
"type_info": "Text",
"origin": {
"Table": {
"table": "setting_profiles",
"name": "hook_post"
}
}
},
{
"name": "os_extra",
"ordinal": 11,
"type_info": "Text",
"origin": {
"Table": {
"table": "setting_profiles",
"name": "os_extra"
}
}
},
{
"name": "browser_update_mode",
"ordinal": 12,
"type_info": "Text",
"origin": {
"Table": {
"table": "setting_profiles",
"name": "browser_update_mode"
}
}
}
],
"parameters": {
"Right": 13
},
"nullable": [
false,
false,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true
]
},
"hash": "598a34a0eb0f4d497cfd9bd77696310d1088e8baec677e07843a21ce6978652e"
}

View file

@ -0,0 +1,12 @@
{
"db_name": "SQLite",
"query": "\n INSERT OR IGNORE INTO cluster_bundle_type_opt_outs (cluster_id, bundle_name, content_type)\n VALUES (?, ?, ?)\n ",
"describe": {
"columns": [],
"parameters": {
"Right": 3
},
"nullable": []
},
"hash": "59a29c97c422e8721c29b9517ae834ea97776c57bb129a9d67007cdd979ae841"
}

View file

@ -0,0 +1,98 @@
{
"db_name": "SQLite",
"query": "\n SELECT id, cluster_id, bundle_name, package_id, bundle_version_id,\n seen_status, queued_at\n FROM cluster_optional_mods\n WHERE cluster_id = ?\n ORDER BY queued_at, id\n ",
"describe": {
"columns": [
{
"name": "id",
"ordinal": 0,
"type_info": "Integer",
"origin": {
"Table": {
"table": "cluster_optional_mods",
"name": "id"
}
}
},
{
"name": "cluster_id",
"ordinal": 1,
"type_info": "Integer",
"origin": {
"Table": {
"table": "cluster_optional_mods",
"name": "cluster_id"
}
}
},
{
"name": "bundle_name",
"ordinal": 2,
"type_info": "Text",
"origin": {
"Table": {
"table": "cluster_optional_mods",
"name": "bundle_name"
}
}
},
{
"name": "package_id",
"ordinal": 3,
"type_info": "Text",
"origin": {
"Table": {
"table": "cluster_optional_mods",
"name": "package_id"
}
}
},
{
"name": "bundle_version_id",
"ordinal": 4,
"type_info": "Text",
"origin": {
"Table": {
"table": "cluster_optional_mods",
"name": "bundle_version_id"
}
}
},
{
"name": "seen_status",
"ordinal": 5,
"type_info": "Integer",
"origin": {
"Table": {
"table": "cluster_optional_mods",
"name": "seen_status"
}
}
},
{
"name": "queued_at",
"ordinal": 6,
"type_info": "Text",
"origin": {
"Table": {
"table": "cluster_optional_mods",
"name": "queued_at"
}
}
}
],
"parameters": {
"Right": 1
},
"nullable": [
false,
false,
false,
false,
false,
false,
false
]
},
"hash": "5b3dd7940a9bd6f0067fac7b5f21e83f8d9eeceda6b1c53c5ce5b735a8fe2a71"
}

View file

@ -0,0 +1,158 @@
{
"db_name": "SQLite",
"query": "\n INSERT INTO bundles (\n remote_path, mc_version, mc_loader, file_name, name, version_id,\n category, loader_version, disk_path, hidden, etag, synced_at\n )\n VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n ON CONFLICT(remote_path) DO UPDATE SET\n mc_version = excluded.mc_version,\n mc_loader = excluded.mc_loader,\n file_name = excluded.file_name,\n name = COALESCE(excluded.name, bundles.name),\n version_id = COALESCE(excluded.version_id, bundles.version_id),\n category = COALESCE(excluded.category, bundles.category),\n loader_version = COALESCE(excluded.loader_version, bundles.loader_version),\n disk_path = excluded.disk_path,\n hidden = excluded.hidden,\n etag = COALESCE(excluded.etag, bundles.etag),\n synced_at = COALESCE(excluded.synced_at, bundles.synced_at)\n RETURNING\n remote_path, mc_version, mc_loader, file_name, name, version_id,\n category, loader_version, disk_path, hidden, etag, synced_at\n ",
"describe": {
"columns": [
{
"name": "remote_path",
"ordinal": 0,
"type_info": "Text",
"origin": {
"Table": {
"table": "bundles",
"name": "remote_path"
}
}
},
{
"name": "mc_version",
"ordinal": 1,
"type_info": "Text",
"origin": {
"Table": {
"table": "bundles",
"name": "mc_version"
}
}
},
{
"name": "mc_loader",
"ordinal": 2,
"type_info": "Integer",
"origin": {
"Table": {
"table": "bundles",
"name": "mc_loader"
}
}
},
{
"name": "file_name",
"ordinal": 3,
"type_info": "Text",
"origin": {
"Table": {
"table": "bundles",
"name": "file_name"
}
}
},
{
"name": "name",
"ordinal": 4,
"type_info": "Text",
"origin": {
"Table": {
"table": "bundles",
"name": "name"
}
}
},
{
"name": "version_id",
"ordinal": 5,
"type_info": "Text",
"origin": {
"Table": {
"table": "bundles",
"name": "version_id"
}
}
},
{
"name": "category",
"ordinal": 6,
"type_info": "Text",
"origin": {
"Table": {
"table": "bundles",
"name": "category"
}
}
},
{
"name": "loader_version",
"ordinal": 7,
"type_info": "Text",
"origin": {
"Table": {
"table": "bundles",
"name": "loader_version"
}
}
},
{
"name": "disk_path",
"ordinal": 8,
"type_info": "Text",
"origin": {
"Table": {
"table": "bundles",
"name": "disk_path"
}
}
},
{
"name": "hidden",
"ordinal": 9,
"type_info": "Integer",
"origin": {
"Table": {
"table": "bundles",
"name": "hidden"
}
}
},
{
"name": "etag",
"ordinal": 10,
"type_info": "Text",
"origin": {
"Table": {
"table": "bundles",
"name": "etag"
}
}
},
{
"name": "synced_at",
"ordinal": 11,
"type_info": "Text",
"origin": {
"Table": {
"table": "bundles",
"name": "synced_at"
}
}
}
],
"parameters": {
"Right": 12
},
"nullable": [
false,
false,
false,
false,
true,
true,
true,
true,
false,
false,
true,
true
]
},
"hash": "5c51104ad11fd39178c9eb43f8c3a9b4f796753ab1fbb28efcbf71562b3fafa1"
}

View file

@ -0,0 +1,158 @@
{
"db_name": "SQLite",
"query": "\n\t\tSELECT\n\t\t\tid, name, folder_name, setting_profile_name, mc_version, mc_loader,\n\t\t\tstage, mc_loader_version, created_at, last_played, overall_played, linked_modpack_hash\n\t\tFROM clusters\n\t\tWHERE mc_version = ? AND mc_loader = ?\n\t\tLIMIT 1\n\t\t",
"describe": {
"columns": [
{
"name": "id",
"ordinal": 0,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "id"
}
}
},
{
"name": "name",
"ordinal": 1,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "name"
}
}
},
{
"name": "folder_name",
"ordinal": 2,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "folder_name"
}
}
},
{
"name": "setting_profile_name",
"ordinal": 3,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "setting_profile_name"
}
}
},
{
"name": "mc_version",
"ordinal": 4,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "mc_version"
}
}
},
{
"name": "mc_loader",
"ordinal": 5,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "mc_loader"
}
}
},
{
"name": "stage",
"ordinal": 6,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "stage"
}
}
},
{
"name": "mc_loader_version",
"ordinal": 7,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "mc_loader_version"
}
}
},
{
"name": "created_at",
"ordinal": 8,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "created_at"
}
}
},
{
"name": "last_played",
"ordinal": 9,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "last_played"
}
}
},
{
"name": "overall_played",
"ordinal": 10,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "overall_played"
}
}
},
{
"name": "linked_modpack_hash",
"ordinal": 11,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "linked_modpack_hash"
}
}
}
],
"parameters": {
"Right": 2
},
"nullable": [
false,
false,
false,
true,
false,
false,
false,
true,
true,
true,
true,
true
]
},
"hash": "5d302dbecf00a8e32014e0cb6ffecab5db70f3f37058b87fc9896028c1e8f644"
}

View file

@ -0,0 +1,218 @@
{
"db_name": "SQLite",
"query": "\n\t\tSELECT\n\t\t\tid, name, folder_name, setting_profile_name, mc_version, mc_loader,\n\t\t\tstage, mc_loader_version, created_at, last_played, overall_played, linked_modpack_hash,\n\t\t\tkind, user_created, description, tags, cover_path\n\t\tFROM clusters\n\t\tWHERE folder_name = ?\n\t\t",
"describe": {
"columns": [
{
"name": "id",
"ordinal": 0,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "id"
}
}
},
{
"name": "name",
"ordinal": 1,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "name"
}
}
},
{
"name": "folder_name",
"ordinal": 2,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "folder_name"
}
}
},
{
"name": "setting_profile_name",
"ordinal": 3,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "setting_profile_name"
}
}
},
{
"name": "mc_version",
"ordinal": 4,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "mc_version"
}
}
},
{
"name": "mc_loader",
"ordinal": 5,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "mc_loader"
}
}
},
{
"name": "stage",
"ordinal": 6,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "stage"
}
}
},
{
"name": "mc_loader_version",
"ordinal": 7,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "mc_loader_version"
}
}
},
{
"name": "created_at",
"ordinal": 8,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "created_at"
}
}
},
{
"name": "last_played",
"ordinal": 9,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "last_played"
}
}
},
{
"name": "overall_played",
"ordinal": 10,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "overall_played"
}
}
},
{
"name": "linked_modpack_hash",
"ordinal": 11,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "linked_modpack_hash"
}
}
},
{
"name": "kind",
"ordinal": 12,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "kind"
}
}
},
{
"name": "user_created",
"ordinal": 13,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "user_created"
}
}
},
{
"name": "description",
"ordinal": 14,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "description"
}
}
},
{
"name": "tags",
"ordinal": 15,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "tags"
}
}
},
{
"name": "cover_path",
"ordinal": 16,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "cover_path"
}
}
}
],
"parameters": {
"Right": 1
},
"nullable": [
false,
false,
false,
true,
false,
false,
false,
true,
true,
true,
true,
true,
false,
false,
true,
false,
true
]
},
"hash": "5e18763a28af3660503e223c35875454b1e3fc4bb10c19d1c286d3e45afdd159"
}

View file

@ -0,0 +1,38 @@
{
"db_name": "SQLite",
"query": "\n SELECT bundle_name, content_type\n FROM cluster_bundle_type_opt_outs\n WHERE cluster_id = ?\n ",
"describe": {
"columns": [
{
"name": "bundle_name",
"ordinal": 0,
"type_info": "Text",
"origin": {
"Table": {
"table": "cluster_bundle_type_opt_outs",
"name": "bundle_name"
}
}
},
{
"name": "content_type",
"ordinal": 1,
"type_info": "Integer",
"origin": {
"Table": {
"table": "cluster_bundle_type_opt_outs",
"name": "content_type"
}
}
}
],
"parameters": {
"Right": 1
},
"nullable": [
false,
false
]
},
"hash": "5f45ecf4e5ac27ad3a7ef4e5f9c2e6466ef51af11c332a2e6089c90759b9871f"
}

View file

@ -0,0 +1,158 @@
{
"db_name": "SQLite",
"query": "\n SELECT\n remote_path, mc_version, mc_loader, file_name, name, version_id,\n category, loader_version, disk_path, hidden, etag, synced_at\n FROM bundles\n WHERE mc_version = ? AND mc_loader = ? AND hidden = 0\n ORDER BY name, file_name\n ",
"describe": {
"columns": [
{
"name": "remote_path",
"ordinal": 0,
"type_info": "Text",
"origin": {
"Table": {
"table": "bundles",
"name": "remote_path"
}
}
},
{
"name": "mc_version",
"ordinal": 1,
"type_info": "Text",
"origin": {
"Table": {
"table": "bundles",
"name": "mc_version"
}
}
},
{
"name": "mc_loader",
"ordinal": 2,
"type_info": "Integer",
"origin": {
"Table": {
"table": "bundles",
"name": "mc_loader"
}
}
},
{
"name": "file_name",
"ordinal": 3,
"type_info": "Text",
"origin": {
"Table": {
"table": "bundles",
"name": "file_name"
}
}
},
{
"name": "name",
"ordinal": 4,
"type_info": "Text",
"origin": {
"Table": {
"table": "bundles",
"name": "name"
}
}
},
{
"name": "version_id",
"ordinal": 5,
"type_info": "Text",
"origin": {
"Table": {
"table": "bundles",
"name": "version_id"
}
}
},
{
"name": "category",
"ordinal": 6,
"type_info": "Text",
"origin": {
"Table": {
"table": "bundles",
"name": "category"
}
}
},
{
"name": "loader_version",
"ordinal": 7,
"type_info": "Text",
"origin": {
"Table": {
"table": "bundles",
"name": "loader_version"
}
}
},
{
"name": "disk_path",
"ordinal": 8,
"type_info": "Text",
"origin": {
"Table": {
"table": "bundles",
"name": "disk_path"
}
}
},
{
"name": "hidden",
"ordinal": 9,
"type_info": "Integer",
"origin": {
"Table": {
"table": "bundles",
"name": "hidden"
}
}
},
{
"name": "etag",
"ordinal": 10,
"type_info": "Text",
"origin": {
"Table": {
"table": "bundles",
"name": "etag"
}
}
},
{
"name": "synced_at",
"ordinal": 11,
"type_info": "Text",
"origin": {
"Table": {
"table": "bundles",
"name": "synced_at"
}
}
}
],
"parameters": {
"Right": 2
},
"nullable": [
false,
false,
false,
false,
true,
true,
true,
true,
false,
false,
true,
true
]
},
"hash": "628245048eb9791987e8d1ac5a97c8364fda672d92ba43b641edf8c028e25186"
}

View file

@ -0,0 +1,12 @@
{
"db_name": "SQLite",
"query": "\n\t\tUPDATE game_session_servers\n\t\tSET disconnected_at = ?\n\t\tWHERE joined_at = ? AND disconnected_at IS NULL\n\t\t",
"describe": {
"columns": [],
"parameters": {
"Right": 2
},
"nullable": []
},
"hash": "6c4518b6e29605c7699e12aa80e8202b0de13f77c7dc9ef0c4a967fab8135e02"
}

View file

@ -0,0 +1,158 @@
{
"db_name": "SQLite",
"query": "\n\t\tUPDATE clusters\n\t\tSET stage = ?\n\t\tWHERE id = ?\n\t\tRETURNING\n\t\t\tid, name, folder_name, setting_profile_name, mc_version, mc_loader,\n\t\t\tstage, mc_loader_version, created_at, last_played, overall_played, linked_modpack_hash\n\t\t",
"describe": {
"columns": [
{
"name": "id",
"ordinal": 0,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "id"
}
}
},
{
"name": "name",
"ordinal": 1,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "name"
}
}
},
{
"name": "folder_name",
"ordinal": 2,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "folder_name"
}
}
},
{
"name": "setting_profile_name",
"ordinal": 3,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "setting_profile_name"
}
}
},
{
"name": "mc_version",
"ordinal": 4,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "mc_version"
}
}
},
{
"name": "mc_loader",
"ordinal": 5,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "mc_loader"
}
}
},
{
"name": "stage",
"ordinal": 6,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "stage"
}
}
},
{
"name": "mc_loader_version",
"ordinal": 7,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "mc_loader_version"
}
}
},
{
"name": "created_at",
"ordinal": 8,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "created_at"
}
}
},
{
"name": "last_played",
"ordinal": 9,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "last_played"
}
}
},
{
"name": "overall_played",
"ordinal": 10,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "overall_played"
}
}
},
{
"name": "linked_modpack_hash",
"ordinal": 11,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "linked_modpack_hash"
}
}
}
],
"parameters": {
"Right": 2
},
"nullable": [
false,
false,
false,
true,
false,
false,
false,
true,
true,
true,
true,
true
]
},
"hash": "70b38391613b4f5d538c18e08014661d57dc172286b91235ab034a827fcc061e"
}

View file

@ -0,0 +1,12 @@
{
"db_name": "SQLite",
"query": "\n\t\tUPDATE game_sessions\n\t\tSET pid = ?, pid_started_at = ?\n\t\tWHERE started_at = ?\n\t\t",
"describe": {
"columns": [],
"parameters": {
"Right": 3
},
"nullable": []
},
"hash": "71fbe674b85a1fd6dc07a062e96a35888bb3b6a5a4fda5df3c662ca16b1d801e"
}

View file

@ -0,0 +1,110 @@
{
"db_name": "SQLite",
"query": "\n\t\tSELECT\n\t\t\tcluster_id, started_at, ended_at, exit_code,\n\t\t\tram_allocated_mb, mods_enabled, java_vendor, java_version\n\t\tFROM game_sessions\n\t\tWHERE cluster_id = ?\n\t\tORDER BY started_at DESC\n\t\t",
"describe": {
"columns": [
{
"name": "cluster_id",
"ordinal": 0,
"type_info": "Integer",
"origin": {
"Table": {
"table": "game_sessions",
"name": "cluster_id"
}
}
},
{
"name": "started_at",
"ordinal": 1,
"type_info": "Text",
"origin": {
"Table": {
"table": "game_sessions",
"name": "started_at"
}
}
},
{
"name": "ended_at",
"ordinal": 2,
"type_info": "Text",
"origin": {
"Table": {
"table": "game_sessions",
"name": "ended_at"
}
}
},
{
"name": "exit_code",
"ordinal": 3,
"type_info": "Integer",
"origin": {
"Table": {
"table": "game_sessions",
"name": "exit_code"
}
}
},
{
"name": "ram_allocated_mb",
"ordinal": 4,
"type_info": "Integer",
"origin": {
"Table": {
"table": "game_sessions",
"name": "ram_allocated_mb"
}
}
},
{
"name": "mods_enabled",
"ordinal": 5,
"type_info": "Integer",
"origin": {
"Table": {
"table": "game_sessions",
"name": "mods_enabled"
}
}
},
{
"name": "java_vendor",
"ordinal": 6,
"type_info": "Text",
"origin": {
"Table": {
"table": "game_sessions",
"name": "java_vendor"
}
}
},
{
"name": "java_version",
"ordinal": 7,
"type_info": "Text",
"origin": {
"Table": {
"table": "game_sessions",
"name": "java_version"
}
}
}
],
"parameters": {
"Right": 1
},
"nullable": [
false,
false,
true,
true,
false,
false,
true,
true
]
},
"hash": "7d5011427a55581c66ea9d8ade35b33ced5913589907d80f4b20159150e1d1f1"
}

View file

@ -0,0 +1,12 @@
{
"db_name": "SQLite",
"query": "\n UPDATE cluster_artifacts\n SET bundle_name = NULL, bundle_version_id = NULL, package_id = NULL, installed_at = NULL\n WHERE cluster_id = ? AND hash = ?\n ",
"describe": {
"columns": [],
"parameters": {
"Right": 2
},
"nullable": []
},
"hash": "80e69ca0c87bb70e0fcf7bf6c0aefc092f51300c10ad8776815637fc4616d12b"
}

View file

@ -0,0 +1,12 @@
{
"db_name": "SQLite",
"query": "INSERT OR IGNORE INTO applied_migrations (id, applied_at) VALUES (?, ?)",
"describe": {
"columns": [],
"parameters": {
"Right": 2
},
"nullable": []
},
"hash": "836429d5d4054d1605d7de4cbcf3703ba78d72f39b3090734bb3e69c2b72d50c"
}

View file

@ -0,0 +1,170 @@
{
"db_name": "SQLite",
"query": "\n\t\tSELECT name, java_path, resolution, force_fullscreen, mem_max, launch_args, game_args, launch_env,\n\t\t hook_pre, hook_wrapper, hook_post, os_extra, browser_update_mode\n\t\tFROM setting_profiles\n\t\tWHERE name = ?\n\t\t",
"describe": {
"columns": [
{
"name": "name",
"ordinal": 0,
"type_info": "Text",
"origin": {
"Table": {
"table": "setting_profiles",
"name": "name"
}
}
},
{
"name": "java_path",
"ordinal": 1,
"type_info": "Text",
"origin": {
"Table": {
"table": "setting_profiles",
"name": "java_path"
}
}
},
{
"name": "resolution",
"ordinal": 2,
"type_info": "Text",
"origin": {
"Table": {
"table": "setting_profiles",
"name": "resolution"
}
}
},
{
"name": "force_fullscreen",
"ordinal": 3,
"type_info": "Integer",
"origin": {
"Table": {
"table": "setting_profiles",
"name": "force_fullscreen"
}
}
},
{
"name": "mem_max",
"ordinal": 4,
"type_info": "Integer",
"origin": {
"Table": {
"table": "setting_profiles",
"name": "mem_max"
}
}
},
{
"name": "launch_args",
"ordinal": 5,
"type_info": "Text",
"origin": {
"Table": {
"table": "setting_profiles",
"name": "launch_args"
}
}
},
{
"name": "game_args",
"ordinal": 6,
"type_info": "Text",
"origin": {
"Table": {
"table": "setting_profiles",
"name": "game_args"
}
}
},
{
"name": "launch_env",
"ordinal": 7,
"type_info": "Text",
"origin": {
"Table": {
"table": "setting_profiles",
"name": "launch_env"
}
}
},
{
"name": "hook_pre",
"ordinal": 8,
"type_info": "Text",
"origin": {
"Table": {
"table": "setting_profiles",
"name": "hook_pre"
}
}
},
{
"name": "hook_wrapper",
"ordinal": 9,
"type_info": "Text",
"origin": {
"Table": {
"table": "setting_profiles",
"name": "hook_wrapper"
}
}
},
{
"name": "hook_post",
"ordinal": 10,
"type_info": "Text",
"origin": {
"Table": {
"table": "setting_profiles",
"name": "hook_post"
}
}
},
{
"name": "os_extra",
"ordinal": 11,
"type_info": "Text",
"origin": {
"Table": {
"table": "setting_profiles",
"name": "os_extra"
}
}
},
{
"name": "browser_update_mode",
"ordinal": 12,
"type_info": "Text",
"origin": {
"Table": {
"table": "setting_profiles",
"name": "browser_update_mode"
}
}
}
],
"parameters": {
"Right": 1
},
"nullable": [
false,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true
]
},
"hash": "86e3ba70da419464c0be3b3971f613c5a112558472cf2dcdeffa5907e3785318"
}

View file

@ -0,0 +1,12 @@
{
"db_name": "SQLite",
"query": "\n\t\tINSERT INTO package_metadata (provider, project_id, name, summary, author, icon_url, updated_at)\n\t\tVALUES (?, ?, ?, ?, ?, ?, datetime('now'))\n\t\tON CONFLICT(provider, project_id) DO UPDATE SET\n\t\t\tname = excluded.name,\n\t\t\tsummary = excluded.summary,\n\t\t\tauthor = excluded.author,\n\t\t\ticon_url = excluded.icon_url,\n\t\t\tupdated_at = excluded.updated_at\n\t\t",
"describe": {
"columns": [],
"parameters": {
"Right": 6
},
"nullable": []
},
"hash": "8efa8fcf00c6aca1714253c35f3850f3bf1f02bebabd8239716c2b3f2853dfcd"
}

View file

@ -0,0 +1,122 @@
{
"db_name": "SQLite",
"query": "\n\t\tSELECT\n\t\t\tprovider as \"provider!: i64\", project_id, version_id, hash,\n\t\t\tdisplay_name, display_version, published_at, mc_versions, mc_loaders\n\t\tFROM provider_releases\n\t\tWHERE provider = ? AND project_id = ? AND version_id = ?\n\t\t",
"describe": {
"columns": [
{
"name": "provider!: i64",
"ordinal": 0,
"type_info": "Integer",
"origin": {
"Table": {
"table": "provider_releases",
"name": "provider"
}
}
},
{
"name": "project_id",
"ordinal": 1,
"type_info": "Text",
"origin": {
"Table": {
"table": "provider_releases",
"name": "project_id"
}
}
},
{
"name": "version_id",
"ordinal": 2,
"type_info": "Text",
"origin": {
"Table": {
"table": "provider_releases",
"name": "version_id"
}
}
},
{
"name": "hash",
"ordinal": 3,
"type_info": "Text",
"origin": {
"Table": {
"table": "provider_releases",
"name": "hash"
}
}
},
{
"name": "display_name",
"ordinal": 4,
"type_info": "Text",
"origin": {
"Table": {
"table": "provider_releases",
"name": "display_name"
}
}
},
{
"name": "display_version",
"ordinal": 5,
"type_info": "Text",
"origin": {
"Table": {
"table": "provider_releases",
"name": "display_version"
}
}
},
{
"name": "published_at",
"ordinal": 6,
"type_info": "Text",
"origin": {
"Table": {
"table": "provider_releases",
"name": "published_at"
}
}
},
{
"name": "mc_versions",
"ordinal": 7,
"type_info": "Text",
"origin": {
"Table": {
"table": "provider_releases",
"name": "mc_versions"
}
}
},
{
"name": "mc_loaders",
"ordinal": 8,
"type_info": "Text",
"origin": {
"Table": {
"table": "provider_releases",
"name": "mc_loaders"
}
}
}
],
"parameters": {
"Right": 3
},
"nullable": [
false,
false,
false,
false,
false,
false,
true,
false,
false
]
},
"hash": "968efdce37d30ac18897c64536707be05abf1a8a20b730075288e20d6166044f"
}

View file

@ -0,0 +1,158 @@
{
"db_name": "SQLite",
"query": "\n\t\tSELECT\n\t\t\tid, name, folder_name, setting_profile_name, mc_version, mc_loader,\n\t\t\tstage, mc_loader_version, created_at, last_played, overall_played, linked_modpack_hash\n\t\tFROM clusters\n\t\tWHERE folder_name = ?\n\t\t",
"describe": {
"columns": [
{
"name": "id",
"ordinal": 0,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "id"
}
}
},
{
"name": "name",
"ordinal": 1,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "name"
}
}
},
{
"name": "folder_name",
"ordinal": 2,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "folder_name"
}
}
},
{
"name": "setting_profile_name",
"ordinal": 3,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "setting_profile_name"
}
}
},
{
"name": "mc_version",
"ordinal": 4,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "mc_version"
}
}
},
{
"name": "mc_loader",
"ordinal": 5,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "mc_loader"
}
}
},
{
"name": "stage",
"ordinal": 6,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "stage"
}
}
},
{
"name": "mc_loader_version",
"ordinal": 7,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "mc_loader_version"
}
}
},
{
"name": "created_at",
"ordinal": 8,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "created_at"
}
}
},
{
"name": "last_played",
"ordinal": 9,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "last_played"
}
}
},
{
"name": "overall_played",
"ordinal": 10,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "overall_played"
}
}
},
{
"name": "linked_modpack_hash",
"ordinal": 11,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "linked_modpack_hash"
}
}
}
],
"parameters": {
"Right": 1
},
"nullable": [
false,
false,
false,
true,
false,
false,
false,
true,
true,
true,
true,
true
]
},
"hash": "97d17b2c905bdd08abf41039e31972d10b5ac1d6b0d4df02f42edbf250d81782"
}

View file

@ -0,0 +1,158 @@
{
"db_name": "SQLite",
"query": "\n\t\tSELECT name, java_path, resolution, force_fullscreen, mem_max, launch_args, launch_env,\n\t\t hook_pre, hook_wrapper, hook_post, os_extra, browser_update_mode\n\t\tFROM setting_profiles\n\t\tWHERE name = ?\n\t\t",
"describe": {
"columns": [
{
"name": "name",
"ordinal": 0,
"type_info": "Text",
"origin": {
"Table": {
"table": "setting_profiles",
"name": "name"
}
}
},
{
"name": "java_path",
"ordinal": 1,
"type_info": "Text",
"origin": {
"Table": {
"table": "setting_profiles",
"name": "java_path"
}
}
},
{
"name": "resolution",
"ordinal": 2,
"type_info": "Text",
"origin": {
"Table": {
"table": "setting_profiles",
"name": "resolution"
}
}
},
{
"name": "force_fullscreen",
"ordinal": 3,
"type_info": "Integer",
"origin": {
"Table": {
"table": "setting_profiles",
"name": "force_fullscreen"
}
}
},
{
"name": "mem_max",
"ordinal": 4,
"type_info": "Integer",
"origin": {
"Table": {
"table": "setting_profiles",
"name": "mem_max"
}
}
},
{
"name": "launch_args",
"ordinal": 5,
"type_info": "Text",
"origin": {
"Table": {
"table": "setting_profiles",
"name": "launch_args"
}
}
},
{
"name": "launch_env",
"ordinal": 6,
"type_info": "Text",
"origin": {
"Table": {
"table": "setting_profiles",
"name": "launch_env"
}
}
},
{
"name": "hook_pre",
"ordinal": 7,
"type_info": "Text",
"origin": {
"Table": {
"table": "setting_profiles",
"name": "hook_pre"
}
}
},
{
"name": "hook_wrapper",
"ordinal": 8,
"type_info": "Text",
"origin": {
"Table": {
"table": "setting_profiles",
"name": "hook_wrapper"
}
}
},
{
"name": "hook_post",
"ordinal": 9,
"type_info": "Text",
"origin": {
"Table": {
"table": "setting_profiles",
"name": "hook_post"
}
}
},
{
"name": "os_extra",
"ordinal": 10,
"type_info": "Text",
"origin": {
"Table": {
"table": "setting_profiles",
"name": "os_extra"
}
}
},
{
"name": "browser_update_mode",
"ordinal": 11,
"type_info": "Text",
"origin": {
"Table": {
"table": "setting_profiles",
"name": "browser_update_mode"
}
}
}
],
"parameters": {
"Right": 1
},
"nullable": [
false,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true,
true
]
},
"hash": "98500a40f7e1ca7df79dd0ca90eaaa4f0b079ccbd757e5db1a8229ea58d2e700"
}

View file

@ -0,0 +1,33 @@
{
"db_name": "SQLite",
"query": "\n\t\tSELECT s.address AS \"address!\", COUNT(*) AS \"joins!: i64\"\n\t\tFROM game_session_servers s\n\t\tJOIN game_sessions g ON g.started_at = s.session_started_at\n\t\tWHERE g.cluster_id = ?\n\t\tGROUP BY s.address\n\t\tORDER BY COUNT(*) DESC\n\t\t",
"describe": {
"columns": [
{
"name": "address!",
"ordinal": 0,
"type_info": "Text",
"origin": {
"Table": {
"table": "game_session_servers",
"name": "address"
}
}
},
{
"name": "joins!: i64",
"ordinal": 1,
"type_info": "Integer",
"origin": "Expression"
}
],
"parameters": {
"Right": 1
},
"nullable": [
false,
false
]
},
"hash": "9882797c904aa209f9cd6504ddb938a45c3a1dde7fe82f61aa78012f372a3263"
}

View file

@ -0,0 +1,218 @@
{
"db_name": "SQLite",
"query": "\n\t\tSELECT\n\t\t\tid, name, folder_name, setting_profile_name, mc_version, mc_loader,\n\t\t\tstage, mc_loader_version, created_at, last_played, overall_played, linked_modpack_hash,\n\t\t\tkind, user_created, description, tags, cover_path\n\t\tFROM clusters\n\t\tWHERE id = ?\n\t\t",
"describe": {
"columns": [
{
"name": "id",
"ordinal": 0,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "id"
}
}
},
{
"name": "name",
"ordinal": 1,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "name"
}
}
},
{
"name": "folder_name",
"ordinal": 2,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "folder_name"
}
}
},
{
"name": "setting_profile_name",
"ordinal": 3,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "setting_profile_name"
}
}
},
{
"name": "mc_version",
"ordinal": 4,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "mc_version"
}
}
},
{
"name": "mc_loader",
"ordinal": 5,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "mc_loader"
}
}
},
{
"name": "stage",
"ordinal": 6,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "stage"
}
}
},
{
"name": "mc_loader_version",
"ordinal": 7,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "mc_loader_version"
}
}
},
{
"name": "created_at",
"ordinal": 8,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "created_at"
}
}
},
{
"name": "last_played",
"ordinal": 9,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "last_played"
}
}
},
{
"name": "overall_played",
"ordinal": 10,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "overall_played"
}
}
},
{
"name": "linked_modpack_hash",
"ordinal": 11,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "linked_modpack_hash"
}
}
},
{
"name": "kind",
"ordinal": 12,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "kind"
}
}
},
{
"name": "user_created",
"ordinal": 13,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "user_created"
}
}
},
{
"name": "description",
"ordinal": 14,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "description"
}
}
},
{
"name": "tags",
"ordinal": 15,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "tags"
}
}
},
{
"name": "cover_path",
"ordinal": 16,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "cover_path"
}
}
}
],
"parameters": {
"Right": 1
},
"nullable": [
false,
false,
false,
true,
false,
false,
false,
true,
true,
true,
true,
true,
false,
false,
true,
false,
true
]
},
"hash": "9b769a1467201ee998290c51b2cf51144a34c01975b898ee749b4e2111856119"
}

View file

@ -0,0 +1,218 @@
{
"db_name": "SQLite",
"query": "\n\t\tUPDATE clusters\n\t\tSET name = ?,\n\t\t setting_profile_name = ?,\n\t\t mc_loader_version = ?,\n\t\t linked_modpack_hash = ?,\n\t\t description = ?,\n\t\t tags = ?,\n\t\t cover_path = ?\n\t\tWHERE id = ?\n\t\tRETURNING\n\t\t\tid, name, folder_name, setting_profile_name, mc_version, mc_loader,\n\t\t\tstage, mc_loader_version, created_at, last_played, overall_played, linked_modpack_hash,\n\t\t\tkind, user_created, description, tags, cover_path\n\t\t",
"describe": {
"columns": [
{
"name": "id",
"ordinal": 0,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "id"
}
}
},
{
"name": "name",
"ordinal": 1,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "name"
}
}
},
{
"name": "folder_name",
"ordinal": 2,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "folder_name"
}
}
},
{
"name": "setting_profile_name",
"ordinal": 3,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "setting_profile_name"
}
}
},
{
"name": "mc_version",
"ordinal": 4,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "mc_version"
}
}
},
{
"name": "mc_loader",
"ordinal": 5,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "mc_loader"
}
}
},
{
"name": "stage",
"ordinal": 6,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "stage"
}
}
},
{
"name": "mc_loader_version",
"ordinal": 7,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "mc_loader_version"
}
}
},
{
"name": "created_at",
"ordinal": 8,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "created_at"
}
}
},
{
"name": "last_played",
"ordinal": 9,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "last_played"
}
}
},
{
"name": "overall_played",
"ordinal": 10,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "overall_played"
}
}
},
{
"name": "linked_modpack_hash",
"ordinal": 11,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "linked_modpack_hash"
}
}
},
{
"name": "kind",
"ordinal": 12,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "kind"
}
}
},
{
"name": "user_created",
"ordinal": 13,
"type_info": "Integer",
"origin": {
"Table": {
"table": "clusters",
"name": "user_created"
}
}
},
{
"name": "description",
"ordinal": 14,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "description"
}
}
},
{
"name": "tags",
"ordinal": 15,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "tags"
}
}
},
{
"name": "cover_path",
"ordinal": 16,
"type_info": "Text",
"origin": {
"Table": {
"table": "clusters",
"name": "cover_path"
}
}
}
],
"parameters": {
"Right": 8
},
"nullable": [
false,
false,
false,
false,
false,
false,
false,
true,
true,
true,
true,
true,
false,
false,
true,
false,
true
]
},
"hash": "9e4cbbc2c299861132749196c4e248e4309c2449e181b3b9ae16e7f7b4d9e627"
}

View file

@ -0,0 +1,38 @@
{
"db_name": "SQLite",
"query": "\n\t\tSELECT started_at, ended_at\n\t\tFROM game_sessions\n\t\tWHERE cluster_id = ? AND ended_at IS NOT NULL\n\t\tORDER BY started_at ASC\n\t\t",
"describe": {
"columns": [
{
"name": "started_at",
"ordinal": 0,
"type_info": "Text",
"origin": {
"Table": {
"table": "game_sessions",
"name": "started_at"
}
}
},
{
"name": "ended_at",
"ordinal": 1,
"type_info": "Text",
"origin": {
"Table": {
"table": "game_sessions",
"name": "ended_at"
}
}
}
],
"parameters": {
"Right": 1
},
"nullable": [
false,
true
]
},
"hash": "a5b7826e41c36b5c781d9e6c012a32dce67133c35f44119a81996f3fc9145a4e"
}

View file

@ -0,0 +1,158 @@
{
"db_name": "SQLite",
"query": "\n SELECT\n remote_path, mc_version, mc_loader, file_name, name, version_id,\n category, loader_version, disk_path, hidden, etag, synced_at\n FROM bundles\n WHERE remote_path = ?\n ",
"describe": {
"columns": [
{
"name": "remote_path",
"ordinal": 0,
"type_info": "Text",
"origin": {
"Table": {
"table": "bundles",
"name": "remote_path"
}
}
},
{
"name": "mc_version",
"ordinal": 1,
"type_info": "Text",
"origin": {
"Table": {
"table": "bundles",
"name": "mc_version"
}
}
},
{
"name": "mc_loader",
"ordinal": 2,
"type_info": "Integer",
"origin": {
"Table": {
"table": "bundles",
"name": "mc_loader"
}
}
},
{
"name": "file_name",
"ordinal": 3,
"type_info": "Text",
"origin": {
"Table": {
"table": "bundles",
"name": "file_name"
}
}
},
{
"name": "name",
"ordinal": 4,
"type_info": "Text",
"origin": {
"Table": {
"table": "bundles",
"name": "name"
}
}
},
{
"name": "version_id",
"ordinal": 5,
"type_info": "Text",
"origin": {
"Table": {
"table": "bundles",
"name": "version_id"
}
}
},
{
"name": "category",
"ordinal": 6,
"type_info": "Text",
"origin": {
"Table": {
"table": "bundles",
"name": "category"
}
}
},
{
"name": "loader_version",
"ordinal": 7,
"type_info": "Text",
"origin": {
"Table": {
"table": "bundles",
"name": "loader_version"
}
}
},
{
"name": "disk_path",
"ordinal": 8,
"type_info": "Text",
"origin": {
"Table": {
"table": "bundles",
"name": "disk_path"
}
}
},
{
"name": "hidden",
"ordinal": 9,
"type_info": "Integer",
"origin": {
"Table": {
"table": "bundles",
"name": "hidden"
}
}
},
{
"name": "etag",
"ordinal": 10,
"type_info": "Text",
"origin": {
"Table": {
"table": "bundles",
"name": "etag"
}
}
},
{
"name": "synced_at",
"ordinal": 11,
"type_info": "Text",
"origin": {
"Table": {
"table": "bundles",
"name": "synced_at"
}
}
}
],
"parameters": {
"Right": 1
},
"nullable": [
false,
false,
false,
false,
true,
true,
true,
true,
false,
false,
true,
true
]
},
"hash": "a68c066d19000056ed56251834ecf6d83ed846b9b65132a46ccb14de5abe9391"
}

View file

@ -0,0 +1,21 @@
{
"db_name": "SQLite",
"query": "\n SELECT 1 FROM cluster_artifacts\n WHERE cluster_id = ? AND bundle_name IS NOT NULL AND package_id = ?\n LIMIT 1\n ",
"describe": {
"columns": [
{
"name": "1",
"ordinal": 0,
"type_info": "Integer",
"origin": "Expression"
}
],
"parameters": {
"Right": 2
},
"nullable": [
false
]
},
"hash": "ab6dcea84a9502d5f8396a207ae613a4c41eb729ca22249f15eb45e6c6030094"
}

View file

@ -0,0 +1,12 @@
{
"db_name": "SQLite",
"query": "\n DELETE FROM java_versions WHERE absolute_path = ?\n ",
"describe": {
"columns": [],
"parameters": {
"Right": 1
},
"nullable": []
},
"hash": "ade5a33ae1812b878e1ad43f6e2758d1103037947f14aeff5794511f1c002d55"
}

Some files were not shown because too many files have changed in this diff Show more