Compare commits
429 commits
oneclient-
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| c9282706f0 | |||
| 2eff59c883 | |||
| f3355bd180 | |||
| d28fd9ce46 | |||
| e99da40629 | |||
| a8826b83d3 | |||
| e06775aae5 | |||
| e4555c4b8e | |||
| 0a29f0ab47 | |||
| 8d7939c041 | |||
| 1e66c9216c | |||
| b979feff0c | |||
| 8652be8b87 | |||
| 6793d6f68f | |||
| 40838abf2d | |||
|
|
1d6ec59825 | ||
|
|
2ae679d220 | ||
|
|
56d73e3ab1 | ||
|
|
011c4416b1 | ||
|
|
76e4cac6f4 | ||
|
|
6ee7bdb443 | ||
|
|
97d4477c69 | ||
|
|
51cb12c964 | ||
|
|
a976a66c8b | ||
|
|
2f5a64b97d | ||
|
|
c6361c7266 | ||
|
|
61d24b688e | ||
|
|
d21c0dc22b | ||
| 2b1bfd1485 | |||
|
|
5a8728ef04 | ||
|
|
1b633adcf2 | ||
|
|
66b4ab4e64 | ||
|
|
0f21171fe2 | ||
|
|
d073e10a3b | ||
|
|
e7ddd85960 | ||
|
|
abf708fdb4 | ||
|
|
1ab294f293 | ||
|
|
7683651ad4 | ||
|
|
a9fab65a0b | ||
|
|
c765a3c2d4 | ||
|
|
0621da9db0 | ||
|
|
97852aea41 | ||
|
|
7a6a7cbc0b | ||
|
|
7c304a2d3a | ||
|
|
b2384afb4e | ||
|
|
c43272683b | ||
|
|
cfcf7a7669 | ||
|
|
a2a3e5b7b1 | ||
|
|
a3d90cc2ce | ||
|
|
ee7c84901f | ||
|
|
ad6ca92519 | ||
|
|
fb80e6eb60 | ||
|
|
a8ba800dba | ||
|
|
ed6b014aac | ||
|
|
17a99b671e | ||
|
|
e2db158653 | ||
|
|
80e7cf0e59 | ||
|
|
538a0da24d | ||
|
|
03c4412d15 | ||
|
|
7402fb6e78 | ||
|
|
e74eb60ba2 | ||
|
|
6f415d65e0 | ||
|
|
7bc9064469 | ||
|
|
30f0e1843e | ||
|
|
959458abde | ||
|
|
76d929b82a | ||
|
|
efbde53326 | ||
|
|
190723a4f8 | ||
|
|
0e98be3d5a | ||
|
|
0b78f16e9a | ||
|
|
b86080ac62 | ||
|
|
67cfc4eb83 | ||
|
|
fc3046d60e | ||
|
|
03c00b4199 | ||
|
|
51608f7d94 | ||
|
|
13e52ab3ec | ||
|
|
cd122e877e | ||
|
|
b2a84490ed | ||
|
|
4995276c51 | ||
|
|
50bf2c07ee | ||
|
|
3ef452d451 | ||
|
|
65a9c670cc | ||
|
|
0512727c22 | ||
|
|
9b6f872a8d | ||
|
|
06fa7739b3 | ||
|
|
d630c27a88 | ||
|
|
e1be4c8bcc | ||
|
|
c9c4c9536b | ||
|
|
b2a62f8e17 | ||
|
|
ef5847f417 | ||
|
|
55125b551f | ||
|
|
0ab544f265 | ||
|
|
bdb9780794 | ||
|
|
1574d1afb1 | ||
|
|
95eba5503f | ||
|
|
00237d5281 | ||
|
|
495dbf05dc | ||
|
|
45da20fac2 | ||
|
|
abb41dcc52 | ||
|
|
48a25f0c2c | ||
|
|
7f1a3176cf | ||
|
|
f94ca969b0 | ||
|
|
695406145f | ||
|
|
b3b436bc3e | ||
|
|
abc452f294 | ||
|
|
ac66752b99 | ||
|
|
35dcd584d0 | ||
|
|
8e66212596 | ||
|
|
7ca7ac04cf | ||
|
|
d632c47320 | ||
|
|
5f7b624d82 | ||
|
|
e675b99300 | ||
|
|
520e6c1ef1 | ||
|
|
3a5f06e8ac | ||
|
|
36a925da06 | ||
|
|
2f7476ba6e | ||
| a83bda9b53 | |||
| 70e34d1b66 | |||
| 7bb797eb16 | |||
| 017c9a85f9 | |||
|
|
80e7d4d4f8 | ||
| 700b11a3ce | |||
|
|
ac52d55cf2 | ||
|
|
850c695f91 | ||
|
|
a8cc4e8b7f | ||
|
|
45a970c38a | ||
|
|
daaa209b30 | ||
| 991a85c589 | |||
|
|
e0947848f9 | ||
|
|
dad96c8d40 | ||
|
|
c7f3fdc52b | ||
|
|
43108bc8bc | ||
|
|
e25c3e8243 | ||
|
|
9dccb42fd1 | ||
| 8093cafd53 | |||
| d214afe99b | |||
| 618731da7d | |||
|
|
41ce177483 | ||
|
|
09509b1b3d | ||
| 936e4247a3 | |||
|
|
ec055f3043 | ||
|
|
a2859e6681 | ||
|
|
a00e11d204 | ||
|
|
b4f067483a | ||
|
|
d32d3e1782 | ||
|
|
0a6c9e0f74 | ||
|
|
9879eb2e72 | ||
|
|
c3a45371dd | ||
|
|
ebb476029f | ||
|
|
84bbf29882 | ||
|
|
6ceba7480f | ||
|
|
db764e63f9 | ||
|
|
80ba104861 | ||
|
|
2e0ba533fe | ||
|
|
a8bdf997d9 | ||
|
|
b737e39d1b | ||
|
|
d2d486db06 | ||
|
|
297abeac00 | ||
|
|
3d311c6ee3 | ||
|
|
5d8db4abf7 | ||
|
|
54980fa73a | ||
|
|
cad4800835 | ||
|
|
576c93c96b | ||
|
|
ba74bedf92 | ||
|
|
a6c03c6f6d | ||
|
|
53b27a1c7b | ||
|
|
44dfa32233 | ||
|
|
fe8bb6bfcc | ||
|
|
4932b61a72 | ||
|
|
0785e58d07 | ||
| 1b5e9eb942 | |||
|
|
2378f74e58 | ||
|
|
7b95412511 | ||
|
|
a70a8a4ffa | ||
| 163eb0ac0c | |||
|
|
0e49c69176 | ||
|
|
322c3d5420 | ||
|
|
f55f816342 | ||
|
|
068ea1beaa | ||
|
|
275abd13b7 | ||
|
|
3d0c880096 | ||
|
|
776b5a8562 | ||
|
|
7560d7e8b9 | ||
|
|
3f66e14db3 | ||
|
|
37001e7a7c | ||
|
|
bd8dc0424c | ||
|
|
6e2516e547 | ||
|
|
f8f6ef8f07 | ||
|
|
3dddbb433e | ||
|
|
7780a8900c | ||
|
|
0217a54518 | ||
|
|
612cd9e2a8 | ||
|
|
ca43e56455 | ||
|
|
09073319b1 | ||
|
|
84d1cf558c | ||
|
|
ea7b1bc922 | ||
|
|
b697efce1a | ||
|
|
6ef57bffe2 | ||
|
|
acd2c1d183 | ||
|
|
86f3049564 | ||
|
|
ba60ce4d32 | ||
|
|
2cc280bbb0 | ||
|
|
90fb354857 | ||
|
|
72a9b63f24 | ||
|
|
86145c7180 | ||
|
|
e40c0185c4 | ||
|
|
2c43aa16ba | ||
|
|
4aaf974f04 | ||
|
|
159e1c7e96 | ||
|
|
2a36bb8a88 | ||
|
|
f55a86a024 | ||
|
|
12783fe59a | ||
|
|
b2c2289853 | ||
| c063430e26 | |||
|
|
0251456b11 | ||
|
|
a104c4979a | ||
|
|
fb33693f7d | ||
|
|
25651d0cbc | ||
|
|
b25ff12ab5 | ||
|
|
606a15905d | ||
| a2ca929e0a | |||
| 1f979f5717 | |||
| 70b6b0c8b1 | |||
| 31c294b02a | |||
| d1f5a715b8 | |||
| f438445c38 | |||
| f84fec2c35 | |||
| 05dac19dd2 | |||
| f125ac2d0b | |||
| d7618833ef | |||
| b4128fc8f7 | |||
| a3a3d74fd6 | |||
| cea98e9923 | |||
| de9416573a | |||
| 52c29c034e | |||
| 2a040f8e91 | |||
| 005e7ce77b | |||
| 5a7ecf9293 | |||
| 714dadf388 | |||
| a363af6d20 | |||
| 6a20bcfec5 | |||
| 6f7977c734 | |||
| ddfe500494 | |||
| d801eed647 | |||
| bcfe8b8ea4 | |||
| 03b76306c2 | |||
| f17ab744d2 | |||
| 27de1c3bd4 | |||
| a659448ac6 | |||
| 1a552f0c5e | |||
| 47b7ba27a0 | |||
| 8ff958743c | |||
| c603d59908 | |||
| 481ca4d77e | |||
| 853c0beac5 | |||
| c6aca56f27 | |||
| 37a09c12de | |||
| 710c129273 | |||
| f6e7d7a8c1 | |||
| 8cb08872bf | |||
| ca3dc4c638 | |||
| aba8106b5b | |||
| 945052def8 | |||
| db273e7f38 | |||
| 48fe1c78e7 | |||
| 130daf7c34 | |||
| 7ba19da764 | |||
| 71a5dea95f | |||
| a65ac9eed2 | |||
| 134c1db5c6 | |||
| e371653e2c | |||
| 56b2d23c2b | |||
| 6d4e29fb81 | |||
| c28dbd38c2 | |||
| c24425e06d | |||
| 99f78f7b2a | |||
|
|
815b78e227 | ||
|
|
419c07b822 | ||
|
|
8ca2c30993 | ||
|
|
795d80870b | ||
|
|
f2ecde8927 | ||
|
|
b00dff4256 | ||
|
|
f74ed38363 | ||
|
|
67e1ca13a0 | ||
|
|
66359b413e | ||
|
|
5cac70b026 | ||
|
|
e659ee122a | ||
|
|
148e665250 | ||
|
|
caba8ac65f | ||
|
|
be87077e95 | ||
|
|
3d804edf02 | ||
|
|
f7b22b650a | ||
|
|
b9f408079e | ||
|
|
efed361417 | ||
|
|
578ec187cd | ||
|
|
ff22c8ac3b | ||
|
|
bd7124c873 | ||
|
|
020f9a9fa6 | ||
|
|
0495a5d067 | ||
|
|
09ff4d1c4d | ||
|
|
33218af293 | ||
|
|
5f40171142 | ||
|
|
0e5ddcc522 | ||
|
|
8c5812d652 | ||
|
|
d45153a41c | ||
|
|
2a711c1ef3 | ||
|
|
26c5aa8c49 | ||
|
|
9603e76cea | ||
|
|
e2064a5784 | ||
|
|
d54283d99c | ||
|
|
277cf4f63f | ||
|
|
a6e0bf0ab7 | ||
|
|
64e1c07a2e | ||
|
|
a8609f59ff | ||
|
|
ef60855f16 | ||
|
|
93aa1b5900 | ||
|
|
2f993a0c3b | ||
|
|
e99437f1b4 | ||
|
|
b60ce5af12 | ||
|
|
fdb3b9a0a3 | ||
|
|
a8531352a1 | ||
|
|
ef53badeff | ||
|
|
8511048293 | ||
|
|
a838e1c96b | ||
|
|
792d716707 | ||
|
|
413931eb74 | ||
|
|
76e7c2ca7e | ||
|
|
885bd31f44 | ||
|
|
e272c66696 | ||
|
|
413411e1bc | ||
|
|
3d0bd057dd | ||
|
|
791a1a3cbb | ||
|
|
63ca74f054 | ||
|
|
4792c9975f | ||
|
|
455f69f894 | ||
|
|
394146d552 | ||
|
|
4c6de0d2c4 | ||
|
|
fb90eb7bb8 | ||
|
|
6e25ea2bfd | ||
|
|
5580093408 | ||
|
|
ddcc6296d9 | ||
|
|
1bd0b68e91 | ||
|
|
207abaf64b | ||
|
|
e6515c21ed | ||
|
|
2e7bc89dbc | ||
|
|
d61f6e6655 | ||
|
|
038dc94725 | ||
|
|
44c153dd91 | ||
|
|
1947e2d534 | ||
|
|
038c3542ce | ||
|
|
39b2f187c5 | ||
|
|
5d0101b3aa | ||
|
|
b35f258043 | ||
|
|
7187e841b6 | ||
|
|
3b436f0d87 | ||
|
|
65869ca8c0 | ||
|
|
3e864c1d0f | ||
|
|
0735b21060 | ||
|
|
fb4c16c027 | ||
|
|
8e82c1e26a | ||
|
|
7b300ca5a5 | ||
|
|
087365e877 | ||
|
|
bf5efab270 | ||
|
|
b6044d9e15 | ||
|
|
e31d799e86 | ||
|
|
4aaff39abc | ||
|
|
34408056c2 | ||
|
|
ae76595913 | ||
|
|
57d50a95c4 | ||
|
|
21dc169578 | ||
|
|
6344d2e985 | ||
|
|
5f5fa4141a | ||
|
|
e0c8994dd8 | ||
|
|
18b95ae60a | ||
|
|
56b421b187 | ||
|
|
d9e4f99add | ||
|
|
875c667313 | ||
|
|
1fd587a840 | ||
|
|
b9f341e579 | ||
|
|
e689a43a87 | ||
|
|
1962e9c0c4 | ||
|
|
6b584fb957 | ||
|
|
f3d526c0c4 | ||
|
|
430e8ea28f | ||
|
|
34742efc78 | ||
|
|
57408aa710 | ||
|
|
76c4a03942 | ||
|
|
b2672c8712 | ||
|
|
021976ee10 | ||
|
|
0a9b067231 | ||
|
|
14324bb4c8 | ||
|
|
f9cb754e9e | ||
|
|
ed0dacca43 | ||
|
|
b20b005283 | ||
|
|
bd685784f8 | ||
|
|
b3c8d4ab3a | ||
|
|
6fb841bc06 | ||
|
|
07884b9894 | ||
|
|
21bc328026 | ||
|
|
87cf48019e | ||
|
|
fbf2dc29b5 | ||
|
|
5929e51920 | ||
|
|
85d1e09cee | ||
|
|
24d9bc3458 | ||
|
|
cf3f7fc989 | ||
|
|
f435df1046 | ||
|
|
bf6ee14add | ||
|
|
e5a9e70083 | ||
|
|
179f192ca4 | ||
|
|
fe1797be68 | ||
|
|
120b9ca460 | ||
|
|
bbfc585251 | ||
|
|
9b74c051e7 | ||
|
|
a4e1ad5138 | ||
|
|
964cfa61b3 | ||
|
|
c881bf858d | ||
|
|
a9481a5789 | ||
|
|
c338d09c60 | ||
|
|
48a2d67ae6 | ||
|
|
2ad94a192b | ||
|
|
e4c5d3fcd7 | ||
|
|
eb7d6ec911 | ||
|
|
54c9cf1ff6 | ||
|
|
778be93a39 | ||
|
|
445ad49ec8 | ||
|
|
668cad9ec4 | ||
|
|
46efd39b6a | ||
|
|
c95e57ef55 | ||
|
|
0317e3cd8b |
27
.cargo/config.toml
Normal 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"]
|
||||||
122
.forgejo/workflows/release.yml
Normal 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!"
|
||||||
4
.gitattributes
vendored
|
|
@ -1,6 +1,2 @@
|
||||||
* text=auto eol=lf
|
* text=auto eol=lf
|
||||||
Cargo.lock -diff linguist-generated
|
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
|
|
||||||
|
|
|
||||||
47
.github/actions/install-cargo-tool/action.yml
vendored
Normal 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
|
||||||
17
.github/actions/setup-rust/action.yml
vendored
|
|
@ -13,11 +13,19 @@ inputs:
|
||||||
description: Whether to restore the Rust cache
|
description: Whether to restore the Rust cache
|
||||||
required: false
|
required: false
|
||||||
default: 'true'
|
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:
|
runs:
|
||||||
using: composite
|
using: composite
|
||||||
steps:
|
steps:
|
||||||
- name: Install Rust (stable)
|
- name: Install Rust (stable)
|
||||||
uses: dtolnay/rust-toolchain@stable
|
uses: dtolnay/rust-toolchain@4cda84d5c5c54efe2404f9d843567869ab1699d4 # stable branch @ 2026-07-16
|
||||||
with:
|
with:
|
||||||
toolchain: stable
|
toolchain: stable
|
||||||
targets: ${{ inputs.target }}
|
targets: ${{ inputs.target }}
|
||||||
|
|
@ -25,8 +33,11 @@ runs:
|
||||||
|
|
||||||
- name: Cache Rust
|
- name: Cache Rust
|
||||||
if: ${{ inputs.restore-cache == 'true' }}
|
if: ${{ inputs.restore-cache == 'true' }}
|
||||||
uses: Swatinem/rust-cache@master
|
uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2
|
||||||
with:
|
with:
|
||||||
key: ${{ inputs.target }}
|
key: ${{ inputs.target }}
|
||||||
save-if: ${{ inputs.save-cache }}
|
save-if: ${{ inputs.save-cache }}
|
||||||
shared-key: release-cache
|
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
|
||||||
|
|
|
||||||
BIN
.github/media/RepoBanner.png
vendored
|
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 21 KiB |
97
.github/workflows/aur_publish.yml
vendored
Normal 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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
||||||
324
.github/workflows/oneclient_nightly.yml
vendored
Normal 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
|
||||||
366
.github/workflows/oneclient_release.yml
vendored
|
|
@ -4,9 +4,16 @@ name: OneClient Release Build
|
||||||
on:
|
on:
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
env:
|
# NOTE: CARGO_PACKAGER_SIGN_PRIVATE_KEY* are deliberately NOT declared at
|
||||||
CARGO_PACKAGER_SIGN_PRIVATE_KEY: ${{ secrets.CARGO_PACKAGER_SIGN_PRIVATE_KEY }}
|
# workflow level. Swatinem/rust-cache folds every `CARGO*`-prefixed environment
|
||||||
CARGO_PACKAGER_SIGN_PRIVATE_KEY_PASSWORD: ${{ secrets.CARGO_PACKAGER_SIGN_PRIVATE_KEY_PASSWORD }}
|
# 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:
|
jobs:
|
||||||
prepare:
|
prepare:
|
||||||
|
|
@ -16,30 +23,106 @@ jobs:
|
||||||
outputs:
|
outputs:
|
||||||
version: ${{ steps.version.outputs.version }}
|
version: ${{ steps.version.outputs.version }}
|
||||||
tag: ${{ steps.version.outputs.tag }}
|
tag: ${{ steps.version.outputs.tag }}
|
||||||
|
sha: ${{ steps.version.outputs.sha }}
|
||||||
steps:
|
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: Resolve version from Cargo.toml
|
- name: Setup Rust
|
||||||
|
uses: ./.github/actions/setup-rust
|
||||||
|
with:
|
||||||
|
restore-cache: false
|
||||||
|
|
||||||
|
- name: Install Knope
|
||||||
|
uses: ./.github/actions/install-cargo-tool
|
||||||
|
with:
|
||||||
|
tool: knope
|
||||||
|
version: 0.23.0
|
||||||
|
|
||||||
|
- name: Consume changesets
|
||||||
id: version
|
id: version
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
VERSION=$(grep -m1 '^version' Cargo.toml | sed -E 's/.*"([^"]+)".*/\1/')
|
|
||||||
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
|
|
||||||
echo "tag=oneclient-$VERSION" >> "$GITHUB_OUTPUT"
|
|
||||||
|
|
||||||
- name: Create/ensure draft release
|
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
TAG: ${{ steps.version.outputs.tag }}
|
shell: bash
|
||||||
VERSION: ${{ steps.version.outputs.version }}
|
|
||||||
run: |
|
run: |
|
||||||
if ! gh release view "$TAG" >/dev/null 2>&1; then
|
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" \
|
gh release create "$TAG" \
|
||||||
--draft \
|
--draft \
|
||||||
|
--target "$SHA" \
|
||||||
--title "OneClient $VERSION" \
|
--title "OneClient $VERSION" \
|
||||||
--notes "Automated release for OneClient $VERSION."
|
--notes-file notes.md
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
|
||||||
|
echo "tag=$TAG" >> "$GITHUB_OUTPUT"
|
||||||
|
echo "sha=$SHA" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
package:
|
package:
|
||||||
needs: prepare
|
needs: prepare
|
||||||
|
|
@ -61,6 +144,7 @@ jobs:
|
||||||
os_key: darwin
|
os_key: darwin
|
||||||
arch: x86_64
|
arch: x86_64
|
||||||
formats: app,dmg
|
formats: app,dmg
|
||||||
|
macos_deployment_target: '10.14'
|
||||||
- platform: ubuntu-22.04
|
- platform: ubuntu-22.04
|
||||||
target: ''
|
target: ''
|
||||||
os_key: linux
|
os_key: linux
|
||||||
|
|
@ -74,7 +158,16 @@ jobs:
|
||||||
|
|
||||||
runs-on: ${{ matrix.platform }}
|
runs-on: ${{ matrix.platform }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
# 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
|
- name: Setup Rust
|
||||||
uses: ./.github/actions/setup-rust
|
uses: ./.github/actions/setup-rust
|
||||||
|
|
@ -92,11 +185,14 @@ jobs:
|
||||||
libfontconfig-dev libfreetype-dev \
|
libfontconfig-dev libfreetype-dev \
|
||||||
libgl1-mesa-dev libx11-dev libxcursor-dev libxi-dev libxrandr-dev \
|
libgl1-mesa-dev libx11-dev libxcursor-dev libxi-dev libxrandr-dev \
|
||||||
libxkbcommon-dev libxkbcommon-x11-dev libwayland-dev libdbus-1-dev \
|
libxkbcommon-dev libxkbcommon-x11-dev libwayland-dev libdbus-1-dev \
|
||||||
|
libgtk-3-dev libayatana-appindicator3-dev \
|
||||||
libfuse2
|
libfuse2
|
||||||
|
|
||||||
- name: Install cargo-packager
|
- name: Install cargo-packager
|
||||||
shell: bash
|
uses: ./.github/actions/install-cargo-tool
|
||||||
run: cargo install cargo-packager --version 0.11.8 --locked
|
with:
|
||||||
|
tool: cargo-packager
|
||||||
|
version: 0.11.8
|
||||||
|
|
||||||
- name: Import Apple Developer certificate
|
- name: Import Apple Developer certificate
|
||||||
if: startsWith(matrix.platform, 'macos')
|
if: startsWith(matrix.platform, 'macos')
|
||||||
|
|
@ -143,6 +239,106 @@ jobs:
|
||||||
cargo build --release --bin oneclient_app
|
cargo build --release --bin oneclient_app
|
||||||
fi
|
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
|
- name: Package
|
||||||
shell: bash
|
shell: bash
|
||||||
env:
|
env:
|
||||||
|
|
@ -150,6 +346,8 @@ jobs:
|
||||||
APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }}
|
APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }}
|
||||||
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
|
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
|
||||||
CI: ${{ startsWith(matrix.platform, 'macos') && 'false' || 'true' }}
|
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: |
|
run: |
|
||||||
ARGS="--release --formats ${{ matrix.formats }}"
|
ARGS="--release --formats ${{ matrix.formats }}"
|
||||||
if [ -n "${{ matrix.target }}" ]; then
|
if [ -n "${{ matrix.target }}" ]; then
|
||||||
|
|
@ -167,23 +365,95 @@ jobs:
|
||||||
echo "dir=target/release" >> "$GITHUB_OUTPUT"
|
echo "dir=target/release" >> "$GITHUB_OUTPUT"
|
||||||
fi
|
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
|
- name: (Windows) Locate installer
|
||||||
if: matrix.platform == 'windows-latest'
|
if: matrix.platform == 'windows-latest'
|
||||||
id: win_installer
|
id: win_installer
|
||||||
shell: bash
|
shell: bash
|
||||||
run: echo "path=$(ls ${{ steps.outdir.outputs.dir }}/*-setup.exe | head -n1)" >> "$GITHUB_OUTPUT"
|
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
|
- name: (Windows) Upload unsigned installer artifact
|
||||||
if: matrix.platform == 'windows-latest'
|
if: matrix.platform == 'windows-latest'
|
||||||
id: win_upload_unsigned
|
id: win_upload_unsigned
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||||
with:
|
with:
|
||||||
name: oneclient-windows-installer-unsigned
|
name: oneclient-windows-installer-unsigned
|
||||||
path: ${{ steps.win_installer.outputs.path }}
|
path: ${{ steps.win_installer.outputs.path }}
|
||||||
|
|
||||||
- name: (Windows) Submit SignPath signing request
|
- name: (Windows) Submit SignPath signing request
|
||||||
if: matrix.platform == 'windows-latest'
|
if: matrix.platform == 'windows-latest'
|
||||||
uses: signpath/github-action-submit-signing-request@v1
|
uses: signpath/github-action-submit-signing-request@ced31329c0317e779dad2eec2a7c3bb46ea1343e # v1.3
|
||||||
with:
|
with:
|
||||||
api-token: ${{ secrets.SIGNPATH_API_TOKEN }}
|
api-token: ${{ secrets.SIGNPATH_API_TOKEN }}
|
||||||
organization-id: ${{ secrets.SIGNPATH_ORGANIZATION_ID }}
|
organization-id: ${{ secrets.SIGNPATH_ORGANIZATION_ID }}
|
||||||
|
|
@ -197,6 +467,9 @@ jobs:
|
||||||
- name: (Windows) Replace installer with signed one + recompute updater sig
|
- name: (Windows) Replace installer with signed one + recompute updater sig
|
||||||
if: matrix.platform == 'windows-latest'
|
if: matrix.platform == 'windows-latest'
|
||||||
shell: bash
|
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: |
|
run: |
|
||||||
signed="$(ls signed/*-setup.exe | head -n1)"
|
signed="$(ls signed/*-setup.exe | head -n1)"
|
||||||
# Overwrite the unsigned installer in the packager out dir with the signed exe.
|
# Overwrite the unsigned installer in the packager out dir with the signed exe.
|
||||||
|
|
@ -223,7 +496,7 @@ jobs:
|
||||||
# Identify the single updater artifact for this platform (the file with a
|
# Identify the single updater artifact for this platform (the file with a
|
||||||
# sibling .sig): -setup.exe (nsis), *.app.tar.gz (app), *.AppImage (appimage).
|
# sibling .sig): -setup.exe (nsis), *.app.tar.gz (app), *.AppImage (appimage).
|
||||||
# NOTE: nullglob is on, so an unmatched glob expands to nothing. Use arrays
|
# 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
|
# rather than `ls <glob> | head` - the latter falls back to listing the cwd
|
||||||
# when nothing matches, silently picking an unrelated file.
|
# when nothing matches, silently picking an unrelated file.
|
||||||
fmt=""; ext=""; matches=()
|
fmt=""; ext=""; matches=()
|
||||||
case "$OS_KEY" in
|
case "$OS_KEY" in
|
||||||
|
|
@ -244,34 +517,57 @@ jobs:
|
||||||
cp "$updater_file" "$OUT_DIR/$unique"
|
cp "$updater_file" "$OUT_DIR/$unique"
|
||||||
cp "$updater_file.sig" "$OUT_DIR/$unique.sig"
|
cp "$updater_file.sig" "$OUT_DIR/$unique.sig"
|
||||||
|
|
||||||
# Upload human-facing installers (dmg/deb/AppImage/signed exe) + the renamed
|
# cargo-packager names the .deb after the binary (oneclient_app_<ver>_amd64.deb).
|
||||||
# updater bundle and its .sig. Skip the un-renamed updater bundle to avoid clashes.
|
# Rename it to the same OneClient_<ver>_<os>_<arch> scheme as the other assets so
|
||||||
for f in "$OUT_DIR"/*.dmg "$OUT_DIR"/*.deb "$OUT_DIR"/*.AppImage "$OUT_DIR"/*-setup.exe "$OUT_DIR/$unique" "$OUT_DIR/$unique.sig"; do
|
# 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
|
[ -e "$f" ] || continue
|
||||||
gh release upload "$TAG" "$f" --clobber
|
gh release upload "$TAG" "$f" --clobber
|
||||||
done
|
done
|
||||||
|
|
||||||
base="$unique"
|
base="$unique"
|
||||||
mkdir -p fragments
|
mkdir -p fragments
|
||||||
|
case "$OS_KEY" in
|
||||||
|
darwin) KEYS="darwin-${ARCH} macos-${ARCH}" ;;
|
||||||
|
*) KEYS="${OS_KEY}-${ARCH}" ;;
|
||||||
|
esac
|
||||||
SIG="$(cat "$updater_file.sig")" \
|
SIG="$(cat "$updater_file.sig")" \
|
||||||
URL="https://github.com/${GITHUB_REPOSITORY}/releases/download/${TAG}/${base}" \
|
URL="https://github.com/${GITHUB_REPOSITORY}/releases/download/${TAG}/${base}" \
|
||||||
FMT="$fmt" \
|
FMT="$fmt" \
|
||||||
KEY="${OS_KEY}-${ARCH}" \
|
KEYS="$KEYS" \
|
||||||
|
FRAG_NAME="${OS_KEY}-${ARCH}" \
|
||||||
python3 - <<'PY'
|
python3 - <<'PY'
|
||||||
import json, os
|
import json, os
|
||||||
frag = {
|
entry = {
|
||||||
os.environ["KEY"]: {
|
"signature": os.environ["SIG"],
|
||||||
"signature": os.environ["SIG"],
|
"url": os.environ["URL"],
|
||||||
"url": os.environ["URL"],
|
"format": os.environ["FMT"],
|
||||||
"format": os.environ["FMT"],
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
with open(f"fragments/{os.environ['KEY']}.json", "w") as f:
|
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)
|
json.dump(frag, f)
|
||||||
PY
|
PY
|
||||||
|
|
||||||
- name: Upload manifest fragment
|
- name: Upload manifest fragment
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||||
with:
|
with:
|
||||||
name: manifest-${{ matrix.os_key }}-${{ matrix.arch }}
|
name: manifest-${{ matrix.os_key }}-${{ matrix.arch }}
|
||||||
path: fragments/*.json
|
path: fragments/*.json
|
||||||
|
|
@ -283,7 +579,7 @@ jobs:
|
||||||
contents: write
|
contents: write
|
||||||
steps:
|
steps:
|
||||||
- name: Download all manifest fragments
|
- name: Download all manifest fragments
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
|
||||||
with:
|
with:
|
||||||
pattern: manifest-*
|
pattern: manifest-*
|
||||||
path: fragments
|
path: fragments
|
||||||
|
|
|
||||||
171
.github/workflows/release.yml
vendored
Normal 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
|
||||||
3
.gitignore
vendored
|
|
@ -1,4 +1,7 @@
|
||||||
/target
|
/target
|
||||||
|
/dist
|
||||||
.DS_Store
|
.DS_Store
|
||||||
/.idea
|
/.idea
|
||||||
OneLauncher.iml
|
OneLauncher.iml
|
||||||
|
|
||||||
|
/packages/oneclient_app/icons/generated/
|
||||||
|
|
|
||||||
8
.signpath/oneclient-binary.artifact-configuration.xml
Normal 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>
|
||||||
12
.sqlx/query-001a994c740f7a015152319eb16fc113954af25ebd2a44d55e95833adda53268.json
generated
Normal 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"
|
||||||
|
}
|
||||||
12
.sqlx/query-011448f2ce79e981700ee75c8cd5db5e0fcb793b72671c20a925b73ee6fb9456.json
generated
Normal 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"
|
||||||
|
}
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"db_name": "SQLite",
|
"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\n\t\tFROM setting_profiles\n\t\tORDER BY name ASC\n\t\t",
|
"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": {
|
"describe": {
|
||||||
"columns": [
|
"columns": [
|
||||||
{
|
{
|
||||||
|
|
@ -70,9 +70,20 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "launch_env",
|
"name": "game_args",
|
||||||
"ordinal": 6,
|
"ordinal": 6,
|
||||||
"type_info": "Text",
|
"type_info": "Text",
|
||||||
|
"origin": {
|
||||||
|
"Table": {
|
||||||
|
"table": "setting_profiles",
|
||||||
|
"name": "game_args"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "launch_env",
|
||||||
|
"ordinal": 7,
|
||||||
|
"type_info": "Text",
|
||||||
"origin": {
|
"origin": {
|
||||||
"Table": {
|
"Table": {
|
||||||
"table": "setting_profiles",
|
"table": "setting_profiles",
|
||||||
|
|
@ -82,7 +93,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "hook_pre",
|
"name": "hook_pre",
|
||||||
"ordinal": 7,
|
"ordinal": 8,
|
||||||
"type_info": "Text",
|
"type_info": "Text",
|
||||||
"origin": {
|
"origin": {
|
||||||
"Table": {
|
"Table": {
|
||||||
|
|
@ -93,7 +104,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "hook_wrapper",
|
"name": "hook_wrapper",
|
||||||
"ordinal": 8,
|
"ordinal": 9,
|
||||||
"type_info": "Text",
|
"type_info": "Text",
|
||||||
"origin": {
|
"origin": {
|
||||||
"Table": {
|
"Table": {
|
||||||
|
|
@ -104,7 +115,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "hook_post",
|
"name": "hook_post",
|
||||||
"ordinal": 9,
|
"ordinal": 10,
|
||||||
"type_info": "Text",
|
"type_info": "Text",
|
||||||
"origin": {
|
"origin": {
|
||||||
"Table": {
|
"Table": {
|
||||||
|
|
@ -115,7 +126,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "os_extra",
|
"name": "os_extra",
|
||||||
"ordinal": 10,
|
"ordinal": 11,
|
||||||
"type_info": "Text",
|
"type_info": "Text",
|
||||||
"origin": {
|
"origin": {
|
||||||
"Table": {
|
"Table": {
|
||||||
|
|
@ -123,6 +134,17 @@
|
||||||
"name": "os_extra"
|
"name": "os_extra"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "browser_update_mode",
|
||||||
|
"ordinal": 12,
|
||||||
|
"type_info": "Text",
|
||||||
|
"origin": {
|
||||||
|
"Table": {
|
||||||
|
"table": "setting_profiles",
|
||||||
|
"name": "browser_update_mode"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"parameters": {
|
"parameters": {
|
||||||
|
|
@ -139,8 +161,10 @@
|
||||||
true,
|
true,
|
||||||
true,
|
true,
|
||||||
true,
|
true,
|
||||||
|
true,
|
||||||
|
true,
|
||||||
true
|
true
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"hash": "4ab22fa481720e3bae5befee821fe1c0689d666f8bbcde98890e2d4715e9bc80"
|
"hash": "01b2ef24541af92505a3c2bc14037a61470a393dffa06da8bebfba98138709d0"
|
||||||
}
|
}
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"db_name": "SQLite",
|
"db_name": "SQLite",
|
||||||
"query": "\n\t\tSELECT cluster_id, hash, cluster_file_name, enabled\n\t\tFROM cluster_artifacts\n\t\tWHERE cluster_id = ? AND hash = ?\n\t\t",
|
"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": {
|
"describe": {
|
||||||
"columns": [
|
"columns": [
|
||||||
{
|
{
|
||||||
|
|
@ -46,6 +46,17 @@
|
||||||
"name": "enabled"
|
"name": "enabled"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "seen_status",
|
||||||
|
"ordinal": 4,
|
||||||
|
"type_info": "Integer",
|
||||||
|
"origin": {
|
||||||
|
"Table": {
|
||||||
|
"table": "cluster_artifacts",
|
||||||
|
"name": "seen_status"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"parameters": {
|
"parameters": {
|
||||||
|
|
@ -55,8 +66,9 @@
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
|
false,
|
||||||
false
|
false
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"hash": "b5935e0e5d751a7d33e898f7cc1e0f985a66434365f0939f7572434af40e43af"
|
"hash": "071d02aba0d2eb073b8ca1e6488087101255147c064612fad99500d3c993f61f"
|
||||||
}
|
}
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"db_name": "SQLite",
|
"db_name": "SQLite",
|
||||||
"query": "\n SELECT absolute_path, major, version, vendor, os_arch FROM java_versions \n ORDER BY major DESC, version DESC\n ",
|
"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": {
|
"describe": {
|
||||||
"columns": [
|
"columns": [
|
||||||
{
|
{
|
||||||
|
|
@ -57,6 +57,28 @@
|
||||||
"name": "os_arch"
|
"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": {
|
"parameters": {
|
||||||
|
|
@ -67,8 +89,10 @@
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
|
false,
|
||||||
|
false,
|
||||||
false
|
false
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"hash": "c1d3cf930d5f38e8f1046da1a8f895ee1de2d3fe9a40ecb47731618962d2a4ad"
|
"hash": "0c3651cf175cb900c2466f0e97beca338b95637d43d9d067b974327f7720637b"
|
||||||
}
|
}
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"db_name": "SQLite",
|
"db_name": "SQLite",
|
||||||
"query": "\n\t\tSELECT absolute_path, major, version, vendor, os_arch\n\t\tFROM java_versions\n\t\tWHERE major = ?\n\t\tORDER BY version DESC\n\t\tLIMIT 1\n\t\t",
|
"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": {
|
"describe": {
|
||||||
"columns": [
|
"columns": [
|
||||||
{
|
{
|
||||||
|
|
@ -57,6 +57,28 @@
|
||||||
"name": "os_arch"
|
"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": {
|
"parameters": {
|
||||||
|
|
@ -67,8 +89,10 @@
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
|
false,
|
||||||
|
false,
|
||||||
false
|
false
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"hash": "b153f762849649456dd97b6a5cd35fb7dafc3d5539441328e03442cea195483a"
|
"hash": "14ab205c5b8d4c1c435814e4b7a155acbae41a67925b6b179b82dea1758d621a"
|
||||||
}
|
}
|
||||||
110
.sqlx/query-15dc690e91fe0bc7e1932a5051f8edd855deaeb31e52209ae436680962dea954.json
generated
Normal 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"
|
||||||
|
}
|
||||||
38
.sqlx/query-171c6771d06656c2fe375f6a0da889f828f400e950f103f0ed44f5f98a48dc50.json
generated
Normal 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"
|
||||||
|
}
|
||||||
12
.sqlx/query-1e43f93b56bb495e13826c734fe5fb64515cf1d7c28bc6a1bf1fb1645fdba2a1.json
generated
Normal 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"
|
||||||
|
}
|
||||||
146
.sqlx/query-2005ac6f15d4c5fe36d5bfa87191e6be22264a2ca3e91155cb01f2debd39b319.json
generated
Normal 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"
|
||||||
|
}
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"db_name": "SQLite",
|
"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\n\t\t",
|
"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": {
|
"describe": {
|
||||||
"columns": [
|
"columns": [
|
||||||
{
|
{
|
||||||
|
|
@ -46,6 +46,17 @@
|
||||||
"name": "enabled"
|
"name": "enabled"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "seen_status",
|
||||||
|
"ordinal": 4,
|
||||||
|
"type_info": "Integer",
|
||||||
|
"origin": {
|
||||||
|
"Table": {
|
||||||
|
"table": "cluster_artifacts",
|
||||||
|
"name": "seen_status"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"parameters": {
|
"parameters": {
|
||||||
|
|
@ -55,8 +66,9 @@
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
|
false,
|
||||||
false
|
false
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"hash": "24209a44c9a51e8a318b080aa0c79a00a6002a35b47ec3723e3aa6a327cb7f51"
|
"hash": "25259e9d6eda7f5113e0d88f00b24b28b98de1eda40a1e25d48bbcf212af42b5"
|
||||||
}
|
}
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"db_name": "SQLite",
|
"db_name": "SQLite",
|
||||||
"query": "\n\t\tUPDATE cluster_artifacts\n\t\tSET cluster_file_name = ?, enabled = ?\n\t\tWHERE cluster_id = ? AND hash = ?\n\t\tRETURNING cluster_id, hash, cluster_file_name, enabled\n\t\t",
|
"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": {
|
"describe": {
|
||||||
"columns": [
|
"columns": [
|
||||||
{
|
{
|
||||||
|
|
@ -46,6 +46,17 @@
|
||||||
"name": "enabled"
|
"name": "enabled"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "seen_status",
|
||||||
|
"ordinal": 4,
|
||||||
|
"type_info": "Integer",
|
||||||
|
"origin": {
|
||||||
|
"Table": {
|
||||||
|
"table": "cluster_artifacts",
|
||||||
|
"name": "seen_status"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"parameters": {
|
"parameters": {
|
||||||
|
|
@ -55,8 +66,9 @@
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
|
false,
|
||||||
false
|
false
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"hash": "4f209d73ce580a5e305b6ccdbe47ce139b331506d1c53ed0f4011596c810252f"
|
"hash": "25f4eb2e9040bb8f1c9a38ca41a773225099f150c3fc8a41d31fd40c09711d0c"
|
||||||
}
|
}
|
||||||
146
.sqlx/query-271e5a3e03861f3699e3b32dc4a9bb0c0dcb880fcff67a096fa94b236fbe6107.json
generated
Normal 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"
|
||||||
|
}
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"db_name": "SQLite",
|
"db_name": "SQLite",
|
||||||
"query": "\n SELECT absolute_path, major, version, vendor, os_arch FROM java_versions \n WHERE absolute_path = ?\n ",
|
"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": {
|
"describe": {
|
||||||
"columns": [
|
"columns": [
|
||||||
{
|
{
|
||||||
|
|
@ -57,6 +57,28 @@
|
||||||
"name": "os_arch"
|
"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": {
|
"parameters": {
|
||||||
|
|
@ -67,8 +89,10 @@
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
|
false,
|
||||||
|
false,
|
||||||
false
|
false
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"hash": "c570e309195b6063cf0fbee866d68972de05107769dab983524fd2e74a7ae31a"
|
"hash": "331bee3da454f39a8a2cc8ed4e5338b743a7cd033fdef023c4b3b93827248be1"
|
||||||
}
|
}
|
||||||
12
.sqlx/query-3b87531a1231c467072ec4d1f9afd3c93114777031250c7f9e74f6b9eef4ab9f.json
generated
Normal 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"
|
||||||
|
}
|
||||||
12
.sqlx/query-43521070cb5de5b2fe5e25c88e683b933c2f6788e2d2482ca9fd7d71ee67381a.json
generated
Normal 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"
|
||||||
|
}
|
||||||
12
.sqlx/query-472a614b1f1484e839f373fcfecf338462888518de3307bdab3db0b419a82be9.json
generated
Normal 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"
|
||||||
|
}
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"db_name": "SQLite",
|
"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",
|
"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": {
|
"describe": {
|
||||||
"columns": [
|
"columns": [
|
||||||
{
|
{
|
||||||
|
|
@ -134,6 +134,61 @@
|
||||||
"name": "linked_modpack_hash"
|
"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": {
|
"parameters": {
|
||||||
|
|
@ -151,8 +206,13 @@
|
||||||
true,
|
true,
|
||||||
true,
|
true,
|
||||||
true,
|
true,
|
||||||
|
true,
|
||||||
|
false,
|
||||||
|
false,
|
||||||
|
true,
|
||||||
|
false,
|
||||||
true
|
true
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"hash": "3fb91d89cb135d2af105a0f40f7150d03ab2fa9b955ba223066edf210e3556a1"
|
"hash": "4c6d40e97401e1321abccd7f413b49dda16a5bdf29eb90459ac140d8208db479"
|
||||||
}
|
}
|
||||||
146
.sqlx/query-5183d452802d8bbec7f2a52ceba7ffe26960fdc25855f6cc993d6ab5deb84c02.json
generated
Normal 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"
|
||||||
|
}
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"db_name": "SQLite",
|
"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",
|
"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": {
|
"describe": {
|
||||||
"columns": [
|
"columns": [
|
||||||
{
|
{
|
||||||
|
|
@ -134,10 +134,65 @@
|
||||||
"name": "linked_modpack_hash"
|
"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": {
|
"parameters": {
|
||||||
"Right": 8
|
"Right": 13
|
||||||
},
|
},
|
||||||
"nullable": [
|
"nullable": [
|
||||||
false,
|
false,
|
||||||
|
|
@ -151,8 +206,13 @@
|
||||||
true,
|
true,
|
||||||
true,
|
true,
|
||||||
true,
|
true,
|
||||||
|
true,
|
||||||
|
false,
|
||||||
|
false,
|
||||||
|
true,
|
||||||
|
false,
|
||||||
true
|
true
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"hash": "0f4cedf6055f4ba6a5e6ef78304c5f9df31fc6de0f6aa3dc09c4341fcb19c871"
|
"hash": "54dea3f4093ceee9dcd5f0ae9bf072ec3615954b60bffa33bff7fd3f9bf14210"
|
||||||
}
|
}
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"db_name": "SQLite",
|
"db_name": "SQLite",
|
||||||
"query": "\n\t\tINSERT INTO setting_profiles (\n\t\t\tname, java_path, resolution, force_fullscreen, mem_max, launch_args, launch_env,\n\t\t\thook_pre, hook_wrapper, hook_post, os_extra\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\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\tRETURNING name, java_path, resolution, force_fullscreen, mem_max, launch_args, launch_env,\n hook_pre, hook_wrapper, hook_post, os_extra\n\t\t",
|
"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": {
|
"describe": {
|
||||||
"columns": [
|
"columns": [
|
||||||
{
|
{
|
||||||
|
|
@ -70,9 +70,20 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "launch_env",
|
"name": "game_args",
|
||||||
"ordinal": 6,
|
"ordinal": 6,
|
||||||
"type_info": "Text",
|
"type_info": "Text",
|
||||||
|
"origin": {
|
||||||
|
"Table": {
|
||||||
|
"table": "setting_profiles",
|
||||||
|
"name": "game_args"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "launch_env",
|
||||||
|
"ordinal": 7,
|
||||||
|
"type_info": "Text",
|
||||||
"origin": {
|
"origin": {
|
||||||
"Table": {
|
"Table": {
|
||||||
"table": "setting_profiles",
|
"table": "setting_profiles",
|
||||||
|
|
@ -82,7 +93,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "hook_pre",
|
"name": "hook_pre",
|
||||||
"ordinal": 7,
|
"ordinal": 8,
|
||||||
"type_info": "Text",
|
"type_info": "Text",
|
||||||
"origin": {
|
"origin": {
|
||||||
"Table": {
|
"Table": {
|
||||||
|
|
@ -93,7 +104,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "hook_wrapper",
|
"name": "hook_wrapper",
|
||||||
"ordinal": 8,
|
"ordinal": 9,
|
||||||
"type_info": "Text",
|
"type_info": "Text",
|
||||||
"origin": {
|
"origin": {
|
||||||
"Table": {
|
"Table": {
|
||||||
|
|
@ -104,7 +115,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "hook_post",
|
"name": "hook_post",
|
||||||
"ordinal": 9,
|
"ordinal": 10,
|
||||||
"type_info": "Text",
|
"type_info": "Text",
|
||||||
"origin": {
|
"origin": {
|
||||||
"Table": {
|
"Table": {
|
||||||
|
|
@ -115,7 +126,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "os_extra",
|
"name": "os_extra",
|
||||||
"ordinal": 10,
|
"ordinal": 11,
|
||||||
"type_info": "Text",
|
"type_info": "Text",
|
||||||
"origin": {
|
"origin": {
|
||||||
"Table": {
|
"Table": {
|
||||||
|
|
@ -123,10 +134,21 @@
|
||||||
"name": "os_extra"
|
"name": "os_extra"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "browser_update_mode",
|
||||||
|
"ordinal": 12,
|
||||||
|
"type_info": "Text",
|
||||||
|
"origin": {
|
||||||
|
"Table": {
|
||||||
|
"table": "setting_profiles",
|
||||||
|
"name": "browser_update_mode"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"parameters": {
|
"parameters": {
|
||||||
"Right": 11
|
"Right": 13
|
||||||
},
|
},
|
||||||
"nullable": [
|
"nullable": [
|
||||||
false,
|
false,
|
||||||
|
|
@ -139,8 +161,10 @@
|
||||||
true,
|
true,
|
||||||
true,
|
true,
|
||||||
true,
|
true,
|
||||||
|
true,
|
||||||
|
true,
|
||||||
true
|
true
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"hash": "b41126ba17cbc3005b446b23cebc29ffe6fc366294191e546808e9f591b723a9"
|
"hash": "598a34a0eb0f4d497cfd9bd77696310d1088e8baec677e07843a21ce6978652e"
|
||||||
}
|
}
|
||||||
12
.sqlx/query-59a29c97c422e8721c29b9517ae834ea97776c57bb129a9d67007cdd979ae841.json
generated
Normal 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"
|
||||||
|
}
|
||||||
|
|
@ -1,93 +1,82 @@
|
||||||
{
|
{
|
||||||
"db_name": "SQLite",
|
"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 ",
|
"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": {
|
"describe": {
|
||||||
"columns": [
|
"columns": [
|
||||||
{
|
{
|
||||||
"name": "cluster_id",
|
"name": "id",
|
||||||
"ordinal": 0,
|
"ordinal": 0,
|
||||||
"type_info": "Integer",
|
"type_info": "Integer",
|
||||||
"origin": {
|
"origin": {
|
||||||
"Table": {
|
"Table": {
|
||||||
"table": "cluster_artifacts",
|
"table": "cluster_optional_mods",
|
||||||
|
"name": "id"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "cluster_id",
|
||||||
|
"ordinal": 1,
|
||||||
|
"type_info": "Integer",
|
||||||
|
"origin": {
|
||||||
|
"Table": {
|
||||||
|
"table": "cluster_optional_mods",
|
||||||
"name": "cluster_id"
|
"name": "cluster_id"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "hash",
|
"name": "bundle_name",
|
||||||
"ordinal": 1,
|
|
||||||
"type_info": "Text",
|
|
||||||
"origin": {
|
|
||||||
"Table": {
|
|
||||||
"table": "cluster_artifacts",
|
|
||||||
"name": "hash"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "cluster_file_name",
|
|
||||||
"ordinal": 2,
|
"ordinal": 2,
|
||||||
"type_info": "Text",
|
"type_info": "Text",
|
||||||
"origin": {
|
"origin": {
|
||||||
"Table": {
|
"Table": {
|
||||||
"table": "cluster_artifacts",
|
"table": "cluster_optional_mods",
|
||||||
"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_name"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "bundle_version_id",
|
|
||||||
"ordinal": 5,
|
|
||||||
"type_info": "Text",
|
|
||||||
"origin": {
|
|
||||||
"Table": {
|
|
||||||
"table": "cluster_artifacts",
|
|
||||||
"name": "bundle_version_id"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "package_id",
|
"name": "package_id",
|
||||||
"ordinal": 6,
|
"ordinal": 3,
|
||||||
"type_info": "Text",
|
"type_info": "Text",
|
||||||
"origin": {
|
"origin": {
|
||||||
"Table": {
|
"Table": {
|
||||||
"table": "cluster_artifacts",
|
"table": "cluster_optional_mods",
|
||||||
"name": "package_id"
|
"name": "package_id"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "installed_at",
|
"name": "bundle_version_id",
|
||||||
"ordinal": 7,
|
"ordinal": 4,
|
||||||
"type_info": "Text",
|
"type_info": "Text",
|
||||||
"origin": {
|
"origin": {
|
||||||
"Table": {
|
"Table": {
|
||||||
"table": "cluster_artifacts",
|
"table": "cluster_optional_mods",
|
||||||
"name": "installed_at"
|
"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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -100,11 +89,10 @@
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
true,
|
false,
|
||||||
true,
|
false,
|
||||||
true,
|
false
|
||||||
true
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"hash": "0fa6a144689ecd95fc076d340645a3417d56b455c6bb2a9ef3e027a3e1915813"
|
"hash": "5b3dd7940a9bd6f0067fac7b5f21e83f8d9eeceda6b1c53c5ce5b735a8fe2a71"
|
||||||
}
|
}
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"db_name": "SQLite",
|
"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",
|
"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": {
|
"describe": {
|
||||||
"columns": [
|
"columns": [
|
||||||
{
|
{
|
||||||
|
|
@ -134,6 +134,61 @@
|
||||||
"name": "linked_modpack_hash"
|
"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": {
|
"parameters": {
|
||||||
|
|
@ -151,8 +206,13 @@
|
||||||
true,
|
true,
|
||||||
true,
|
true,
|
||||||
true,
|
true,
|
||||||
|
true,
|
||||||
|
false,
|
||||||
|
false,
|
||||||
|
true,
|
||||||
|
false,
|
||||||
true
|
true
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"hash": "97d17b2c905bdd08abf41039e31972d10b5ac1d6b0d4df02f42edbf250d81782"
|
"hash": "5e18763a28af3660503e223c35875454b1e3fc4bb10c19d1c286d3e45afdd159"
|
||||||
}
|
}
|
||||||
38
.sqlx/query-5f45ecf4e5ac27ad3a7ef4e5f9c2e6466ef51af11c332a2e6089c90759b9871f.json
generated
Normal 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"
|
||||||
|
}
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"db_name": "SQLite",
|
"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\n\t\tFROM setting_profiles\n\t\tWHERE name = ?\n\t\t",
|
"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": {
|
"describe": {
|
||||||
"columns": [
|
"columns": [
|
||||||
{
|
{
|
||||||
|
|
@ -70,9 +70,20 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "launch_env",
|
"name": "game_args",
|
||||||
"ordinal": 6,
|
"ordinal": 6,
|
||||||
"type_info": "Text",
|
"type_info": "Text",
|
||||||
|
"origin": {
|
||||||
|
"Table": {
|
||||||
|
"table": "setting_profiles",
|
||||||
|
"name": "game_args"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "launch_env",
|
||||||
|
"ordinal": 7,
|
||||||
|
"type_info": "Text",
|
||||||
"origin": {
|
"origin": {
|
||||||
"Table": {
|
"Table": {
|
||||||
"table": "setting_profiles",
|
"table": "setting_profiles",
|
||||||
|
|
@ -82,7 +93,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "hook_pre",
|
"name": "hook_pre",
|
||||||
"ordinal": 7,
|
"ordinal": 8,
|
||||||
"type_info": "Text",
|
"type_info": "Text",
|
||||||
"origin": {
|
"origin": {
|
||||||
"Table": {
|
"Table": {
|
||||||
|
|
@ -93,7 +104,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "hook_wrapper",
|
"name": "hook_wrapper",
|
||||||
"ordinal": 8,
|
"ordinal": 9,
|
||||||
"type_info": "Text",
|
"type_info": "Text",
|
||||||
"origin": {
|
"origin": {
|
||||||
"Table": {
|
"Table": {
|
||||||
|
|
@ -104,7 +115,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "hook_post",
|
"name": "hook_post",
|
||||||
"ordinal": 9,
|
"ordinal": 10,
|
||||||
"type_info": "Text",
|
"type_info": "Text",
|
||||||
"origin": {
|
"origin": {
|
||||||
"Table": {
|
"Table": {
|
||||||
|
|
@ -115,7 +126,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "os_extra",
|
"name": "os_extra",
|
||||||
"ordinal": 10,
|
"ordinal": 11,
|
||||||
"type_info": "Text",
|
"type_info": "Text",
|
||||||
"origin": {
|
"origin": {
|
||||||
"Table": {
|
"Table": {
|
||||||
|
|
@ -123,6 +134,17 @@
|
||||||
"name": "os_extra"
|
"name": "os_extra"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "browser_update_mode",
|
||||||
|
"ordinal": 12,
|
||||||
|
"type_info": "Text",
|
||||||
|
"origin": {
|
||||||
|
"Table": {
|
||||||
|
"table": "setting_profiles",
|
||||||
|
"name": "browser_update_mode"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"parameters": {
|
"parameters": {
|
||||||
|
|
@ -139,8 +161,10 @@
|
||||||
true,
|
true,
|
||||||
true,
|
true,
|
||||||
true,
|
true,
|
||||||
|
true,
|
||||||
|
true,
|
||||||
true
|
true
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"hash": "de1b40c927c9819f675b8e3e8e1f583c41450ae9deda20739d82d95e8ca70b27"
|
"hash": "86e3ba70da419464c0be3b3971f613c5a112558472cf2dcdeffa5907e3785318"
|
||||||
}
|
}
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"db_name": "SQLite",
|
"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\n\t\tFROM setting_profiles\n\t\tWHERE name = ?\n\t\t",
|
"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": {
|
"describe": {
|
||||||
"columns": [
|
"columns": [
|
||||||
{
|
{
|
||||||
|
|
@ -123,6 +123,17 @@
|
||||||
"name": "os_extra"
|
"name": "os_extra"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "browser_update_mode",
|
||||||
|
"ordinal": 11,
|
||||||
|
"type_info": "Text",
|
||||||
|
"origin": {
|
||||||
|
"Table": {
|
||||||
|
"table": "setting_profiles",
|
||||||
|
"name": "browser_update_mode"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"parameters": {
|
"parameters": {
|
||||||
|
|
@ -139,8 +150,9 @@
|
||||||
true,
|
true,
|
||||||
true,
|
true,
|
||||||
true,
|
true,
|
||||||
|
true,
|
||||||
true
|
true
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"hash": "de1b40c927c9819f675b8e3e8e1f583c41450ae9deda20739d82d95e8ca70b27"
|
"hash": "98500a40f7e1ca7df79dd0ca90eaaa4f0b079ccbd757e5db1a8229ea58d2e700"
|
||||||
}
|
}
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"db_name": "SQLite",
|
"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",
|
"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": {
|
"describe": {
|
||||||
"columns": [
|
"columns": [
|
||||||
{
|
{
|
||||||
|
|
@ -134,6 +134,61 @@
|
||||||
"name": "linked_modpack_hash"
|
"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": {
|
"parameters": {
|
||||||
|
|
@ -151,8 +206,13 @@
|
||||||
true,
|
true,
|
||||||
true,
|
true,
|
||||||
true,
|
true,
|
||||||
|
true,
|
||||||
|
false,
|
||||||
|
false,
|
||||||
|
true,
|
||||||
|
false,
|
||||||
true
|
true
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"hash": "4b7fa3441d3d18943086acd54232c492521a693f48d07f9230cda440297ac02d"
|
"hash": "9b769a1467201ee998290c51b2cf51144a34c01975b898ee749b4e2111856119"
|
||||||
}
|
}
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"db_name": "SQLite",
|
"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",
|
"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": {
|
"describe": {
|
||||||
"columns": [
|
"columns": [
|
||||||
{
|
{
|
||||||
|
|
@ -134,10 +134,65 @@
|
||||||
"name": "linked_modpack_hash"
|
"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": {
|
"parameters": {
|
||||||
"Right": 5
|
"Right": 8
|
||||||
},
|
},
|
||||||
"nullable": [
|
"nullable": [
|
||||||
false,
|
false,
|
||||||
|
|
@ -151,8 +206,13 @@
|
||||||
true,
|
true,
|
||||||
true,
|
true,
|
||||||
true,
|
true,
|
||||||
|
true,
|
||||||
|
false,
|
||||||
|
false,
|
||||||
|
true,
|
||||||
|
false,
|
||||||
true
|
true
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"hash": "2b5b633bb658e5f3c733acc7977b3c7fd7f8d8b5f425e71989e98a2b27338b42"
|
"hash": "9e4cbbc2c299861132749196c4e248e4309c2449e181b3b9ae16e7f7b4d9e627"
|
||||||
}
|
}
|
||||||
|
|
@ -1,74 +0,0 @@
|
||||||
{
|
|
||||||
"db_name": "SQLite",
|
|
||||||
"query": "\n\t\tINSERT INTO java_versions (absolute_path, major, version, vendor, os_arch)\n\t\tVALUES (?, ?, ?, ?, ?)\n\t\tON CONFLICT(absolute_path) DO UPDATE SET\n\t\t\tmajor = excluded.major,\n\t\t\tversion = excluded.version,\n\t\t\tvendor = excluded.vendor,\n\t\t\tos_arch = excluded.os_arch\n\t\tRETURNING absolute_path, major, version, vendor, os_arch\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"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"parameters": {
|
|
||||||
"Right": 5
|
|
||||||
},
|
|
||||||
"nullable": [
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"hash": "a3bd6cf3048a6a5ed9d29e6bbb7f517676fe715c8af45eb5c58d69073e2d0304"
|
|
||||||
}
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"db_name": "SQLite",
|
"db_name": "SQLite",
|
||||||
"query": "\n SELECT 1 FROM cluster_artifacts\n WHERE cluster_id = ? AND bundle_name = ? AND package_id = ?\n LIMIT 1\n ",
|
"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": {
|
"describe": {
|
||||||
"columns": [
|
"columns": [
|
||||||
{
|
{
|
||||||
|
|
@ -11,11 +11,11 @@
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"parameters": {
|
"parameters": {
|
||||||
"Right": 3
|
"Right": 2
|
||||||
},
|
},
|
||||||
"nullable": [
|
"nullable": [
|
||||||
false
|
false
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"hash": "dc93cdd57e23e48f8e3c333db4ec396b0ee319adec619e5a7d147805573ae2b2"
|
"hash": "ab6dcea84a9502d5f8396a207ae613a4c41eb729ca22249f15eb45e6c6030094"
|
||||||
}
|
}
|
||||||
218
.sqlx/query-aeb2fbb78cfa536d6478878ccafb4f4754dfe057468fe06c22d87c3a062132b7.json
generated
Normal file
|
|
@ -0,0 +1,218 @@
|
||||||
|
{
|
||||||
|
"db_name": "SQLite",
|
||||||
|
"query": "\n\t\tUPDATE clusters\n\t\tSET mc_version = ?,\n\t\t mc_loader = ?,\n\t\t mc_loader_version = ?,\n\t\t stage = ?,\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\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": 7
|
||||||
|
},
|
||||||
|
"nullable": [
|
||||||
|
false,
|
||||||
|
false,
|
||||||
|
false,
|
||||||
|
true,
|
||||||
|
false,
|
||||||
|
false,
|
||||||
|
false,
|
||||||
|
true,
|
||||||
|
true,
|
||||||
|
true,
|
||||||
|
true,
|
||||||
|
true,
|
||||||
|
false,
|
||||||
|
false,
|
||||||
|
true,
|
||||||
|
false,
|
||||||
|
true
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"hash": "aeb2fbb78cfa536d6478878ccafb4f4754dfe057468fe06c22d87c3a062132b7"
|
||||||
|
}
|
||||||
12
.sqlx/query-af0567c14b689a3f53207179ba9ee2e369b99542369fa5401aa4057d0b326b86.json
generated
Normal 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 = 'disabled'\n ",
|
||||||
|
"describe": {
|
||||||
|
"columns": [],
|
||||||
|
"parameters": {
|
||||||
|
"Right": 2
|
||||||
|
},
|
||||||
|
"nullable": []
|
||||||
|
},
|
||||||
|
"hash": "af0567c14b689a3f53207179ba9ee2e369b99542369fa5401aa4057d0b326b86"
|
||||||
|
}
|
||||||
|
|
@ -1,74 +0,0 @@
|
||||||
{
|
|
||||||
"db_name": "SQLite",
|
|
||||||
"query": "\n\t\tSELECT absolute_path, major, version, vendor, os_arch\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"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"parameters": {
|
|
||||||
"Right": 1
|
|
||||||
},
|
|
||||||
"nullable": [
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"hash": "b153f762849649456dd97b6a5cd35fb7dafc3d5539441328e03442cea195483a"
|
|
||||||
}
|
|
||||||
|
|
@ -1,62 +0,0 @@
|
||||||
{
|
|
||||||
"db_name": "SQLite",
|
|
||||||
"query": "\n\t\tSELECT cluster_id, hash, cluster_file_name, enabled\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"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"parameters": {
|
|
||||||
"Right": 2
|
|
||||||
},
|
|
||||||
"nullable": [
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"hash": "b5935e0e5d751a7d33e898f7cc1e0f985a66434365f0939f7572434af40e43af"
|
|
||||||
}
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"db_name": "SQLite",
|
"db_name": "SQLite",
|
||||||
"query": "\n\t\tUPDATE cluster_artifacts\n\t\tSET cluster_file_name = ?, enabled = ?\n\t\tWHERE cluster_id = ? AND hash = ?\n\t\tRETURNING cluster_id, hash, cluster_file_name, enabled\n\t\t",
|
"query": "\n\t\tUPDATE cluster_artifacts\n\t\tSET cluster_file_name = ?, enabled = ?\n\t\tWHERE cluster_id = ? AND hash = ?\n\t\tRETURNING cluster_id, hash, cluster_file_name, enabled, seen_status\n\t\t",
|
||||||
"describe": {
|
"describe": {
|
||||||
"columns": [
|
"columns": [
|
||||||
{
|
{
|
||||||
|
|
@ -46,6 +46,17 @@
|
||||||
"name": "enabled"
|
"name": "enabled"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "seen_status",
|
||||||
|
"ordinal": 4,
|
||||||
|
"type_info": "Integer",
|
||||||
|
"origin": {
|
||||||
|
"Table": {
|
||||||
|
"table": "cluster_artifacts",
|
||||||
|
"name": "seen_status"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"parameters": {
|
"parameters": {
|
||||||
|
|
@ -55,8 +66,9 @@
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
|
false,
|
||||||
false
|
false
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"hash": "4f209d73ce580a5e305b6ccdbe47ce139b331506d1c53ed0f4011596c810252f"
|
"hash": "b68194fc40d9fdd508ab6cc354fff662ba4b7ca17c1c4be3e51e30fcb3d0cb16"
|
||||||
}
|
}
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"db_name": "SQLite",
|
"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",
|
"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 mc_version = ? AND mc_loader = ? AND user_created = 0\n\t\tLIMIT 1\n\t\t",
|
||||||
"describe": {
|
"describe": {
|
||||||
"columns": [
|
"columns": [
|
||||||
{
|
{
|
||||||
|
|
@ -134,6 +134,61 @@
|
||||||
"name": "linked_modpack_hash"
|
"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": {
|
"parameters": {
|
||||||
|
|
@ -151,8 +206,13 @@
|
||||||
true,
|
true,
|
||||||
true,
|
true,
|
||||||
true,
|
true,
|
||||||
|
true,
|
||||||
|
false,
|
||||||
|
false,
|
||||||
|
true,
|
||||||
|
false,
|
||||||
true
|
true
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"hash": "5d302dbecf00a8e32014e0cb6ffecab5db70f3f37058b87fc9896028c1e8f644"
|
"hash": "bc1502f185c5e73b59057f9caa0a892fbc2fa5dc45e63b391176e61f83a7676d"
|
||||||
}
|
}
|
||||||
12
.sqlx/query-c06af5530a824d31e6e18a3a52cd57639b74e7e4d2ae30e29a6c49fda9521b4d.json
generated
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
{
|
||||||
|
"db_name": "SQLite",
|
||||||
|
"query": "\n INSERT OR REPLACE INTO cluster_bundle_choices (cluster_id, bundle_name, accepted)\n VALUES (?, ?, ?)\n ",
|
||||||
|
"describe": {
|
||||||
|
"columns": [],
|
||||||
|
"parameters": {
|
||||||
|
"Right": 3
|
||||||
|
},
|
||||||
|
"nullable": []
|
||||||
|
},
|
||||||
|
"hash": "c06af5530a824d31e6e18a3a52cd57639b74e7e4d2ae30e29a6c49fda9521b4d"
|
||||||
|
}
|
||||||
|
|
@ -1,74 +0,0 @@
|
||||||
{
|
|
||||||
"db_name": "SQLite",
|
|
||||||
"query": "\n SELECT absolute_path, major, version, vendor, os_arch 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"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"parameters": {
|
|
||||||
"Right": 0
|
|
||||||
},
|
|
||||||
"nullable": [
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"hash": "c1d3cf930d5f38e8f1046da1a8f895ee1de2d3fe9a40ecb47731618962d2a4ad"
|
|
||||||
}
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"db_name": "SQLite",
|
"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",
|
"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\tkind, user_created, description, tags, cover_path\n\t\t",
|
||||||
"describe": {
|
"describe": {
|
||||||
"columns": [
|
"columns": [
|
||||||
{
|
{
|
||||||
|
|
@ -134,6 +134,61 @@
|
||||||
"name": "linked_modpack_hash"
|
"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": {
|
"parameters": {
|
||||||
|
|
@ -151,8 +206,13 @@
|
||||||
true,
|
true,
|
||||||
true,
|
true,
|
||||||
true,
|
true,
|
||||||
|
true,
|
||||||
|
false,
|
||||||
|
false,
|
||||||
|
true,
|
||||||
|
false,
|
||||||
true
|
true
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"hash": "70b38391613b4f5d538c18e08014661d57dc172286b91235ab034a827fcc061e"
|
"hash": "c3084a5369554a3ada17a50c5e33f8a6c414a9a213fd35c001c957eeebca3ff0"
|
||||||
}
|
}
|
||||||
12
.sqlx/query-c3f6c0105273939636dd0a7c7895a90e1e0902bde48eea1ced6d89ea6dbb4555.json
generated
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
{
|
||||||
|
"db_name": "SQLite",
|
||||||
|
"query": "DELETE FROM browser_package_updates WHERE cluster_id = ? AND hash = ?",
|
||||||
|
"describe": {
|
||||||
|
"columns": [],
|
||||||
|
"parameters": {
|
||||||
|
"Right": 2
|
||||||
|
},
|
||||||
|
"nullable": []
|
||||||
|
},
|
||||||
|
"hash": "c3f6c0105273939636dd0a7c7895a90e1e0902bde48eea1ced6d89ea6dbb4555"
|
||||||
|
}
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"db_name": "SQLite",
|
"db_name": "SQLite",
|
||||||
"query": "\n\t\tINSERT INTO setting_profiles (\n\t\t\tname, java_path, resolution, force_fullscreen, mem_max, launch_args, launch_env,\n\t\t\thook_pre, hook_wrapper, hook_post, os_extra\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\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\tRETURNING name, java_path, resolution, force_fullscreen, mem_max, launch_args, launch_env,\n hook_pre, hook_wrapper, hook_post, os_extra\n\t\t",
|
"query": "\n\t\tINSERT INTO setting_profiles (\n\t\t\tname, java_path, resolution, force_fullscreen, mem_max, launch_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\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, launch_env,\n hook_pre, hook_wrapper, hook_post, os_extra, browser_update_mode\n\t\t",
|
||||||
"describe": {
|
"describe": {
|
||||||
"columns": [
|
"columns": [
|
||||||
{
|
{
|
||||||
|
|
@ -123,10 +123,21 @@
|
||||||
"name": "os_extra"
|
"name": "os_extra"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "browser_update_mode",
|
||||||
|
"ordinal": 11,
|
||||||
|
"type_info": "Text",
|
||||||
|
"origin": {
|
||||||
|
"Table": {
|
||||||
|
"table": "setting_profiles",
|
||||||
|
"name": "browser_update_mode"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"parameters": {
|
"parameters": {
|
||||||
"Right": 11
|
"Right": 12
|
||||||
},
|
},
|
||||||
"nullable": [
|
"nullable": [
|
||||||
false,
|
false,
|
||||||
|
|
@ -139,8 +150,9 @@
|
||||||
true,
|
true,
|
||||||
true,
|
true,
|
||||||
true,
|
true,
|
||||||
|
true,
|
||||||
true
|
true
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"hash": "b41126ba17cbc3005b446b23cebc29ffe6fc366294191e546808e9f591b723a9"
|
"hash": "c939cef4b51d506d5b73b4c2e0330ba45423c0116c911b9da16576290ed9f3c2"
|
||||||
}
|
}
|
||||||
12
.sqlx/query-cd9609d707fa11bc4c246cd69c879159d23af897bdcb0bd9f04df73a7805a713.json
generated
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
{
|
||||||
|
"db_name": "SQLite",
|
||||||
|
"query": "\n\t\tUPDATE cluster_artifacts\n\t\tSET seen_status = ?\n\t\tWHERE cluster_id = ? AND hash = ?\n\t\t",
|
||||||
|
"describe": {
|
||||||
|
"columns": [],
|
||||||
|
"parameters": {
|
||||||
|
"Right": 3
|
||||||
|
},
|
||||||
|
"nullable": []
|
||||||
|
},
|
||||||
|
"hash": "cd9609d707fa11bc4c246cd69c879159d23af897bdcb0bd9f04df73a7805a713"
|
||||||
|
}
|
||||||
158
.sqlx/query-d1fc4c93f507d459e590cda5b5830a1e26e3047139db08a9f6b90c84185402a6.json
generated
Normal file
|
|
@ -0,0 +1,158 @@
|
||||||
|
{
|
||||||
|
"db_name": "SQLite",
|
||||||
|
"query": "\n\t\tSELECT\n\t\t\tca.hash AS \"hash!: String\",\n\t\t\tca.cluster_file_name AS \"cluster_file_name!: String\",\n\t\t\tca.enabled AS \"enabled!: i64\",\n\t\t\tca.seen_status AS \"seen_status!: i64\",\n\t\t\ta.content_type AS \"content_type!: i64\",\n\t\t\ta.file_name AS \"file_name!: String\",\n\t\t\tpr.provider AS \"provider?: i64\",\n\t\t\tpr.project_id AS \"project_id?: String\",\n\t\t\tpr.version_id AS \"version_id?: String\",\n\t\t\tpr.display_name AS \"display_name?: String\",\n\t\t\tpr.display_version AS \"display_version?: String\",\n\t\t\tpr.published_at AS \"published_at?: String\"\n\t\tFROM cluster_artifacts ca\n\t\tJOIN artifacts a ON a.hash = ca.hash\n\t\tLEFT JOIN provider_releases pr ON pr.rowid = (\n\t\t\tSELECT rowid\n\t\t\tFROM provider_releases\n\t\t\tWHERE hash = ca.hash\n\t\t\tORDER BY published_at DESC, provider, project_id, version_id\n\t\t\tLIMIT 1\n\t\t)\n\t\tWHERE ca.cluster_id = ?\n\t\t",
|
||||||
|
"describe": {
|
||||||
|
"columns": [
|
||||||
|
{
|
||||||
|
"name": "hash!: String",
|
||||||
|
"ordinal": 0,
|
||||||
|
"type_info": "Text",
|
||||||
|
"origin": {
|
||||||
|
"Table": {
|
||||||
|
"table": "cluster_artifacts",
|
||||||
|
"name": "hash"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "cluster_file_name!: String",
|
||||||
|
"ordinal": 1,
|
||||||
|
"type_info": "Text",
|
||||||
|
"origin": {
|
||||||
|
"Table": {
|
||||||
|
"table": "cluster_artifacts",
|
||||||
|
"name": "cluster_file_name"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "enabled!: i64",
|
||||||
|
"ordinal": 2,
|
||||||
|
"type_info": "Integer",
|
||||||
|
"origin": {
|
||||||
|
"Table": {
|
||||||
|
"table": "cluster_artifacts",
|
||||||
|
"name": "enabled"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "seen_status!: i64",
|
||||||
|
"ordinal": 3,
|
||||||
|
"type_info": "Integer",
|
||||||
|
"origin": {
|
||||||
|
"Table": {
|
||||||
|
"table": "cluster_artifacts",
|
||||||
|
"name": "seen_status"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "content_type!: i64",
|
||||||
|
"ordinal": 4,
|
||||||
|
"type_info": "Integer",
|
||||||
|
"origin": {
|
||||||
|
"Table": {
|
||||||
|
"table": "artifacts",
|
||||||
|
"name": "content_type"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "file_name!: String",
|
||||||
|
"ordinal": 5,
|
||||||
|
"type_info": "Text",
|
||||||
|
"origin": {
|
||||||
|
"Table": {
|
||||||
|
"table": "artifacts",
|
||||||
|
"name": "file_name"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "provider?: i64",
|
||||||
|
"ordinal": 6,
|
||||||
|
"type_info": "Integer",
|
||||||
|
"origin": {
|
||||||
|
"Table": {
|
||||||
|
"table": "provider_releases",
|
||||||
|
"name": "provider"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "project_id?: String",
|
||||||
|
"ordinal": 7,
|
||||||
|
"type_info": "Text",
|
||||||
|
"origin": {
|
||||||
|
"Table": {
|
||||||
|
"table": "provider_releases",
|
||||||
|
"name": "project_id"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "version_id?: String",
|
||||||
|
"ordinal": 8,
|
||||||
|
"type_info": "Text",
|
||||||
|
"origin": {
|
||||||
|
"Table": {
|
||||||
|
"table": "provider_releases",
|
||||||
|
"name": "version_id"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "display_name?: String",
|
||||||
|
"ordinal": 9,
|
||||||
|
"type_info": "Text",
|
||||||
|
"origin": {
|
||||||
|
"Table": {
|
||||||
|
"table": "provider_releases",
|
||||||
|
"name": "display_name"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "display_version?: String",
|
||||||
|
"ordinal": 10,
|
||||||
|
"type_info": "Text",
|
||||||
|
"origin": {
|
||||||
|
"Table": {
|
||||||
|
"table": "provider_releases",
|
||||||
|
"name": "display_version"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "published_at?: String",
|
||||||
|
"ordinal": 11,
|
||||||
|
"type_info": "Text",
|
||||||
|
"origin": {
|
||||||
|
"Table": {
|
||||||
|
"table": "provider_releases",
|
||||||
|
"name": "published_at"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"parameters": {
|
||||||
|
"Right": 1
|
||||||
|
},
|
||||||
|
"nullable": [
|
||||||
|
false,
|
||||||
|
false,
|
||||||
|
false,
|
||||||
|
false,
|
||||||
|
false,
|
||||||
|
false,
|
||||||
|
true,
|
||||||
|
true,
|
||||||
|
true,
|
||||||
|
true,
|
||||||
|
true,
|
||||||
|
true
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"hash": "d1fc4c93f507d459e590cda5b5830a1e26e3047139db08a9f6b90c84185402a6"
|
||||||
|
}
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"db_name": "SQLite",
|
"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",
|
"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\tORDER BY last_played IS NULL, last_played DESC, name ASC\n\t\t",
|
||||||
"describe": {
|
"describe": {
|
||||||
"columns": [
|
"columns": [
|
||||||
{
|
{
|
||||||
|
|
@ -134,6 +134,61 @@
|
||||||
"name": "linked_modpack_hash"
|
"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": {
|
"parameters": {
|
||||||
|
|
@ -151,8 +206,13 @@
|
||||||
true,
|
true,
|
||||||
true,
|
true,
|
||||||
true,
|
true,
|
||||||
|
true,
|
||||||
|
false,
|
||||||
|
false,
|
||||||
|
true,
|
||||||
|
false,
|
||||||
true
|
true
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"hash": "4557535ab4f4e972a2b3111cc29af15fd91e22e080742f75a0a393fc45c59b22"
|
"hash": "d636f4db52b3bb77d9d887500afbff5658afa10db3cf56794b8fa5e12535f3f7"
|
||||||
}
|
}
|
||||||
12
.sqlx/query-dff3f2fe8e50eaa7ffebab7490306bc40e846ad708975991346aab83870e0968.json
generated
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
{
|
||||||
|
"db_name": "SQLite",
|
||||||
|
"query": "\n DELETE FROM cluster_bundle_type_opt_outs\n WHERE cluster_id = ? AND bundle_name = ? AND content_type = ?\n ",
|
||||||
|
"describe": {
|
||||||
|
"columns": [],
|
||||||
|
"parameters": {
|
||||||
|
"Right": 3
|
||||||
|
},
|
||||||
|
"nullable": []
|
||||||
|
},
|
||||||
|
"hash": "dff3f2fe8e50eaa7ffebab7490306bc40e846ad708975991346aab83870e0968"
|
||||||
|
}
|
||||||
12
.sqlx/query-e03d85ee97b3a632d5946019865d9efb5d665e521519d05b16a4b66b066987ca.json
generated
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
{
|
||||||
|
"db_name": "SQLite",
|
||||||
|
"query": "\n UPDATE cluster_optional_mods SET seen_status = ?\n WHERE cluster_id = ? AND package_id = ?\n ",
|
||||||
|
"describe": {
|
||||||
|
"columns": [],
|
||||||
|
"parameters": {
|
||||||
|
"Right": 3
|
||||||
|
},
|
||||||
|
"nullable": []
|
||||||
|
},
|
||||||
|
"hash": "e03d85ee97b3a632d5946019865d9efb5d665e521519d05b16a4b66b066987ca"
|
||||||
|
}
|
||||||
12
.sqlx/query-e12409b04c8a3eea09a4bfc1014bca6fe5fbc1256b3537ed37195ed20075f944.json
generated
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
{
|
||||||
|
"db_name": "SQLite",
|
||||||
|
"query": "\n\t\tINSERT INTO release_migration_waitlist (\n\t\t\ttarget_cluster_id, provider, project_id, content_type,\n\t\t\tsource_hash, display_name, added_at, expires_at, enabled\n\t\t)\n\t\tVALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)\n\t\tON CONFLICT(target_cluster_id, provider, project_id) DO UPDATE SET\n\t\t\tcontent_type = excluded.content_type,\n\t\t\tsource_hash = excluded.source_hash,\n\t\t\tdisplay_name = excluded.display_name,\n\t\t\tadded_at = excluded.added_at,\n\t\t\texpires_at = excluded.expires_at,\n\t\t\tenabled = excluded.enabled\n\t\t",
|
||||||
|
"describe": {
|
||||||
|
"columns": [],
|
||||||
|
"parameters": {
|
||||||
|
"Right": 9
|
||||||
|
},
|
||||||
|
"nullable": []
|
||||||
|
},
|
||||||
|
"hash": "e12409b04c8a3eea09a4bfc1014bca6fe5fbc1256b3537ed37195ed20075f944"
|
||||||
|
}
|
||||||
12
.sqlx/query-e2ee6fbe534dd47ce658d547c2bfc3a4e86dfce86da3a4ffe35d25d1fa412d13.json
generated
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
{
|
||||||
|
"db_name": "SQLite",
|
||||||
|
"query": "\n DELETE FROM cluster_optional_mods\n WHERE cluster_id = ? AND package_id = ?\n ",
|
||||||
|
"describe": {
|
||||||
|
"columns": [],
|
||||||
|
"parameters": {
|
||||||
|
"Right": 2
|
||||||
|
},
|
||||||
|
"nullable": []
|
||||||
|
},
|
||||||
|
"hash": "e2ee6fbe534dd47ce658d547c2bfc3a4e86dfce86da3a4ffe35d25d1fa412d13"
|
||||||
|
}
|
||||||
|
|
@ -1,62 +0,0 @@
|
||||||
{
|
|
||||||
"db_name": "SQLite",
|
|
||||||
"query": "\n\t\tSELECT cluster_id, hash, cluster_file_name, enabled\n\t\tFROM cluster_artifacts\n\t\tWHERE cluster_id = ?\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"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"parameters": {
|
|
||||||
"Right": 1
|
|
||||||
},
|
|
||||||
"nullable": [
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
false
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"hash": "e372eec993f6e82238fe95b1c74dbb377ee08e44c7e8c3b5eaa6f3b8b229fddf"
|
|
||||||
}
|
|
||||||
12
.sqlx/query-f050a2d799f838b8fffca63c8ca0c758fc8787e982a2587b0a6f3c91abdcb3ec.json
generated
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
{
|
||||||
|
"db_name": "SQLite",
|
||||||
|
"query": "DELETE FROM browser_package_updates WHERE cluster_id = ?",
|
||||||
|
"describe": {
|
||||||
|
"columns": [],
|
||||||
|
"parameters": {
|
||||||
|
"Right": 1
|
||||||
|
},
|
||||||
|
"nullable": []
|
||||||
|
},
|
||||||
|
"hash": "f050a2d799f838b8fffca63c8ca0c758fc8787e982a2587b0a6f3c91abdcb3ec"
|
||||||
|
}
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"db_name": "SQLite",
|
"db_name": "SQLite",
|
||||||
"query": "\n\t\tINSERT INTO java_versions (absolute_path, major, version, vendor, os_arch)\n\t\tVALUES (?, ?, ?, ?, ?)\n\t\tON CONFLICT(absolute_path) DO UPDATE SET\n\t\t\tmajor = excluded.major,\n\t\t\tversion = excluded.version,\n\t\t\tvendor = excluded.vendor,\n\t\t\tos_arch = excluded.os_arch\n\t\tRETURNING absolute_path, major, version, vendor, os_arch\n\t\t",
|
"query": "\n\t\tINSERT INTO java_versions (absolute_path, major, version, vendor, os_arch, is_jdk, probe_version)\n\t\tVALUES (?, ?, ?, ?, ?, ?, ?)\n\t\tON CONFLICT(absolute_path) DO UPDATE SET\n\t\t\tmajor = excluded.major,\n\t\t\tversion = excluded.version,\n\t\t\tvendor = excluded.vendor,\n\t\t\tos_arch = excluded.os_arch,\n\t\t\tis_jdk = excluded.is_jdk,\n\t\t\tprobe_version = excluded.probe_version\n\t\tRETURNING absolute_path, major, version, vendor, os_arch, is_jdk as \"is_jdk: bool\", probe_version\n\t\t",
|
||||||
"describe": {
|
"describe": {
|
||||||
"columns": [
|
"columns": [
|
||||||
{
|
{
|
||||||
|
|
@ -57,18 +57,42 @@
|
||||||
"name": "os_arch"
|
"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": {
|
"parameters": {
|
||||||
"Right": 5
|
"Right": 7
|
||||||
},
|
},
|
||||||
"nullable": [
|
"nullable": [
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
|
false,
|
||||||
|
false,
|
||||||
false
|
false
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"hash": "a3bd6cf3048a6a5ed9d29e6bbb7f517676fe715c8af45eb5c58d69073e2d0304"
|
"hash": "f5dbcf7798afb495efe228a4ba7d1ddd9904cc25f34bef3c16f29cfb141158f0"
|
||||||
}
|
}
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"db_name": "SQLite",
|
"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\n\t\tFROM setting_profiles\n\t\tORDER BY name ASC\n\t\t",
|
"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\tORDER BY name ASC\n\t\t",
|
||||||
"describe": {
|
"describe": {
|
||||||
"columns": [
|
"columns": [
|
||||||
{
|
{
|
||||||
|
|
@ -123,6 +123,17 @@
|
||||||
"name": "os_extra"
|
"name": "os_extra"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "browser_update_mode",
|
||||||
|
"ordinal": 11,
|
||||||
|
"type_info": "Text",
|
||||||
|
"origin": {
|
||||||
|
"Table": {
|
||||||
|
"table": "setting_profiles",
|
||||||
|
"name": "browser_update_mode"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"parameters": {
|
"parameters": {
|
||||||
|
|
@ -139,8 +150,9 @@
|
||||||
true,
|
true,
|
||||||
true,
|
true,
|
||||||
true,
|
true,
|
||||||
|
true,
|
||||||
true
|
true
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"hash": "4ab22fa481720e3bae5befee821fe1c0689d666f8bbcde98890e2d4715e9bc80"
|
"hash": "f68b9ade92feb989828ca81582c5960bf2968c4b75705e1a0e6800e97c3f4628"
|
||||||
}
|
}
|
||||||
12
.sqlx/query-ff07b78c0e97f1f38a6900092391d22e475471578b5ef73927e5427c2c0abc77.json
generated
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
{
|
||||||
|
"db_name": "SQLite",
|
||||||
|
"query": "DELETE FROM release_migration_waitlist WHERE expires_at <= ?",
|
||||||
|
"describe": {
|
||||||
|
"columns": [],
|
||||||
|
"parameters": {
|
||||||
|
"Right": 1
|
||||||
|
},
|
||||||
|
"nullable": []
|
||||||
|
},
|
||||||
|
"hash": "ff07b78c0e97f1f38a6900092391d22e475471578b5ef73927e5427c2c0abc77"
|
||||||
|
}
|
||||||
25
AGENTS.md
Normal file
|
|
@ -0,0 +1,25 @@
|
||||||
|
# OneLauncher-Cracked Development & Release Guidelines
|
||||||
|
|
||||||
|
## 1. Release Versioning Policy
|
||||||
|
- **Suffix Progression**: Every fix, rebuild, or update to an existing release MUST increment the cracked revision suffix monotonically:
|
||||||
|
- Example: `v2.8.0-c1` -> `v2.8.0-c2` -> `v2.8.0-c3`
|
||||||
|
- **Tag Immutability**: Never force-push or re-upload assets over an existing release tag. The in-launcher `CrackedVersion` SemVer parser relies on strictly increasing revisions to detect and download updates.
|
||||||
|
- **Cargo.toml Version**: When bumping the suffix, update the workspace `version = "2.8.0-c<N>"` in the root `Cargo.toml`.
|
||||||
|
|
||||||
|
## 2. Remote Synchronization (Dual-Push)
|
||||||
|
- Primary Forgejo remote: `https://git.oiupoyt.space/oiupoyt/OneLauncher-Cracked.git` (remote: `forgejo`)
|
||||||
|
- GitHub remote: `https://github.com/oiupoyt/OneLauncher-Cracked.git` (remote: `origin`)
|
||||||
|
- Always push to both remotes:
|
||||||
|
```bash
|
||||||
|
git push origin <branch> --tags
|
||||||
|
git push forgejo <branch> --tags
|
||||||
|
```
|
||||||
|
|
||||||
|
## 3. Build & Compiler Performance
|
||||||
|
- **ThinLTO**: Use `lto = "thin"` with `codegen-units = 16` and `debug = false` in `[profile.release]`. Do not use `lto = "fat"` (causes 10m+ single-threaded linking stalls).
|
||||||
|
- **Fast Linker**: On Linux, use `clang -fuse-ld=lld` configured in `.cargo/config.toml`.
|
||||||
|
- **Offline Mode & Skin Pipeline**:
|
||||||
|
- Preserve `account_for_launch` bypass in `oneclient_auth`.
|
||||||
|
- Always verify `paths::all_skins_dirs()` for multi-directory skin search.
|
||||||
|
- Keep `--userProperties` argument injection in `oneclient_core/src/game/launch.rs`.
|
||||||
|
- Ensure TCP socket `flush()` and `shutdown()` in `skin_server.rs` before connection termination.
|
||||||
34
CHANGELOG.md
Normal file
|
|
@ -0,0 +1,34 @@
|
||||||
|
## 2.8.0 (2026-10-09)
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
- Added safe multiple minecraft instances launching, only dedicated clusters tho by [rozwader](https://github.com/rozwader)
|
||||||
|
|
||||||
|
### Fixes
|
||||||
|
|
||||||
|
- Added better informations about errors from mclogs. by [rozwader](https://github.com/rozwader)
|
||||||
|
- Added status bar showing up if a player is logged out or he has a stale refresh token by [rozwader](https://github.com/rozwader)
|
||||||
|
- Added a filter for choosing modpack loaders by [rozwader](https://github.com/rozwader)
|
||||||
|
- SkyBlock content installed without asking is removed from 26.3 clusters once, and turning an optional bundle down removes its mods
|
||||||
|
- Fixed shield.io badges not rendering properly in markdown viewers by [rozwader](https://github.com/rozwader)
|
||||||
|
|
||||||
|
## 2.7.0 (2026-10-05)
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
- Code blocks are selectable, and the open link confirmation has a copy button by [LynithDev](https://github.com/LynithDev)
|
||||||
|
- Game settings have a Game Arguments field for passing extra arguments to Minecraft, globally or per cluster by [Wyvest](https://github.com/Wyvest)
|
||||||
|
- Game logs hide account tokens, and the game output starts with the launch command ready to paste into a terminal by [LynithDev](https://github.com/LynithDev)
|
||||||
|
- GitHub hosted mods have a "View in browser" option that opens their repository by [LynithDev](https://github.com/LynithDev)
|
||||||
|
- The changelog page now shows each GitHub release's notes by [LynithDev](https://github.com/LynithDev)
|
||||||
|
- The mods folder now syncs with the launcher: jars added, renamed or replaced by hand show up in the Mods list, and jars deleted by hand are switched off instead of being put back by [Wyvest](https://github.com/Wyvest)
|
||||||
|
|
||||||
|
- Choose which GPU the game renders on by [LynithDev](https://github.com/LynithDev)
|
||||||
|
|
||||||
|
### Fixes
|
||||||
|
|
||||||
|
- Icons show on Linux systems with a comma decimal locale by [LynithDev](https://github.com/LynithDev)
|
||||||
|
- The "Uploaded to mclo.gs" notification no longer repeats when switching back to the Logs tab by [LynithDev](https://github.com/LynithDev)
|
||||||
|
- Open folder and open in browser work again on Linux by [LynithDev](https://github.com/LynithDev)
|
||||||
|
- Optional bundles are now offered before the first launch of every new version instead of being installed or skipped silently by [Wyvest](https://github.com/Wyvest)
|
||||||
|
- System information in the settings sidebar shows a tooltip explaining it can be clicked to copy by [LynithDev](https://github.com/LynithDev)
|
||||||
|
|
@ -32,7 +32,7 @@ To find an issue that interests you, you can browse through our [existing issues
|
||||||
#### Making Changes Locally
|
#### Making Changes Locally
|
||||||
|
|
||||||
This project is a pure Rust [`Cargo`] workspace (edition 2024). Make sure you have a
|
This project is a pure Rust [`Cargo`] workspace (edition 2024). Make sure you have a
|
||||||
recent Rust toolchain (`rustc` **1.85+**) installed before proceeding — the easiest way
|
recent Rust toolchain (`rustc` **1.97+**) installed before proceeding - the easiest way
|
||||||
is via [rustup].
|
is via [rustup].
|
||||||
|
|
||||||
To make changes locally, follow these steps:
|
To make changes locally, follow these steps:
|
||||||
|
|
@ -73,6 +73,15 @@ and per-OS prerequisites.
|
||||||
Once you have finished making your changes, create a pull request (PR) to submit them.
|
Once you have finished making your changes, create a pull request (PR) to submit them.
|
||||||
|
|
||||||
- Fill out the template to help reviewers understand your changes and the purpose of your PR.
|
- Fill out the template to help reviewers understand your changes and the purpose of your PR.
|
||||||
|
- If your change is user-facing, add a change file with `knope document-change`, or create `.changeset/<anything>.md` by hand:
|
||||||
|
```md
|
||||||
|
---
|
||||||
|
default: patch
|
||||||
|
---
|
||||||
|
|
||||||
|
# Fixed the thing players noticed
|
||||||
|
```
|
||||||
|
Use `patch` for fixes, `minor` for features and `major` for breaking changes. The title becomes your line in the release notes. PRs without one fail the `Changeset Check` unless a maintainer labels them `no changeset`.
|
||||||
- If you are addressing an existing issue, don't forget to [link your PR to the issue].
|
- If you are addressing an existing issue, don't forget to [link your PR to the issue].
|
||||||
- Enable the checkbox to [allow maintainer edits] so that the branch can be updated for merging.
|
- Enable the checkbox to [allow maintainer edits] so that the branch can be updated for merging.
|
||||||
- Once you submit your PR, a team member will review your proposal. They may ask questions or request additional information.
|
- Once you submit your PR, a team member will review your proposal. They may ask questions or request additional information.
|
||||||
|
|
|
||||||
3426
Cargo.lock
generated
174
Cargo.toml
|
|
@ -9,33 +9,38 @@ authors = [
|
||||||
"Polyfrost",
|
"Polyfrost",
|
||||||
"Polyfrost Contributors",
|
"Polyfrost Contributors",
|
||||||
]
|
]
|
||||||
documentation = "https://github.com/Polyfrost/OneLauncher"
|
documentation = "https://git.oiupoyt.space/oiupoyt/OneLauncher-Cracked"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
homepage = "https://polyfrost.org/projects/oneclient"
|
homepage = "https://polyfrost.org/projects/oneclient"
|
||||||
license = "GPL-3.0-only"
|
license = "GPL-3.0-only"
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
repository = "https://github.com/Polyfrost/OneLauncher"
|
repository = "https://git.oiupoyt.space/oiupoyt/OneLauncher-Cracked"
|
||||||
version = "2.0.0"
|
rust-version = "1.97"
|
||||||
|
version = "2.8.0-c1"
|
||||||
|
|
||||||
[workspace.dependencies]
|
[workspace.dependencies]
|
||||||
# core
|
# core
|
||||||
polyio = { path = "./packages/polyio" }
|
oneclient_auth = {path = "./packages/oneclient_auth"}
|
||||||
oneclient_core = { path = "./packages/oneclient_core" }
|
oneclient_cluster = {path = "./packages/oneclient_cluster"}
|
||||||
oneclient_db = { path = "./packages/oneclient_db" }
|
oneclient_common = {path = "./packages/oneclient_common"}
|
||||||
oneclient_macro = { path = "./packages/oneclient_macro" }
|
oneclient_content = {path = "./packages/oneclient_content"}
|
||||||
|
oneclient_core = {path = "./packages/oneclient_core"}
|
||||||
|
oneclient_db = {path = "./packages/oneclient_db"}
|
||||||
|
oneclient_discord = {path = "./packages/oneclient_discord"}
|
||||||
|
oneclient_events = {path = "./packages/oneclient_events"}
|
||||||
|
oneclient_java = {path = "./packages/oneclient_java"}
|
||||||
|
oneclient_macro = {path = "./packages/oneclient_macro"}
|
||||||
|
oneclient_mc = {path = "./packages/oneclient_mc"}
|
||||||
|
oneclient_net = {path = "./packages/oneclient_net"}
|
||||||
|
oneclient_polyplus = {path = "./packages/oneclient_polyplus"}
|
||||||
|
polyio = {path = "./packages/polyio"}
|
||||||
|
|
||||||
# core (extra)
|
# core (extra)
|
||||||
gamemode_rs = {path = "./packages/gamemode_rs"}
|
|
||||||
interfrost = {version = "=1.3.2"}
|
|
||||||
discord-rich-presence = {version = "=1.1.0"}
|
discord-rich-presence = {version = "=1.1.0"}
|
||||||
|
interfrost = {version = "=1.5.0"}
|
||||||
|
|
||||||
# logging
|
# logging
|
||||||
tracing = {version = "=0.1.44"}
|
sentry = {version = "=0.49.3", default-features = false, features = [
|
||||||
tracing-futures = {version = "=0.2.5"}
|
|
||||||
tracing-subscriber = {version = "=0.3.23", features = ["env-filter", "fmt", "ansi", "json", "parking_lot", "registry"]}
|
|
||||||
|
|
||||||
sentry = {version = "=0.48.5", default-features = false, features = [
|
|
||||||
"backtrace",
|
"backtrace",
|
||||||
"contexts",
|
"contexts",
|
||||||
"debug-images",
|
"debug-images",
|
||||||
|
|
@ -44,7 +49,10 @@ sentry = {version = "=0.48.5", default-features = false, features = [
|
||||||
"reqwest",
|
"reqwest",
|
||||||
"rustls",
|
"rustls",
|
||||||
]}
|
]}
|
||||||
sentry-tracing = {version = "=0.48.5"}
|
sentry-tracing = {version = "=0.49.3"}
|
||||||
|
tracing = {version = "=0.1.44"}
|
||||||
|
tracing-futures = {version = "=0.2.5"}
|
||||||
|
tracing-subscriber = {version = "=0.3.23", features = ["env-filter", "fmt", "ansi", "json", "parking_lot", "registry"]}
|
||||||
|
|
||||||
# database
|
# database
|
||||||
sqlx = {version = "=0.9.0", default-features = false, features = [
|
sqlx = {version = "=0.9.0", default-features = false, features = [
|
||||||
|
|
@ -60,10 +68,15 @@ sqlx = {version = "=0.9.0", default-features = false, features = [
|
||||||
]}
|
]}
|
||||||
|
|
||||||
# async
|
# async
|
||||||
async-trait = {version = "=0.1.89"}
|
astral-tokio-tar = {version = "=0.7.0"}
|
||||||
futures-util = {version = "=0.3.32", features = ["tokio-io"]}
|
async-compression = {version = "=0.4.48", features = ["tokio", "gzip"]}
|
||||||
futures-lite = { version = "=2.6.1" }
|
async-stream = {version = "=0.3.6"}
|
||||||
reqwest = {version = "=0.13.3", default-features = false, features = [
|
async-tempfile = {version = "=0.8.0", features = ["uuid"]}
|
||||||
|
async-trait = {version = "=0.1.92"}
|
||||||
|
async_zip = {version = "=0.0.19", features = ["tracing", "chrono", "tokio", "tokio-fs", "deflate", "deflate64"]}
|
||||||
|
futures-lite = {version = "=2.6.1"}
|
||||||
|
futures-util = {version = "=0.3.34", features = ["tokio-io"]}
|
||||||
|
reqwest = {version = "=0.13.5", default-features = false, features = [
|
||||||
"json",
|
"json",
|
||||||
"stream",
|
"stream",
|
||||||
"multipart",
|
"multipart",
|
||||||
|
|
@ -75,74 +88,95 @@ reqwest = {version = "=0.13.3", default-features = false, features = [
|
||||||
"gzip",
|
"gzip",
|
||||||
"brotli",
|
"brotli",
|
||||||
"form",
|
"form",
|
||||||
"hickory-dns",
|
"system-proxy",
|
||||||
]}
|
]}
|
||||||
reqwest-websocket = {version = "=0.6.0"}
|
reqwest-websocket = {version = "=0.6.0"}
|
||||||
tokio = {version = "=1.52.3", features = ["full"]}
|
tokio = {version = "=1.53.1", features = ["full"]}
|
||||||
tokio-stream = {version = "=0.1.18", features = ["full"]}
|
tokio-stream = {version = "=0.1.19", features = ["full"]}
|
||||||
tokio-util = {version = "=0.7.18", features = ["full"]}
|
tokio-util = {version = "=0.7.19", features = ["full"]}
|
||||||
async_zip = { version = "=0.0.18", features = ["full"]}
|
|
||||||
astral-tokio-tar = { version = "=0.6.2" }
|
|
||||||
async-tempfile = { version = "=0.7.0", features = ["uuid"] }
|
|
||||||
async-stream = { version = "=0.3.6" }
|
|
||||||
async-compression = { version = "=0.4.42", features = ["all"] }
|
|
||||||
|
|
||||||
# crypto (content hashing)
|
# crypto (content hashing)
|
||||||
digest = { version = "=0.10.7", features = ["std"] }
|
byteorder = {version = "=1.5.0"}
|
||||||
sha1 = { version = "=0.10.6", default-features = false }
|
digest = {version = "=0.11.3"}
|
||||||
sha2 = { version = "=0.10.9", default-features = false }
|
md-5 = {version = "=0.11.0", default-features = false}
|
||||||
md-5 = { version = "=0.10.6", default-features = false }
|
p256 = {version = "=0.14.0", features = ["ecdsa", "pkcs8"]}
|
||||||
p256 = { version = "=0.13.2", features = ["ecdsa", "pkcs8"] }
|
sha1 = {version = "=0.11.0", default-features = false}
|
||||||
byteorder = { version = "=1.5.0" }
|
sha2 = {version = "=0.11.0", default-features = false}
|
||||||
|
|
||||||
# util
|
# util
|
||||||
base64 = {version = "=0.22.1"}
|
arboard = {version = "=3.6.1", features = ["wayland-data-control"]}
|
||||||
chrono = {version = "=0.4.44", features = ["serde"]}
|
arc-swap = {version = "=1.9.2"}
|
||||||
|
base64 = {version = "=0.23.1"}
|
||||||
|
bytes = {version = "=1.12.1"}
|
||||||
|
chrono = {version = "=0.4.45", features = ["serde"]}
|
||||||
directories = {version = "=6.0.0"}
|
directories = {version = "=6.0.0"}
|
||||||
rand = {version = "=0.10.1"}
|
dunce = {version = "=1.0.5"}
|
||||||
serde = {version = "=1.0.228"}
|
htmd = {version = "=0.5.5"}
|
||||||
serde_json = {version = "=1.0.150"}
|
indicatif = {version = "=0.18.6", features = ["tokio"]}
|
||||||
|
junction = {version = "=2.1.0"}
|
||||||
|
libc = {version = "=0.2.189"}
|
||||||
|
notify = {version = "=8.2.0"}
|
||||||
|
open = {version = "=5.4.4", features = ["shellexecute-on-windows"]}
|
||||||
|
parking_lot = {version = "=0.12.5"}
|
||||||
|
pulldown-cmark = {version = "=0.13.4", default-features = false}
|
||||||
|
rand = {version = "=0.10.3"}
|
||||||
|
regex = {version = "=1.13.1"}
|
||||||
|
rfd = {version = "=0.17.2"}
|
||||||
|
rust-embed = {version = "=8.12.0", features = ["include-exclude", "compression", "debug-embed"]}
|
||||||
|
sanitize-filename = {version = "=0.6.0"}
|
||||||
|
serde = {version = "=1.0.229"}
|
||||||
|
serde_json = {version = "=1.0.151"}
|
||||||
|
serde_repr = {version = "=0.1.21"}
|
||||||
|
sysinfo = {version = "=0.39.6"}
|
||||||
|
toml = {version = "=1.1.6", default-features = false, features = ["parse", "serde"]}
|
||||||
|
trash = {version = "=5.2.9"}
|
||||||
|
percent-encoding = {version = "=2.3.2"}
|
||||||
url = {version = "=2.5.8", features = ["serde"]}
|
url = {version = "=2.5.8", features = ["serde"]}
|
||||||
uuid = {version = "=1.23.1", features = ["serde", "v4"]}
|
uuid = {version = "=1.26.1", features = ["serde", "v4"]}
|
||||||
sanitize-filename = { version = "=0.6.0" }
|
windows-sys = {version = "=0.61.2", features = ["Win32_Foundation", "Win32_Storage_FileSystem"]}
|
||||||
regex = { version = "=1.12.3" }
|
|
||||||
parking_lot = { version = "=0.12.5" }
|
|
||||||
dunce = { version = "=1.0.5" }
|
|
||||||
junction = { version = "=2.0.0" }
|
|
||||||
bytes = { version = "=1.11.1" }
|
|
||||||
indicatif = { version = "=0.18.4", features = [ "tokio" ]}
|
|
||||||
sysinfo = { version = "=0.39.5" }
|
|
||||||
|
|
||||||
# util (codegen/macro)
|
# util (codegen/macro)
|
||||||
proc-macro2 = {version = "=1.0.106"}
|
anyhow = {version = "=1.0.104"}
|
||||||
quote = {version = "=1.0.45"}
|
proc-macro2 = {version = "=1.0.107"}
|
||||||
thiserror = {version = "=2.0.18" }
|
quote = {version = "=1.0.47"}
|
||||||
anyhow = {version = "=1.0.102"}
|
|
||||||
strum = {version = "=0.28.0", features = ["derive"]}
|
strum = {version = "=0.28.0", features = ["derive"]}
|
||||||
syn = {version = "=2.0.117"}
|
syn = {version = "=3.0.6"}
|
||||||
|
thiserror = {version = "=2.0.21"}
|
||||||
|
|
||||||
|
# ui
|
||||||
|
freya = {git = "https://github.com/Polyfrost/freya", rev = "12f696f68c4936617b8627c862b39acb3d9cca2b", features = ["engine", "winit", "router", "remote-asset", "sdk-tokio", "query", "radio", "borderless", "titlebar", "tray", "metrics"]}
|
||||||
|
freya-core = {git = "https://github.com/Polyfrost/freya", rev = "12f696f68c4936617b8627c862b39acb3d9cca2b"}
|
||||||
|
freya-testing = {git = "https://github.com/Polyfrost/freya", rev = "12f696f68c4936617b8627c862b39acb3d9cca2b"}
|
||||||
|
freya-skia-safe = "=0.103.2" # required for the SKSL player renderer
|
||||||
image = {version = "=0.25.10", default-features = false, features = ["png", "jpeg"]}
|
image = {version = "=0.25.10", default-features = false, features = ["png", "jpeg"]}
|
||||||
htmd = {version = "=0.5.4"}
|
|
||||||
arboard = {version = "=3.6.1"}
|
|
||||||
trash = {version = "=5.2.6"}
|
|
||||||
|
|
||||||
# required for the SKSL player renderer
|
|
||||||
freya-skia-safe = "=0.98.0"
|
|
||||||
freya = { git = "https://github.com/marc2332/freya.git", branch = "fix/blur", features = ["engine", "winit", "router", "remote-asset", "sdk", "markdown", "query", "titlebar"] }
|
|
||||||
|
|
||||||
[patch.crates-io]
|
|
||||||
freya = { git = "https://github.com/marc2332/freya.git", branch = "fix/blur" }
|
|
||||||
|
|
||||||
[profile.release]
|
[profile.release]
|
||||||
opt-level = 3
|
codegen-units = 16
|
||||||
lto = "fat"
|
|
||||||
codegen-units = 1
|
|
||||||
strip = true
|
|
||||||
panic = "abort"
|
|
||||||
debug = false
|
debug = false
|
||||||
|
lto = "thin"
|
||||||
|
opt-level = 3
|
||||||
|
panic = "abort"
|
||||||
|
split-debuginfo = "packed"
|
||||||
|
strip = true
|
||||||
|
|
||||||
[profile.release-profiling]
|
[profile.release-profiling]
|
||||||
inherits = "release"
|
inherits = "release"
|
||||||
|
|
||||||
strip = false
|
|
||||||
debug = true
|
debug = true
|
||||||
|
strip = false
|
||||||
|
|
||||||
|
[profile.release-fastprofiling]
|
||||||
|
inherits = "release"
|
||||||
|
|
||||||
|
codegen-units = 16
|
||||||
|
debug = true
|
||||||
|
lto = false
|
||||||
|
strip = false
|
||||||
|
|
||||||
|
[profile.dev]
|
||||||
|
opt-level = 0
|
||||||
|
debug = 0
|
||||||
|
strip = "debuginfo"
|
||||||
|
|
||||||
|
[profile.dev.package."*"]
|
||||||
|
opt-level = 2
|
||||||
|
|
|
||||||
63
README.md
|
|
@ -1,67 +1,20 @@
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
<img src=".github/media/RepoBanner.png" alt="Repository Banner" />
|
<img src="https://github.com/user-attachments/assets/e8359baa-23fb-457a-8910-169974487a98" alt="OneLauncher Logo" width="220" style="border-radius: 24px;" />
|
||||||
|
|
||||||
# OneLauncher | OneClient
|
forked from [OneLauncher](https://github.com/Polyfrost/OneLauncher) allowing for uh offline authentication
|
||||||
The monorepo containing the code for OneLauncher, OneClient, and their core backend.
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
> [!NOTE]
|
## download from [**Releases Page**](https://git.oiupoyt.space/oiupoyt/OneLauncher-Cracked/releases).
|
||||||
> This is **OneLauncher/OneClient v2** — a full rewrite in Rust using [Freya](https://freyaui.dev/).
|
|
||||||
> All previous web-based (React / Tauri) code has been removed.
|
|
||||||
|
|
||||||
## Technologies Used
|
yes the actual client performs normally aswell
|
||||||
- [**Rust**](https://www.rust-lang.org/) (edition 2024)
|
|
||||||
- [**Freya**](https://freyaui.dev/) - native GUI framework for Rust
|
|
||||||
|
|
||||||
## Contributing
|
> [!WARNING]
|
||||||
We welcome contributions! Please read our [contributing guidelines](CONTRIBUTING.md) before getting started.
|
> DO NOT use official Microsoft/Mojang accounts with this launcher. This bypasses authentication and is intended for offline play only. Using with official servers may violate Minecraft's Terms of Service.
|
||||||
|
|
||||||
### Requirements
|
|
||||||
|
|
||||||
The project targets **Rust edition 2024**, so a recent Rust toolchain is required.
|
|
||||||
|
|
||||||
- Install Rust via [rustup](https://rustup.rs/)
|
#### The Trojan:Win32/Wacatac.B!ml detection is a false positive triggered by Microsoft Defender's machine learning heuristic on newly compiled, unsigned Rust NSIS installers. The software contains no malware, telemetry, or malicious payloads.
|
||||||
- Use a toolchain that supports edition 2024 (`rustc` **1.85+**)
|
|
||||||
|
|
||||||
### Building & Running
|
intended for offline usage only.
|
||||||
|
|
||||||
```sh
|
|
||||||
# Run the app
|
|
||||||
cargo run -p oneclient_app
|
|
||||||
|
|
||||||
# Build a release binary
|
|
||||||
cargo build --release -p oneclient_app
|
|
||||||
```
|
|
||||||
|
|
||||||
### Packaging / Releasing
|
|
||||||
|
|
||||||
Installers are produced with [**cargo-packager**](https://github.com/crabnebula-dev/cargo-packager)
|
|
||||||
(the standalone bundler spun out of the Tauri bundler). Config lives in
|
|
||||||
[`packages/oneclient_app/Cargo.toml`](./packages/oneclient_app/Cargo.toml) under
|
|
||||||
`[package.metadata.packager]`.
|
|
||||||
|
|
||||||
```sh
|
|
||||||
cargo install cargo-packager --locked
|
|
||||||
|
|
||||||
# Build the binary, then bundle it for the current OS:
|
|
||||||
cargo build --release -p oneclient_app
|
|
||||||
cargo packager --release -p oneclient_app --formats <targets>
|
|
||||||
# Windows: nsis macOS: app,dmg Linux: deb,appimage
|
|
||||||
```
|
|
||||||
|
|
||||||
### Versioning
|
|
||||||
|
|
||||||
The workspace shares a single version, defined in the root [`Cargo.toml`](./Cargo.toml)
|
|
||||||
under `[workspace.package]`. Current version: **2.0.0**.
|
|
||||||
|
|
||||||
### Project Structure
|
|
||||||
|
|
||||||
All crates live under **`packages/`** in a single Cargo workspace.
|
|
||||||
|
|
||||||
- [**`oneclient_app/`**](./packages/oneclient_app/) - The Freya desktop application (UI, routes, entry point).
|
|
||||||
- [**`oneclient_core/`**](./packages/oneclient_core/) - Launcher core. Contains the entire launcher logic.
|
|
||||||
- [**`oneclient_db/`**](./packages/oneclient_db/) - SQLx-based database layer.
|
|
||||||
- [**`oneclient_macro/`**](./packages/oneclient_macro/) - Macro definitions to simplify some code.
|
|
||||||
- [**`polyio/`**](./packages/polyio/) - PolyIO-rs. Shared IO utilities (archives, files, system helpers).
|
|
||||||
|
|
|
||||||
37
distribution/aur/oneclient-bin/PKGBUILD
Normal file
|
|
@ -0,0 +1,37 @@
|
||||||
|
# Maintainer: Polyfrost <contact@atmofrost.org>
|
||||||
|
pkgname=oneclient-bin
|
||||||
|
_appname=OneClient
|
||||||
|
pkgver=2.0.1
|
||||||
|
pkgrel=1
|
||||||
|
pkgdesc="Next-generation open source Minecraft launcher (prebuilt)"
|
||||||
|
arch=('x86_64')
|
||||||
|
url="https://github.com/Polyfrost/OneLauncher"
|
||||||
|
license=('GPL-3.0-only')
|
||||||
|
depends=(
|
||||||
|
'fontconfig'
|
||||||
|
'freetype2'
|
||||||
|
'libglvnd'
|
||||||
|
'libxcursor'
|
||||||
|
'libxrandr'
|
||||||
|
'libxi'
|
||||||
|
'libxkbcommon'
|
||||||
|
'wayland'
|
||||||
|
'dbus'
|
||||||
|
'gtk3'
|
||||||
|
'libayatana-appindicator'
|
||||||
|
)
|
||||||
|
provides=('oneclient')
|
||||||
|
conflicts=('oneclient')
|
||||||
|
options=('!strip')
|
||||||
|
_debfile="${_appname}_${pkgver}_linux_x86_64.deb"
|
||||||
|
source=("${_debfile}::${url}/releases/download/oneclient-${pkgver}/${_debfile}")
|
||||||
|
sha256sums=('SKIP')
|
||||||
|
|
||||||
|
package() {
|
||||||
|
cd "$pkgdir"
|
||||||
|
bsdtar -xf "$srcdir/$_debfile"
|
||||||
|
bsdtar -xf data.tar.*
|
||||||
|
rm -f debian-binary control.tar.* data.tar.*
|
||||||
|
|
||||||
|
ln -s oneclient_app "$pkgdir/usr/bin/oneclient"
|
||||||
|
}
|
||||||
72
distribution/aur/oneclient/PKGBUILD
Normal file
|
|
@ -0,0 +1,72 @@
|
||||||
|
# Maintainer: Polyfrost <contact@atmofrost.org>
|
||||||
|
pkgname=oneclient
|
||||||
|
pkgver=2.0.1
|
||||||
|
pkgrel=1
|
||||||
|
pkgdesc="Next-generation open source Minecraft launcher (built from source)"
|
||||||
|
arch=('x86_64')
|
||||||
|
url="https://github.com/Polyfrost/OneLauncher"
|
||||||
|
license=('GPL-3.0-only')
|
||||||
|
depends=(
|
||||||
|
'fontconfig'
|
||||||
|
'freetype2'
|
||||||
|
'libglvnd'
|
||||||
|
'libxcursor'
|
||||||
|
'libxrandr'
|
||||||
|
'libxi'
|
||||||
|
'libxkbcommon'
|
||||||
|
'wayland'
|
||||||
|
'dbus'
|
||||||
|
'gtk3'
|
||||||
|
'libayatana-appindicator'
|
||||||
|
)
|
||||||
|
makedepends=(
|
||||||
|
'rust'
|
||||||
|
'cargo'
|
||||||
|
'cmake'
|
||||||
|
'clang'
|
||||||
|
'pkgconf'
|
||||||
|
'python'
|
||||||
|
)
|
||||||
|
provides=('oneclient')
|
||||||
|
conflicts=('oneclient-bin')
|
||||||
|
options=(
|
||||||
|
'!lto'
|
||||||
|
'!debug'
|
||||||
|
)
|
||||||
|
source=("$pkgname-$pkgver.tar.gz::${url}/archive/refs/tags/oneclient-${pkgver}.tar.gz")
|
||||||
|
sha256sums=('SKIP')
|
||||||
|
|
||||||
|
_srcdir="OneLauncher-oneclient-${pkgver}"
|
||||||
|
|
||||||
|
prepare() {
|
||||||
|
cd "$srcdir/$_srcdir"
|
||||||
|
export CARGO_HOME="$srcdir/cargo-home"
|
||||||
|
cargo fetch --locked --target "$(rustc -vV | sed -n 's/host: //p')"
|
||||||
|
}
|
||||||
|
|
||||||
|
build() {
|
||||||
|
cd "$srcdir/$_srcdir"
|
||||||
|
export CARGO_HOME="$srcdir/cargo-home"
|
||||||
|
export RUSTUP_TOOLCHAIN=stable
|
||||||
|
export CARGO_TARGET_DIR=target
|
||||||
|
cargo build --release --frozen --bin oneclient_app
|
||||||
|
}
|
||||||
|
|
||||||
|
package() {
|
||||||
|
cd "$srcdir/$_srcdir"
|
||||||
|
local appdir="packages/oneclient_app"
|
||||||
|
|
||||||
|
install -Dm755 "target/release/oneclient_app" "$pkgdir/usr/bin/oneclient_app"
|
||||||
|
ln -s oneclient_app "$pkgdir/usr/bin/oneclient"
|
||||||
|
|
||||||
|
install -dm755 "$pkgdir/usr/share/applications"
|
||||||
|
sed -e 's|{{exec}}|oneclient_app|g' \
|
||||||
|
-e 's|{{icon}}|org.polyfrost.OneClient|g' \
|
||||||
|
"$appdir/distribution/linux/org.polyfrost.oneclient.template" \
|
||||||
|
> "$pkgdir/usr/share/applications/org.polyfrost.OneClient.desktop"
|
||||||
|
|
||||||
|
install -Dm644 "$appdir/icons/32x32.png" "$pkgdir/usr/share/icons/hicolor/32x32/apps/org.polyfrost.OneClient.png"
|
||||||
|
install -Dm644 "$appdir/icons/128x128.png" "$pkgdir/usr/share/icons/hicolor/128x128/apps/org.polyfrost.OneClient.png"
|
||||||
|
install -Dm644 "$appdir/icons/128x128@2x.png" "$pkgdir/usr/share/icons/hicolor/256x256/apps/org.polyfrost.OneClient.png"
|
||||||
|
install -Dm644 "$appdir/icons/512x512.png" "$pkgdir/usr/share/icons/hicolor/512x512/apps/org.polyfrost.OneClient.png"
|
||||||
|
}
|
||||||
45
distribution/copr/oneclient-bin.spec
Normal file
|
|
@ -0,0 +1,45 @@
|
||||||
|
%global debug_package %{nil}
|
||||||
|
%global __strip /bin/true
|
||||||
|
%global _appname OneClient
|
||||||
|
%global _rpmfile %{_appname}_%{version}_linux_x86_64.rpm
|
||||||
|
|
||||||
|
Name: oneclient-bin
|
||||||
|
Version: 2.0.1
|
||||||
|
Release: 1%{?dist}
|
||||||
|
Summary: Next-generation open source Minecraft launcher (prebuilt)
|
||||||
|
|
||||||
|
License: GPL-3.0-only
|
||||||
|
URL: https://github.com/Polyfrost/OneLauncher
|
||||||
|
Source0: %{url}/releases/download/oneclient-%{version}/%{_rpmfile}
|
||||||
|
|
||||||
|
ExclusiveArch: x86_64
|
||||||
|
BuildRequires: bsdtar
|
||||||
|
Requires: gtk3
|
||||||
|
Requires: libayatana-appindicator-gtk3
|
||||||
|
Requires: libxdo
|
||||||
|
Requires: dbus-libs
|
||||||
|
Provides: oneclient = %{version}-%{release}
|
||||||
|
|
||||||
|
%description
|
||||||
|
OneClient is a next-generation open source Minecraft launcher.
|
||||||
|
This package ships the prebuilt binaries from the upstream release.
|
||||||
|
|
||||||
|
%prep
|
||||||
|
%setup -q -c -T
|
||||||
|
# Repackages the upstream release rpm; bsdtar reads its cpio payload directly.
|
||||||
|
bsdtar -xf %{SOURCE0}
|
||||||
|
|
||||||
|
%install
|
||||||
|
mkdir -p %{buildroot}
|
||||||
|
cp -a usr %{buildroot}/
|
||||||
|
ln -s oneclient_app %{buildroot}%{_bindir}/oneclient
|
||||||
|
|
||||||
|
%files
|
||||||
|
%{_bindir}/oneclient_app
|
||||||
|
%{_bindir}/oneclient
|
||||||
|
%{_datadir}/applications/*.desktop
|
||||||
|
%{_datadir}/icons/hicolor/*/apps/*
|
||||||
|
|
||||||
|
%changelog
|
||||||
|
* Wed Sep 09 2026 Polyfrost <contact@atmofrost.org> - 2.0.1-1
|
||||||
|
- See upstream release notes.
|
||||||
117
distribution/windows/bundle-crt.py
Normal file
|
|
@ -0,0 +1,117 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import re
|
||||||
|
import shutil
|
||||||
|
import subprocess
|
||||||
|
import sys
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
BEGIN_RES = "# >>> CRT_RESOURCES >>>"
|
||||||
|
END_RES = "# <<< CRT_RESOURCES <<<"
|
||||||
|
BEGIN_SEC = "; >>> VC_REDIST_SECTION >>>"
|
||||||
|
END_SEC = "; <<< VC_REDIST_SECTION <<<"
|
||||||
|
|
||||||
|
REPO_ROOT = Path(__file__).resolve().parents[2]
|
||||||
|
DEFAULT_CARGO_TOML = REPO_ROOT / "packages" / "oneclient_app" / "Cargo.toml"
|
||||||
|
DEFAULT_OUT = REPO_ROOT / "target" / "crt"
|
||||||
|
|
||||||
|
VSWHERE = Path(
|
||||||
|
r"C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe"
|
||||||
|
)
|
||||||
|
CRT_GLOB = r"VC\Redist\MSVC\**\x64\Microsoft.VC*.CRT\*.dll"
|
||||||
|
|
||||||
|
SECTION_REPLACEMENT = """; >>> VC_REDIST_SECTION >>>
|
||||||
|
; <<< VC_REDIST_SECTION <<<"""
|
||||||
|
|
||||||
|
|
||||||
|
def region(begin: str, end: str) -> re.Pattern:
|
||||||
|
return re.compile(
|
||||||
|
r"^[ \t]*" + re.escape(begin) + r".*?^[ \t]*" + re.escape(end) + r"[ \t]*$",
|
||||||
|
re.DOTALL | re.MULTILINE,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
REGION_RES = region(BEGIN_RES, END_RES)
|
||||||
|
REGION_SEC = region(BEGIN_SEC, END_SEC)
|
||||||
|
|
||||||
|
|
||||||
|
def find_crt_dir() -> Path:
|
||||||
|
"""Locate the newest x64 Microsoft.VC*.CRT redist directory via vswhere."""
|
||||||
|
if not VSWHERE.is_file():
|
||||||
|
sys.exit(f"error: vswhere not found at {VSWHERE}; pass --crt-dir explicitly")
|
||||||
|
|
||||||
|
out = subprocess.run(
|
||||||
|
[str(VSWHERE), "-latest", "-products", "*", "-find", CRT_GLOB],
|
||||||
|
capture_output=True,
|
||||||
|
text=True,
|
||||||
|
check=True,
|
||||||
|
).stdout
|
||||||
|
dirs = {Path(line).parent for line in out.splitlines() if line.strip()}
|
||||||
|
if not dirs:
|
||||||
|
sys.exit(f"error: vswhere found no DLLs matching {CRT_GLOB}")
|
||||||
|
|
||||||
|
newest = sorted(dirs, key=lambda p: p.parts)[-1]
|
||||||
|
print(f"CRT redist dir: {newest}")
|
||||||
|
return newest
|
||||||
|
|
||||||
|
|
||||||
|
def collect(crt_dir: Path, out_dir: Path) -> list[Path]:
|
||||||
|
dlls = sorted(crt_dir.glob("*.dll"))
|
||||||
|
if not dlls:
|
||||||
|
sys.exit(f"error: no DLLs in {crt_dir}")
|
||||||
|
|
||||||
|
if out_dir.exists():
|
||||||
|
shutil.rmtree(out_dir)
|
||||||
|
out_dir.mkdir(parents=True)
|
||||||
|
|
||||||
|
copied = []
|
||||||
|
for dll in dlls:
|
||||||
|
dest = out_dir / dll.name
|
||||||
|
shutil.copy2(dll, dest)
|
||||||
|
copied.append(dest)
|
||||||
|
print(f" {dll.name} ({dest.stat().st_size} bytes)")
|
||||||
|
return copied
|
||||||
|
|
||||||
|
|
||||||
|
def patch(cargo_toml: Path, dlls: list[Path]) -> None:
|
||||||
|
text = cargo_toml.read_text(encoding="utf-8")
|
||||||
|
for pat, name in ((REGION_RES, "CRT_RESOURCES"), (REGION_SEC, "VC_REDIST_SECTION")):
|
||||||
|
if not pat.search(text):
|
||||||
|
sys.exit(f"error: {name} region not found in {cargo_toml}")
|
||||||
|
|
||||||
|
entries = "\n".join(
|
||||||
|
f' {{ src = "{str(d).replace(chr(92), chr(92) * 2)}", target = "{d.name}" }},'
|
||||||
|
for d in dlls
|
||||||
|
)
|
||||||
|
block = (
|
||||||
|
f" {BEGIN_RES}\n"
|
||||||
|
f" # Generated by distribution/windows/bundle-crt.py -- do not edit by hand.\n"
|
||||||
|
f"{entries}\n"
|
||||||
|
f" {END_RES}"
|
||||||
|
)
|
||||||
|
|
||||||
|
text = REGION_RES.sub(lambda _: block, text, count=1)
|
||||||
|
text = REGION_SEC.sub(lambda _: SECTION_REPLACEMENT, text, count=1)
|
||||||
|
cargo_toml.write_text(text, encoding="utf-8")
|
||||||
|
print(f"patched {cargo_toml} with {len(dlls)} app-local CRT DLLs")
|
||||||
|
|
||||||
|
|
||||||
|
def main() -> None:
|
||||||
|
ap = argparse.ArgumentParser(description=__doc__)
|
||||||
|
ap.add_argument("--cargo-toml", type=Path, default=DEFAULT_CARGO_TOML)
|
||||||
|
ap.add_argument("--out-dir", type=Path, default=DEFAULT_OUT)
|
||||||
|
ap.add_argument(
|
||||||
|
"--crt-dir",
|
||||||
|
type=Path,
|
||||||
|
help="Microsoft.VC*.CRT directory to copy from (default: ask vswhere)",
|
||||||
|
)
|
||||||
|
args = ap.parse_args()
|
||||||
|
|
||||||
|
crt_dir = args.crt_dir.resolve() if args.crt_dir else find_crt_dir()
|
||||||
|
dlls = collect(crt_dir, args.out_dir.resolve())
|
||||||
|
patch(args.cargo_toml.resolve(), dlls)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
BIN
docs/images/downloads-guide.png
Normal file
|
After Width: | Height: | Size: 44 KiB |
108
docs/superpowers/plans/2026-10-10-update-to-2.8.0.md
Normal file
|
|
@ -0,0 +1,108 @@
|
||||||
|
# OneLauncher-Cracked 2.8.0 Update Implementation Plan
|
||||||
|
|
||||||
|
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
|
||||||
|
|
||||||
|
**Goal:** Rebase and upgrade OneLauncher-Cracked onto upstream OneLauncher 2.8.0 (`1d6ec598`), preserving all offline authentication bypasses, the local Yggdrasil skin server with authlib-injector, Forgejo auto-updater, and custom skin changer UI.
|
||||||
|
|
||||||
|
**Architecture:** Port 37 cracked subsystem files onto the clean upstream 2.8.0 codebase. Maintain strict isolation for cracked authentication and skin server logic while adopting upstream's new multi-instance management, package manager filters, and Freya improvements.
|
||||||
|
|
||||||
|
**Tech Stack:** Rust 2024, Freya (Dioxus + Skia), Tokio, Reqwest, RSA PKCS#1v15, Authlib-Injector, Forgejo API v1.
|
||||||
|
|
||||||
|
**Spec:** Direct human instruction: "update to version 2.8.0".
|
||||||
|
|
||||||
|
## Global Constraints
|
||||||
|
- Target version: `2.8.0-c1`.
|
||||||
|
- Offline authentication must require 0 Microsoft accounts.
|
||||||
|
- Local Yggdrasil skin server must eliminate multiplayer skin cloning via RSA-signed profile properties.
|
||||||
|
- Auto-updater must target Forgejo API at `https://git.oiupoyt.space/api/v1/repos/oiupoyt/OneLauncher-Cracked/releases/latest`.
|
||||||
|
- All workspace crates must pass tests and compilation without regressions.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Task 1: Project Metadata, Packaging & Workflows
|
||||||
|
|
||||||
|
**Files:**
|
||||||
|
- Modify: `Cargo.toml`
|
||||||
|
- Modify: `README.md`
|
||||||
|
- Modify: `.gitignore`
|
||||||
|
- Create: `.forgejo/workflows/release.yml`
|
||||||
|
- Create: `packages/oneclient_app/distribution/linux/oneclient_app.desktop`
|
||||||
|
|
||||||
|
- [ ] **Step 1: Update Cargo.toml metadata and dev profile**
|
||||||
|
- [ ] **Step 2: Update README.md with warning embed and Forgejo releases link**
|
||||||
|
- [ ] **Step 3: Add .forgejo release workflow and desktop file**
|
||||||
|
- [ ] **Step 4: Commit task 1**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Task 2: Port Offline Authentication Bypass (`oneclient_auth`)
|
||||||
|
|
||||||
|
**Files:**
|
||||||
|
- Modify: `packages/oneclient_auth/src/service.rs`
|
||||||
|
- Modify: `packages/oneclient_auth/src/store.rs`
|
||||||
|
- Modify: `packages/oneclient_auth/tests/offline.rs`
|
||||||
|
|
||||||
|
- [ ] **Step 1: In `service.rs`, remove `OfflineRequiresMicrosoft` check from `account_for_launch`**
|
||||||
|
- [ ] **Step 2: In `store.rs`, allow offline accounts without Microsoft accounts and auto-select default user**
|
||||||
|
- [ ] **Step 3: In `tests/offline.rs`, ensure tests assert offline launch succeeds without Microsoft**
|
||||||
|
- [ ] **Step 4: Run `cargo test -p oneclient_auth` and verify all tests pass**
|
||||||
|
- [ ] **Step 5: Commit task 2**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Task 3: Port Path Helpers, Assets & Offline Skin Engine (`oneclient_common` & `oneclient_core`)
|
||||||
|
|
||||||
|
**Files:**
|
||||||
|
- Modify: `packages/oneclient_common/src/paths.rs`
|
||||||
|
- Modify: `packages/oneclient_core/Cargo.toml`
|
||||||
|
- Copy assets: `packages/oneclient_core/assets/authlib-injector.jar`
|
||||||
|
- Copy assets: `packages/oneclient_core/assets/offlineskins-fabric.jar`
|
||||||
|
- Create: `packages/oneclient_core/src/game/skin_server.rs`
|
||||||
|
- Modify: `packages/oneclient_core/src/game/mod.rs`
|
||||||
|
- Modify: `packages/oneclient_core/src/game/launch.rs`
|
||||||
|
|
||||||
|
- [ ] **Step 1: Add skin paths and authlib-injector path to `oneclient_common/src/paths.rs`**
|
||||||
|
- [ ] **Step 2: Copy embedded jar assets and add dependencies to `oneclient_core/Cargo.toml`**
|
||||||
|
- [ ] **Step 3: Port `skin_server.rs` and register module in `game/mod.rs`**
|
||||||
|
- [ ] **Step 4: In `game/launch.rs`, inject authlib-injector `-javaagent`, `--userProperties`, and offline skin synchronization**
|
||||||
|
- [ ] **Step 5: Run `cargo test -p oneclient_core` and verify all tests pass**
|
||||||
|
- [ ] **Step 6: Commit task 3**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Task 4: Port UI Components, Skins Tab & Auto-Updater (`oneclient_app`)
|
||||||
|
|
||||||
|
**Files:**
|
||||||
|
- Modify: `packages/oneclient_app/src/constants.rs`
|
||||||
|
- Modify: `packages/oneclient_app/src/updater.rs`
|
||||||
|
- Modify: `packages/oneclient_app/src/components/avatar.rs`
|
||||||
|
- Modify: `packages/oneclient_app/src/components/player_model.rs`
|
||||||
|
- Modify: `packages/oneclient_app/src/components/navbar/app_navbar.rs`
|
||||||
|
- Create: `packages/oneclient_app/src/view/app/skins.rs`
|
||||||
|
- Create: `packages/oneclient_app/src/hooks/queries/skin.rs`
|
||||||
|
- Modify: `packages/oneclient_app/src/hooks/queries/mod.rs`
|
||||||
|
- Modify: `packages/oneclient_app/src/hooks/mod.rs`
|
||||||
|
- Modify: `packages/oneclient_app/src/view/onboarding/account.rs`
|
||||||
|
- Modify: `packages/oneclient_app/src/view/app/settings/accounts.rs`
|
||||||
|
- Modify: `packages/oneclient_app/src/layout/root_layout.rs`
|
||||||
|
- Modify: `packages/oneclient_app/src/routes.rs`
|
||||||
|
|
||||||
|
- [ ] **Step 1: Update `constants.rs` and `updater.rs` with Forgejo releases endpoint and `CrackedVersion` semver parser**
|
||||||
|
- [ ] **Step 2: Port skin queries in `hooks/queries/skin.rs` and wire into `hooks/mod.rs`**
|
||||||
|
- [ ] **Step 3: Port `skins.rs` view and register route in `routes.rs` and `root_layout.rs`**
|
||||||
|
- [ ] **Step 4: Add Skins pill button to `navbar_center` in `app_navbar.rs`**
|
||||||
|
- [ ] **Step 5: Port avatar persistent cache in `avatar.rs` and player model custom skin loading in `player_model.rs`**
|
||||||
|
- [ ] **Step 6: Port offline account inputs in onboarding (`onboarding/account.rs`) and settings (`settings/accounts.rs`)**
|
||||||
|
- [ ] **Step 7: Run `cargo test -p oneclient_app --lib` and verify all tests pass**
|
||||||
|
- [ ] **Step 8: Commit task 4**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Task 5: Verification, Packaging & Deployment
|
||||||
|
|
||||||
|
- [ ] **Step 1: Run full workspace `cargo check --workspace`**
|
||||||
|
- [ ] **Step 2: Build release binary locally**
|
||||||
|
- [ ] **Step 3: Package `.AppImage`, `.deb`, and `.tar.gz` for Linux**
|
||||||
|
- [ ] **Step 4: Merge `update/2.8.0` into `main`**
|
||||||
|
- [ ] **Step 5: Tag `v2.8.0-c1` and push branch and tag to Forgejo and GitHub**
|
||||||
|
- [ ] **Step 6: Publish Forgejo Release `v2.8.0-c1` with all binaries attached**
|
||||||
28
knope.toml
Normal file
|
|
@ -0,0 +1,28 @@
|
||||||
|
[package]
|
||||||
|
versioned_files = ["Cargo.toml"]
|
||||||
|
changelog = "CHANGELOG.md"
|
||||||
|
|
||||||
|
[changes]
|
||||||
|
ignore_conventional_commits = true
|
||||||
|
|
||||||
|
[release_notes]
|
||||||
|
change_templates = [
|
||||||
|
"- $summary by [$pr_author_login](https://github.com/$pr_author_login)",
|
||||||
|
"- $summary",
|
||||||
|
]
|
||||||
|
|
||||||
|
[github]
|
||||||
|
owner = "Polyfrost"
|
||||||
|
repo = "OneLauncher"
|
||||||
|
|
||||||
|
[[workflows]]
|
||||||
|
name = "prepare-release"
|
||||||
|
|
||||||
|
[[workflows.steps]]
|
||||||
|
type = "PrepareRelease"
|
||||||
|
|
||||||
|
[[workflows]]
|
||||||
|
name = "document-change"
|
||||||
|
|
||||||
|
[[workflows.steps]]
|
||||||
|
type = "CreateChangeFile"
|
||||||
|
|
@ -14,28 +14,48 @@ authors = { workspace = true }
|
||||||
default = []
|
default = []
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
oneclient_auth.workspace = true
|
||||||
|
oneclient_cluster.workspace = true
|
||||||
|
oneclient_common.workspace = true
|
||||||
|
oneclient_content.workspace = true
|
||||||
|
oneclient_events.workspace = true
|
||||||
|
oneclient_java.workspace = true
|
||||||
|
oneclient_mc.workspace = true
|
||||||
|
oneclient_polyplus.workspace = true
|
||||||
|
oneclient_net.workspace = true
|
||||||
oneclient_core.workspace = true
|
oneclient_core.workspace = true
|
||||||
oneclient_db.workspace = true
|
oneclient_db.workspace = true
|
||||||
chrono.workspace = true
|
chrono.workspace = true
|
||||||
oneclient_macro = { workspace = true, features = ["freya"] }
|
oneclient_macro = { workspace = true, features = ["freya"] }
|
||||||
|
|
||||||
polyio.workspace = true
|
polyio.workspace = true
|
||||||
rust-embed = { version = "=8.11.0", features = ["include-exclude", "compression", "debug-embed"] }
|
rust-embed.workspace = true
|
||||||
|
|
||||||
tracing.workspace = true
|
tracing.workspace = true
|
||||||
tracing-subscriber.workspace = true
|
tracing-subscriber.workspace = true
|
||||||
|
futures-util.workspace = true
|
||||||
tokio.workspace = true
|
tokio.workspace = true
|
||||||
uuid.workspace = true
|
uuid.workspace = true
|
||||||
bytes.workspace = true
|
bytes.workspace = true
|
||||||
sysinfo.workspace = true
|
sysinfo.workspace = true
|
||||||
|
|
||||||
|
notify.workspace = true
|
||||||
|
|
||||||
anyhow.workspace = true
|
anyhow.workspace = true
|
||||||
regex.workspace = true
|
regex.workspace = true
|
||||||
|
directories.workspace = true
|
||||||
|
dunce.workspace = true
|
||||||
|
percent-encoding.workspace = true
|
||||||
|
serde = { workspace = true, features = ["derive"] }
|
||||||
|
serde_json.workspace = true
|
||||||
|
reqwest.workspace = true
|
||||||
|
|
||||||
cargo-packager-updater = "=0.2.3"
|
cargo-packager-updater = "=0.2.3"
|
||||||
|
|
||||||
rfd = "=0.17.2"
|
# rfd = "=0.17.2"
|
||||||
open = "=5.4.0"
|
# open = "=5.4.0"
|
||||||
|
rfd.workspace = true
|
||||||
|
open.workspace = true
|
||||||
|
|
||||||
# clipboard image copy + decode for it
|
# clipboard image copy + decode for it
|
||||||
arboard.workspace = true
|
arboard.workspace = true
|
||||||
|
|
@ -43,18 +63,35 @@ image.workspace = true
|
||||||
|
|
||||||
freya-skia-safe.workspace = true
|
freya-skia-safe.workspace = true
|
||||||
freya.workspace = true
|
freya.workspace = true
|
||||||
|
freya-core.workspace = true
|
||||||
|
pulldown-cmark.workspace = true
|
||||||
|
# inlines svg logos embedded in markdown badges as data urls
|
||||||
|
base64.workspace = true
|
||||||
|
|
||||||
|
[dev-dependencies]
|
||||||
|
freya-testing.workspace = true
|
||||||
|
|
||||||
[target.'cfg(target_os = "macos")'.dependencies]
|
[target.'cfg(target_os = "macos")'.dependencies]
|
||||||
mimalloc = "=0.1.52"
|
mimalloc = "=0.1.52"
|
||||||
|
|
||||||
# Build then package (per OS):
|
[target.'cfg(target_os = "linux")'.dependencies]
|
||||||
# cargo build --release -p oneclient_app
|
libloading = "=0.8.9"
|
||||||
# cargo packager --release -p oneclient_app --formats <nsis|app,dmg|deb,appimage>
|
gtk-sys = "=0.18.2"
|
||||||
|
|
||||||
|
[target.'cfg(windows)'.dependencies]
|
||||||
|
windows = { version = "=0.62.2", features = [
|
||||||
|
"Win32_Foundation",
|
||||||
|
"Win32_System_Registry",
|
||||||
|
] }
|
||||||
|
|
||||||
|
[target.'cfg(windows)'.build-dependencies]
|
||||||
|
winresource = "=0.1.31"
|
||||||
|
|
||||||
[package.metadata.packager]
|
[package.metadata.packager]
|
||||||
product-name = "OneClient"
|
product-name = "OneClient"
|
||||||
identifier = "org.polyfrost.OneClient"
|
identifier = "org.polyfrost.OneClient"
|
||||||
category = "Game"
|
category = "Game"
|
||||||
publisher = "Polyfrost"
|
publisher = "Polyfrost Inc."
|
||||||
copyright = "© 2026 Polyfrost Inc."
|
copyright = "© 2026 Polyfrost Inc."
|
||||||
homepage = "https://polyfrost.org/projects/oneclient"
|
homepage = "https://polyfrost.org/projects/oneclient"
|
||||||
long-description = "Next-generation open source Minecraft launcher"
|
long-description = "Next-generation open source Minecraft launcher"
|
||||||
|
|
@ -62,14 +99,20 @@ formats = ["nsis", "app", "dmg", "deb", "appimage"]
|
||||||
binaries = [{ path = "oneclient_app", main = true }]
|
binaries = [{ path = "oneclient_app", main = true }]
|
||||||
icons = [
|
icons = [
|
||||||
"icons/32x32.png",
|
"icons/32x32.png",
|
||||||
|
"icons/64x64.png",
|
||||||
"icons/128x128.png",
|
"icons/128x128.png",
|
||||||
"icons/128x128@2x.png",
|
"icons/128x128@2x.png",
|
||||||
"icons/icon.icns",
|
"icons/icon.icns",
|
||||||
"icons/icon.ico",
|
"icons/icon.ico",
|
||||||
]
|
]
|
||||||
|
resources = [
|
||||||
|
{ src = "icons/generated/Assets.car", target = "Assets.car" },
|
||||||
|
# >>> CRT_RESOURCES >>>
|
||||||
|
# <<< CRT_RESOURCES <<<
|
||||||
|
]
|
||||||
|
|
||||||
[package.metadata.packager.macos]
|
[package.metadata.packager.macos]
|
||||||
minimum-system-version = "10.15"
|
minimum-system-version = "10.14"
|
||||||
entitlements = "distribution/App.entitlements"
|
entitlements = "distribution/App.entitlements"
|
||||||
info-plist-path = "distribution/Info.plist"
|
info-plist-path = "distribution/Info.plist"
|
||||||
|
|
||||||
|
|
@ -83,9 +126,53 @@ application-folder-position = { x = 440, y = 190 }
|
||||||
digest-algorithm = "sha256"
|
digest-algorithm = "sha256"
|
||||||
timestamp-url = "https://timestamp.digicert.com"
|
timestamp-url = "https://timestamp.digicert.com"
|
||||||
|
|
||||||
|
[package.metadata.packager.nsis]
|
||||||
|
preinstall-section = """
|
||||||
|
Section "-OneClientTauriMigration"
|
||||||
|
; Stale Tauri root start-menu shortcut (this build only writes the sub-folder one).
|
||||||
|
Delete "$SMPROGRAMS\\${PRODUCTNAME}.lnk"
|
||||||
|
; Old Tauri main binary (renamed OneClient.exe -> oneclient_app.exe). Locked while
|
||||||
|
; the outdated app is running during an auto-update, so fall back to reboot removal.
|
||||||
|
Delete /REBOOTOK "$INSTDIR\\OneClient.exe"
|
||||||
|
SectionEnd
|
||||||
|
|
||||||
|
; >>> VC_REDIST_SECTION >>>
|
||||||
|
Section "-VCRedist"
|
||||||
|
SetRegView 64
|
||||||
|
ReadRegDWORD $R0 HKLM "SOFTWARE\\Microsoft\\VisualStudio\\14.0\\VC\\Runtimes\\X64" "Installed"
|
||||||
|
ReadRegDWORD $R1 HKLM "SOFTWARE\\Microsoft\\VisualStudio\\14.0\\VC\\Runtimes\\X64" "Minor"
|
||||||
|
SetRegView lastused
|
||||||
|
|
||||||
|
${If} $R0 == 1
|
||||||
|
${AndIf} $R1 >= 40
|
||||||
|
Goto vcredist_done
|
||||||
|
${EndIf}
|
||||||
|
|
||||||
|
${If} $PassiveMode != 1
|
||||||
|
MessageBox MB_OK|MB_ICONEXCLAMATION "This build of OneClient needs the Microsoft Visual C++ Redistributable (x64) 14.40 or newer. Install it from https://aka.ms/vs/17/release/vc_redist.x64.exe, then run this installer again."
|
||||||
|
${EndIf}
|
||||||
|
|
||||||
|
vcredist_done:
|
||||||
|
SectionEnd
|
||||||
|
; <<< VC_REDIST_SECTION <<<
|
||||||
|
"""
|
||||||
|
|
||||||
[package.metadata.packager.deb]
|
[package.metadata.packager.deb]
|
||||||
desktop-template = "distribution/linux/org.polyfrost.oneclient.template"
|
desktop-template = "distribution/linux/org.polyfrost.oneclient.template"
|
||||||
|
|
||||||
[package.metadata.packager.appimage]
|
[package.metadata.packager.appimage]
|
||||||
# desktop entry generated from the deb template above via the linux config
|
# desktop entry generated from the deb template above via the linux config
|
||||||
|
libs = ["libayatana-appindicator3.so.1"]
|
||||||
|
excluded-libraries = ["libwayland-*"]
|
||||||
|
|
||||||
|
[package.metadata.generate-rpm]
|
||||||
|
auto-req = "builtin"
|
||||||
|
assets = [
|
||||||
|
{ source = "target/release/oneclient_app", dest = "/usr/bin/oneclient_app", mode = "755" },
|
||||||
|
{ source = "target/release/oneclient_app.desktop", dest = "/usr/share/applications/oneclient_app.desktop", mode = "644" },
|
||||||
|
{ source = "icons/32x32.png", dest = "/usr/share/icons/hicolor/32x32/apps/oneclient_app.png", mode = "644" },
|
||||||
|
{ source = "icons/64x64.png", dest = "/usr/share/icons/hicolor/64x64/apps/oneclient_app.png", mode = "644" },
|
||||||
|
{ source = "icons/128x128.png", dest = "/usr/share/icons/hicolor/128x128/apps/oneclient_app.png", mode = "644" },
|
||||||
|
{ source = "icons/512x512.png", dest = "/usr/share/icons/hicolor/512x512/apps/oneclient_app.png", mode = "644" },
|
||||||
|
]
|
||||||
|
|
||||||
|
|
|
||||||
|
Before Width: | Height: | Size: 958 B After Width: | Height: | Size: 920 B |
|
Before Width: | Height: | Size: 619 KiB After Width: | Height: | Size: 390 KiB |
|
|
@ -0,0 +1,3 @@
|
||||||
|
<svg width="100%" height="100%" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M8 15V17M12 11V17M16 7V17M6.8 21H17.2C18.88 21 19.72 21 20.36 20.67C20.93 20.39 21.39 19.93 21.67 19.36C22 18.72 22 17.88 22 16.2V7.8C22 6.12 22 5.28 21.67 4.64C21.39 4.07 20.93 3.61 20.36 3.33C19.72 3 18.88 3 17.2 3H6.8C5.12 3 4.28 3 3.64 3.33C3.07 3.61 2.61 4.07 2.33 4.64C2 5.28 2 6.12 2 7.8V16.2C2 17.88 2 18.72 2.33 19.36C2.61 19.93 3.07 20.39 3.64 20.67C4.28 21 5.12 21 6.8 21Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 590 B |
1
packages/oneclient_app/assets/icons/discord.svg
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
<svg role="img" viewBox="-11.2 -8.5 149 113" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M81.15,0c-1.2376,2.1973-2.3489,4.4704-3.3591,6.794-9.5975-1.4396-19.3718-1.4396-28.9945,0-.985-2.3236-2.1216-4.5967-3.3591-6.794-9.0166,1.5407-17.8059,4.2431-26.1405,8.0568C2.779,32.5304-1.6914,56.3725.5312,79.8863c9.6732,7.1476,20.5083,12.603,32.0505,16.0884,2.6014-3.4854,4.8998-7.1981,6.8698-11.0623-3.738-1.3891-7.3497-3.1318-10.8098-5.1523.9092-.6567,1.7932-1.3386,2.6519-1.9953,20.281,9.547,43.7696,9.547,64.0758,0,.8587.7072,1.7427,1.3891,2.6519,1.9953-3.4601,2.0457-7.0718,3.7632-10.835,5.1776,1.97,3.8642,4.2683,7.5769,6.8698,11.0623,11.5419-3.4854,22.3769-8.9156,32.0509-16.0631,2.626-27.2771-4.496-50.9172-18.817-71.8548C98.9811,4.2684,90.1918,1.5659,81.1752.0505l-.0252-.0505ZM42.2802,65.4144c-6.2383,0-11.4159-5.6575-11.4159-12.6535s4.9755-12.6788,11.3907-12.6788,11.5169,5.708,11.4159,12.6788c-.101,6.9708-5.026,12.6535-11.3907,12.6535ZM84.3576,65.4144c-6.2637,0-11.3907-5.6575-11.3907-12.6535s4.9755-12.6788,11.3907-12.6788,11.4917,5.708,11.3906,12.6788c-.101,6.9708-5.026,12.6535-11.3906,12.6535Z"/></svg>
|
||||||
|
After Width: | Height: | Size: 1.1 KiB |
BIN
packages/oneclient_app/assets/icons/fabric.png
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
BIN
packages/oneclient_app/assets/icons/forge.png
Normal file
|
After Width: | Height: | Size: 28 KiB |
1
packages/oneclient_app/assets/icons/github.svg
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
<svg role="img" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"/></svg>
|
||||||
|
After Width: | Height: | Size: 678 B |
7
packages/oneclient_app/assets/icons/icon-logo.svg
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
<svg width="80" height="80" viewBox="0 0 80 80" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M35.0354 10.6199H30.9125C26.1812 10.6199 21.8092 13.1414 19.4435 17.2347L10.2109 33.2097C9.89473 33.7567 9.62082 34.3208 9.38916 34.8972L22.5061 32.4833C27.8025 31.5085 31.9468 27.3686 32.9225 22.0775L35.0354 10.6199Z" fill="currentColor"/>
|
||||||
|
<path d="M9.37051 44.7052C9.60608 45.2979 9.8862 45.8775 10.2109 46.4393L19.4435 62.4143C21.8092 66.5076 26.1812 69.0292 30.9125 69.0292H35.0434L32.9225 57.5283C31.9468 52.2373 27.8025 48.0973 22.5061 47.1225L9.37051 44.7052Z" fill="currentColor"/>
|
||||||
|
<path d="M45.456 69.0292H49.3779C54.1092 69.0292 58.4812 66.5076 60.8469 62.4143L70.0795 46.4393C70.3966 45.8907 70.6712 45.3249 70.9033 44.7467L57.9933 47.1225C52.6968 48.0973 48.5526 52.2373 47.5769 57.5283L45.456 69.0292Z" fill="currentColor"/>
|
||||||
|
<path d="M70.8845 34.8557C70.6564 34.2937 70.3881 33.7436 70.0795 33.2097L60.8469 17.2347C58.4812 13.1414 54.1092 10.6199 49.3779 10.6199H45.4639L47.5769 22.0775C48.5526 27.3686 52.6968 31.5085 57.9933 32.4833L70.8845 34.8557Z" fill="currentColor"/>
|
||||||
|
<path d="M40.1206 11.766C40.1379 11.6124 40.3614 11.6124 40.3787 11.766L41.3999 20.8379C42.4408 30.0839 49.7344 37.3875 58.9875 38.4493L69.66 39.6741C69.8134 39.6917 69.8134 39.9142 69.66 39.9318L58.9875 41.1565C49.7345 42.2183 42.4408 49.5219 41.3999 58.768L40.3787 67.8398C40.3614 67.9935 40.1379 67.9935 40.1206 67.8398L39.1009 58.7822C38.0593 49.5296 30.7564 42.2232 21.4959 41.1688L10.6321 39.9318C10.4786 39.9143 10.4786 39.6915 10.6321 39.674L21.4958 38.437C30.7564 37.3826 38.0593 30.0762 39.1009 20.8236L40.1206 11.766Z" fill="currentColor"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.6 KiB |
3
packages/oneclient_app/assets/icons/line-chart-up-01.svg
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
<svg width="100%" height="100%" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M21 21H4.6c-.56 0-.84 0-1.054-.109a1 1 0 0 1-.437-.437C3 20.2401 3 19.9601 3 19.4V3m17 5-3.9189 4.1827c-.1485.1585-.2227.2377-.3123.2787a.5.5 0 0 1-.2528.0433c-.0981-.0089-.1945-.0589-.3873-.159l-3.2574-1.6914c-.1928-.1001-.2892-.1501-.3873-.159a.5.5 0 0 0-.2528.0433c-.0896.041-.1638.1202-.3123.2787L7 15" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 512 B |
3
packages/oneclient_app/assets/icons/log-out-01.svg
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
<svg width="100%" height="100%" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M16 17L21 12M21 12L16 7M21 12H9M9 21H7.8C6.12 21 5.28 21 4.64 20.67C4.07 20.39 3.61 19.93 3.33 19.36C3 18.72 3 17.88 3 16.2V7.8C3 6.12 3 5.28 3.33 4.64C3.61 4.07 4.07 3.61 4.64 3.33C5.28 3 6.12 3 7.8 3H9" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 410 B |
3
packages/oneclient_app/assets/icons/moon-01.svg
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
<svg width="100%" height="100%" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M19.2 12.63A7.2 7.2 0 1 1 11.37 4.8A5.6 5.6 0 0 0 19.2 12.63Z" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 270 B |