mirror of
https://github.com/rustfs/rustfs.git
synced 2026-08-30 16:59:52 +00:00
Merge pull request #251 from rustfs/feature/gui-improve
Feature/gui improve
This commit is contained in:
@@ -7,6 +7,7 @@ on:
|
|||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- main
|
- main
|
||||||
|
tags: [ 'v*', '*' ]
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build-rustfs:
|
build-rustfs:
|
||||||
@@ -60,19 +61,53 @@ jobs:
|
|||||||
# Create package
|
# Create package
|
||||||
mkdir -p ${ARTIFACT_NAME}
|
mkdir -p ${ARTIFACT_NAME}
|
||||||
cp "$bin_path" ${ARTIFACT_NAME}/rustfs
|
cp "$bin_path" ${ARTIFACT_NAME}/rustfs
|
||||||
# cp -r static ${ARTIFACT_NAME}/
|
|
||||||
zip -r ${ARTIFACT_NAME}.zip ${ARTIFACT_NAME}
|
zip -r ${ARTIFACT_NAME}.zip ${ARTIFACT_NAME}
|
||||||
ls -la
|
ls -la
|
||||||
|
|
||||||
|
# Copy files to the specified directory
|
||||||
|
mkdir -p cli/rustfs-gui/embedded-rustfs
|
||||||
|
cp -r ${ARTIFACT_NAME}/rustfs cli/rustfs-gui/embedded-rustfs/
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v4
|
- uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: ${{ steps.package.outputs.artifact_name }}
|
name: ${{ steps.package.outputs.artifact_name }}
|
||||||
path: ${{ steps.package.outputs.artifact_name }}.zip
|
path: ${{ steps.package.outputs.artifact_name }}.zip
|
||||||
retention-days: 7
|
retention-days: 7
|
||||||
|
|
||||||
merge:
|
build-rustfs-gui:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
needs: build-rustfs
|
needs: build-rustfs
|
||||||
|
if: startsWith(github.ref, 'refs/tags/')
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- name: Install dioxus-cli
|
||||||
|
run: cargo install dioxus-cli
|
||||||
|
|
||||||
|
- name: Build and Bundle rustfs-gui
|
||||||
|
run: |
|
||||||
|
relaese_path = "target/${{ matrix.variant.target }}"
|
||||||
|
mkdir -p ${relaese_path}
|
||||||
|
cd cli/rustfs-gui
|
||||||
|
if [[ "${{ matrix.variant.target }}" == *"apple-darwin"* ]]; then
|
||||||
|
dx bundle --platform macos --package-types "macos" --package-types "dmg" --package-types "ios" --release --profile release --out-dir ../../${relaese_path}
|
||||||
|
elif [[ "${{ matrix.variant.target }}" == *"windows-msvc"* ]]; then
|
||||||
|
dx bundle --platform windows --package-types "msi" --release --profile release --out-dir ../../target/${relaese_path}
|
||||||
|
fi
|
||||||
|
cd ../..
|
||||||
|
GUI_ARTIFACT_NAME="rustfs-gui-${{ matrix.variant.profile }}-${{ matrix.variant.target }}"
|
||||||
|
zip -r ${GUI_ARTIFACT_NAME}.zip target/${{ matrix.variant.target }}/rustfs-gui
|
||||||
|
echo "gui_artifact_name=${GUI_ARTIFACT_NAME}" >> $GITHUB_OUTPUT
|
||||||
|
ls -la
|
||||||
|
|
||||||
|
- uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: ${{ steps.package.outputs.gui_artifact_name }}
|
||||||
|
path: ${{ steps.package.outputs.gui_artifact_name }}.zip
|
||||||
|
retention-days: 7
|
||||||
|
|
||||||
|
merge:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: [ build-rustfs, build-rustfs-gui ]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/upload-artifact/merge@v4
|
- uses: actions/upload-artifact/merge@v4
|
||||||
with:
|
with:
|
||||||
|
|||||||
@@ -6,3 +6,4 @@
|
|||||||
/logs
|
/logs
|
||||||
.devcontainer
|
.devcontainer
|
||||||
rustfs/static/*
|
rustfs/static/*
|
||||||
|
vendor
|
||||||
Generated
+10
-339
@@ -158,15 +158,6 @@ version = "1.0.96"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "6b964d184e89d9b6b67dd2715bc8e74cf3107fb2b529990c90cf517326150bf4"
|
checksum = "6b964d184e89d9b6b67dd2715bc8e74cf3107fb2b529990c90cf517326150bf4"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "arbitrary"
|
|
||||||
version = "1.4.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "dde20b3d026af13f561bdd0f15edf01fc734f0dafcedbaf42bba506a9517f223"
|
|
||||||
dependencies = [
|
|
||||||
"derive_arbitrary",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "arc-swap"
|
name = "arc-swap"
|
||||||
version = "1.7.1"
|
version = "1.7.1"
|
||||||
@@ -629,25 +620,6 @@ dependencies = [
|
|||||||
"bytes",
|
"bytes",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "bzip2"
|
|
||||||
version = "0.5.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "49ecfb22d906f800d4fe833b6282cf4dc1c298f5057ca0b5445e5c209735ca47"
|
|
||||||
dependencies = [
|
|
||||||
"bzip2-sys",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "bzip2-sys"
|
|
||||||
version = "0.1.13+1.0.8"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "225bff33b2141874fe80d71e07d6eec4f85c5c216453dd96388240f96e1acc14"
|
|
||||||
dependencies = [
|
|
||||||
"cc",
|
|
||||||
"pkg-config",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cairo-rs"
|
name = "cairo-rs"
|
||||||
version = "0.18.5"
|
version = "0.18.5"
|
||||||
@@ -679,8 +651,6 @@ version = "1.2.16"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "be714c154be609ec7f5dad223a33bf1482fff90472de28f7362806e6d4832b8c"
|
checksum = "be714c154be609ec7f5dad223a33bf1482fff90472de28f7362806e6d4832b8c"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"jobserver",
|
|
||||||
"libc",
|
|
||||||
"shlex",
|
"shlex",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -1014,12 +984,6 @@ dependencies = [
|
|||||||
"unicode-xid",
|
"unicode-xid",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "constant_time_eq"
|
|
||||||
version = "0.3.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "convert_case"
|
name = "convert_case"
|
||||||
version = "0.4.0"
|
version = "0.4.0"
|
||||||
@@ -1118,21 +1082,6 @@ dependencies = [
|
|||||||
"libc",
|
"libc",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "crc"
|
|
||||||
version = "3.2.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "69e6e4d7b33a94f0991c26729976b10ebde1d34c3ee82408fb536164fa10d636"
|
|
||||||
dependencies = [
|
|
||||||
"crc-catalog",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "crc-catalog"
|
|
||||||
version = "2.4.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "crc32c"
|
name = "crc32c"
|
||||||
version = "0.6.8"
|
version = "0.6.8"
|
||||||
@@ -1325,12 +1274,6 @@ dependencies = [
|
|||||||
"rand 0.8.5",
|
"rand 0.8.5",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "deflate64"
|
|
||||||
version = "0.1.9"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "da692b8d1080ea3045efaab14434d40468c3d8657e42abddfffca87b428f4c1b"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "deranged"
|
name = "deranged"
|
||||||
version = "0.3.11"
|
version = "0.3.11"
|
||||||
@@ -1341,17 +1284,6 @@ dependencies = [
|
|||||||
"serde",
|
"serde",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "derive_arbitrary"
|
|
||||||
version = "1.4.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800"
|
|
||||||
dependencies = [
|
|
||||||
"proc-macro2",
|
|
||||||
"quote",
|
|
||||||
"syn 2.0.98",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "derive_more"
|
name = "derive_more"
|
||||||
version = "0.99.19"
|
version = "0.99.19"
|
||||||
@@ -1445,7 +1377,7 @@ dependencies = [
|
|||||||
"futures-util",
|
"futures-util",
|
||||||
"generational-box",
|
"generational-box",
|
||||||
"longest-increasing-subsequence",
|
"longest-increasing-subsequence",
|
||||||
"rustc-hash 1.1.0",
|
"rustc-hash",
|
||||||
"rustversion",
|
"rustversion",
|
||||||
"serde",
|
"serde",
|
||||||
"slab",
|
"slab",
|
||||||
@@ -1511,7 +1443,7 @@ dependencies = [
|
|||||||
"objc_id",
|
"objc_id",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
"rfd 0.14.1",
|
"rfd 0.14.1",
|
||||||
"rustc-hash 1.1.0",
|
"rustc-hash",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
"signal-hook",
|
"signal-hook",
|
||||||
@@ -1672,7 +1604,7 @@ dependencies = [
|
|||||||
"dioxus-html",
|
"dioxus-html",
|
||||||
"js-sys",
|
"js-sys",
|
||||||
"lazy-js-bundle",
|
"lazy-js-bundle",
|
||||||
"rustc-hash 1.1.0",
|
"rustc-hash",
|
||||||
"serde",
|
"serde",
|
||||||
"sledgehammer_bindgen",
|
"sledgehammer_bindgen",
|
||||||
"sledgehammer_utils",
|
"sledgehammer_utils",
|
||||||
@@ -1778,7 +1710,7 @@ dependencies = [
|
|||||||
"generational-box",
|
"generational-box",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
"parking_lot 0.12.3",
|
"parking_lot 0.12.3",
|
||||||
"rustc-hash 1.1.0",
|
"rustc-hash",
|
||||||
"tracing",
|
"tracing",
|
||||||
"warnings",
|
"warnings",
|
||||||
]
|
]
|
||||||
@@ -1805,7 +1737,7 @@ dependencies = [
|
|||||||
"generational-box",
|
"generational-box",
|
||||||
"js-sys",
|
"js-sys",
|
||||||
"lazy-js-bundle",
|
"lazy-js-bundle",
|
||||||
"rustc-hash 1.1.0",
|
"rustc-hash",
|
||||||
"serde",
|
"serde",
|
||||||
"serde-wasm-bindgen",
|
"serde-wasm-bindgen",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
@@ -2039,15 +1971,6 @@ version = "1.14.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "b7914353092ddf589ad78f25c5c1c21b7f80b0ff8621e7c814c3485b5306da9d"
|
checksum = "b7914353092ddf589ad78f25c5c1c21b7f80b0ff8621e7c814c3485b5306da9d"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "encoding_rs"
|
|
||||||
version = "0.8.35"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3"
|
|
||||||
dependencies = [
|
|
||||||
"cfg-if",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "endi"
|
name = "endi"
|
||||||
version = "1.1.0"
|
version = "1.1.0"
|
||||||
@@ -2958,24 +2881,6 @@ dependencies = [
|
|||||||
"want",
|
"want",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "hyper-rustls"
|
|
||||||
version = "0.27.5"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2"
|
|
||||||
dependencies = [
|
|
||||||
"futures-util",
|
|
||||||
"http",
|
|
||||||
"hyper",
|
|
||||||
"hyper-util",
|
|
||||||
"rustls",
|
|
||||||
"rustls-pki-types",
|
|
||||||
"tokio",
|
|
||||||
"tokio-rustls",
|
|
||||||
"tower-service",
|
|
||||||
"webpki-roots",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "hyper-timeout"
|
name = "hyper-timeout"
|
||||||
version = "0.5.2"
|
version = "0.5.2"
|
||||||
@@ -3345,15 +3250,6 @@ version = "0.3.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130"
|
checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "jobserver"
|
|
||||||
version = "0.1.32"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0"
|
|
||||||
dependencies = [
|
|
||||||
"libc",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "js-sys"
|
name = "js-sys"
|
||||||
version = "0.3.77"
|
version = "0.3.77"
|
||||||
@@ -3577,12 +3473,6 @@ dependencies = [
|
|||||||
"scopeguard",
|
"scopeguard",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "lockfree-object-pool"
|
|
||||||
version = "0.1.6"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "9374ef4228402d4b7e403e5838cb880d9ee663314b0a900d5a6aabf0c213552e"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "log"
|
name = "log"
|
||||||
version = "0.4.26"
|
version = "0.4.26"
|
||||||
@@ -3604,16 +3494,6 @@ dependencies = [
|
|||||||
"hashbrown 0.12.3",
|
"hashbrown 0.12.3",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "lzma-rs"
|
|
||||||
version = "0.3.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "297e814c836ae64db86b36cf2a557ba54368d03f6afcd7d947c266692f71115e"
|
|
||||||
dependencies = [
|
|
||||||
"byteorder",
|
|
||||||
"crc",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "mac"
|
name = "mac"
|
||||||
version = "0.1.1"
|
version = "0.1.1"
|
||||||
@@ -4903,58 +4783,6 @@ dependencies = [
|
|||||||
"serde",
|
"serde",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "quinn"
|
|
||||||
version = "0.11.6"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "62e96808277ec6f97351a2380e6c25114bc9e67037775464979f3037c92d05ef"
|
|
||||||
dependencies = [
|
|
||||||
"bytes",
|
|
||||||
"pin-project-lite",
|
|
||||||
"quinn-proto",
|
|
||||||
"quinn-udp",
|
|
||||||
"rustc-hash 2.1.1",
|
|
||||||
"rustls",
|
|
||||||
"socket2",
|
|
||||||
"thiserror 2.0.11",
|
|
||||||
"tokio",
|
|
||||||
"tracing",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "quinn-proto"
|
|
||||||
version = "0.11.9"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "a2fe5ef3495d7d2e377ff17b1a8ce2ee2ec2a18cde8b6ad6619d65d0701c135d"
|
|
||||||
dependencies = [
|
|
||||||
"bytes",
|
|
||||||
"getrandom 0.2.15",
|
|
||||||
"rand 0.8.5",
|
|
||||||
"ring",
|
|
||||||
"rustc-hash 2.1.1",
|
|
||||||
"rustls",
|
|
||||||
"rustls-pki-types",
|
|
||||||
"slab",
|
|
||||||
"thiserror 2.0.11",
|
|
||||||
"tinyvec",
|
|
||||||
"tracing",
|
|
||||||
"web-time",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "quinn-udp"
|
|
||||||
version = "0.5.10"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "e46f3055866785f6b92bc6164b76be02ca8f2eb4b002c0354b28cf4c119e5944"
|
|
||||||
dependencies = [
|
|
||||||
"cfg_aliases",
|
|
||||||
"libc",
|
|
||||||
"once_cell",
|
|
||||||
"socket2",
|
|
||||||
"tracing",
|
|
||||||
"windows-sys 0.59.0",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "quote"
|
name = "quote"
|
||||||
version = "1.0.38"
|
version = "1.0.38"
|
||||||
@@ -5210,15 +5038,12 @@ checksum = "43e734407157c3c2034e0258f5e4473ddb361b1e85f95a66690d67264d7cd1da"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"base64",
|
"base64",
|
||||||
"bytes",
|
"bytes",
|
||||||
"encoding_rs",
|
|
||||||
"futures-core",
|
"futures-core",
|
||||||
"futures-util",
|
"futures-util",
|
||||||
"h2",
|
|
||||||
"http",
|
"http",
|
||||||
"http-body",
|
"http-body",
|
||||||
"http-body-util",
|
"http-body-util",
|
||||||
"hyper",
|
"hyper",
|
||||||
"hyper-rustls",
|
|
||||||
"hyper-util",
|
"hyper-util",
|
||||||
"ipnet",
|
"ipnet",
|
||||||
"js-sys",
|
"js-sys",
|
||||||
@@ -5228,17 +5053,11 @@ dependencies = [
|
|||||||
"once_cell",
|
"once_cell",
|
||||||
"percent-encoding",
|
"percent-encoding",
|
||||||
"pin-project-lite",
|
"pin-project-lite",
|
||||||
"quinn",
|
|
||||||
"rustls",
|
|
||||||
"rustls-pemfile",
|
|
||||||
"rustls-pki-types",
|
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
"serde_urlencoded",
|
"serde_urlencoded",
|
||||||
"sync_wrapper",
|
"sync_wrapper",
|
||||||
"system-configuration",
|
|
||||||
"tokio",
|
"tokio",
|
||||||
"tokio-rustls",
|
|
||||||
"tokio-util",
|
"tokio-util",
|
||||||
"tower 0.5.2",
|
"tower 0.5.2",
|
||||||
"tower-service",
|
"tower-service",
|
||||||
@@ -5247,7 +5066,6 @@ dependencies = [
|
|||||||
"wasm-bindgen-futures",
|
"wasm-bindgen-futures",
|
||||||
"wasm-streams",
|
"wasm-streams",
|
||||||
"web-sys",
|
"web-sys",
|
||||||
"webpki-roots",
|
|
||||||
"windows-registry",
|
"windows-registry",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -5381,12 +5199,6 @@ version = "1.1.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
|
checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "rustc-hash"
|
|
||||||
version = "2.1.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rustc_version"
|
name = "rustc_version"
|
||||||
version = "0.4.1"
|
version = "0.4.1"
|
||||||
@@ -5468,15 +5280,17 @@ dependencies = [
|
|||||||
"dioxus",
|
"dioxus",
|
||||||
"dirs 6.0.0",
|
"dirs 6.0.0",
|
||||||
"futures-util",
|
"futures-util",
|
||||||
|
"hex",
|
||||||
"keyring",
|
"keyring",
|
||||||
"reqwest",
|
"lazy_static",
|
||||||
"rfd 0.15.2",
|
"rfd 0.15.2",
|
||||||
|
"rust-embed",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
|
"sha2 0.10.8",
|
||||||
"tokio",
|
"tokio",
|
||||||
"tracing-appender",
|
"tracing-appender",
|
||||||
"tracing-subscriber",
|
"tracing-subscriber",
|
||||||
"zip",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -5521,9 +5335,6 @@ name = "rustls-pki-types"
|
|||||||
version = "1.11.0"
|
version = "1.11.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c"
|
checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c"
|
||||||
dependencies = [
|
|
||||||
"web-time",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rustls-webpki"
|
name = "rustls-webpki"
|
||||||
@@ -6026,7 +5837,7 @@ version = "0.3.1"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "debdd4b83524961983cea3c55383b3910fd2f24fd13a188f5b091d2d504a61ae"
|
checksum = "debdd4b83524961983cea3c55383b3910fd2f24fd13a188f5b091d2d504a61ae"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"rustc-hash 1.1.0",
|
"rustc-hash",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -6210,27 +6021,6 @@ dependencies = [
|
|||||||
"syn 2.0.98",
|
"syn 2.0.98",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "system-configuration"
|
|
||||||
version = "0.6.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b"
|
|
||||||
dependencies = [
|
|
||||||
"bitflags 2.9.0",
|
|
||||||
"core-foundation 0.9.4",
|
|
||||||
"system-configuration-sys",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "system-configuration-sys"
|
|
||||||
version = "0.6.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4"
|
|
||||||
dependencies = [
|
|
||||||
"core-foundation-sys",
|
|
||||||
"libc",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "system-deps"
|
name = "system-deps"
|
||||||
version = "6.2.2"
|
version = "6.2.2"
|
||||||
@@ -6458,21 +6248,6 @@ dependencies = [
|
|||||||
"zerovec",
|
"zerovec",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "tinyvec"
|
|
||||||
version = "1.8.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "022db8904dfa342efe721985167e9fcd16c29b226db4397ed752a761cfce81e8"
|
|
||||||
dependencies = [
|
|
||||||
"tinyvec_macros",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "tinyvec_macros"
|
|
||||||
version = "0.1.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tokio"
|
name = "tokio"
|
||||||
version = "1.43.0"
|
version = "1.43.0"
|
||||||
@@ -7240,16 +7015,6 @@ dependencies = [
|
|||||||
"wasm-bindgen",
|
"wasm-bindgen",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "web-time"
|
|
||||||
version = "1.1.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb"
|
|
||||||
dependencies = [
|
|
||||||
"js-sys",
|
|
||||||
"wasm-bindgen",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "webbrowser"
|
name = "webbrowser"
|
||||||
version = "0.8.15"
|
version = "0.8.15"
|
||||||
@@ -7311,15 +7076,6 @@ dependencies = [
|
|||||||
"system-deps",
|
"system-deps",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "webpki-roots"
|
|
||||||
version = "0.26.8"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "2210b291f7ea53617fbafcc4939f10914214ec15aace5ba62293a668f322c5c9"
|
|
||||||
dependencies = [
|
|
||||||
"rustls-pki-types",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "webview2-com"
|
name = "webview2-com"
|
||||||
version = "0.33.0"
|
version = "0.33.0"
|
||||||
@@ -8030,20 +7786,6 @@ name = "zeroize"
|
|||||||
version = "1.8.1"
|
version = "1.8.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde"
|
checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde"
|
||||||
dependencies = [
|
|
||||||
"zeroize_derive",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "zeroize_derive"
|
|
||||||
version = "1.4.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69"
|
|
||||||
dependencies = [
|
|
||||||
"proc-macro2",
|
|
||||||
"quote",
|
|
||||||
"syn 2.0.98",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "zerovec"
|
name = "zerovec"
|
||||||
@@ -8067,77 +7809,6 @@ dependencies = [
|
|||||||
"syn 2.0.98",
|
"syn 2.0.98",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "zip"
|
|
||||||
version = "2.2.3"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "b280484c454e74e5fff658bbf7df8fdbe7a07c6b2de4a53def232c15ef138f3a"
|
|
||||||
dependencies = [
|
|
||||||
"aes",
|
|
||||||
"arbitrary",
|
|
||||||
"bzip2",
|
|
||||||
"constant_time_eq",
|
|
||||||
"crc32fast",
|
|
||||||
"crossbeam-utils",
|
|
||||||
"deflate64",
|
|
||||||
"displaydoc",
|
|
||||||
"flate2",
|
|
||||||
"hmac 0.12.1",
|
|
||||||
"indexmap 2.7.1",
|
|
||||||
"lzma-rs",
|
|
||||||
"memchr",
|
|
||||||
"pbkdf2",
|
|
||||||
"rand 0.8.5",
|
|
||||||
"sha1 0.10.6",
|
|
||||||
"thiserror 2.0.11",
|
|
||||||
"time",
|
|
||||||
"zeroize",
|
|
||||||
"zopfli",
|
|
||||||
"zstd",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "zopfli"
|
|
||||||
version = "0.8.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "e5019f391bac5cf252e93bbcc53d039ffd62c7bfb7c150414d61369afe57e946"
|
|
||||||
dependencies = [
|
|
||||||
"bumpalo",
|
|
||||||
"crc32fast",
|
|
||||||
"lockfree-object-pool",
|
|
||||||
"log",
|
|
||||||
"once_cell",
|
|
||||||
"simd-adler32",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "zstd"
|
|
||||||
version = "0.13.3"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "e91ee311a569c327171651566e07972200e76fcfe2242a4fa446149a3881c08a"
|
|
||||||
dependencies = [
|
|
||||||
"zstd-safe",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "zstd-safe"
|
|
||||||
version = "7.2.3"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "f3051792fbdc2e1e143244dc28c60f73d8470e93f3f9cbd0ead44da5ed802722"
|
|
||||||
dependencies = [
|
|
||||||
"zstd-sys",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "zstd-sys"
|
|
||||||
version = "2.0.14+zstd.1.5.7"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "8fb060d4926e4ac3a3ad15d864e99ceb5f343c6b34f5bd6d81ae6ed417311be5"
|
|
||||||
dependencies = [
|
|
||||||
"cc",
|
|
||||||
"pkg-config",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "zvariant"
|
name = "zvariant"
|
||||||
version = "4.2.0"
|
version = "4.2.0"
|
||||||
|
|||||||
+17
-13
@@ -1,18 +1,18 @@
|
|||||||
[workspace]
|
[workspace]
|
||||||
members = [
|
members = [
|
||||||
"madmin", # Management dashboard and admin API interface
|
"madmin", # Management dashboard and admin API interface
|
||||||
"rustfs", # Core file system implementation
|
"rustfs", # Core file system implementation
|
||||||
"ecstore", # Erasure coding storage implementation
|
"ecstore", # Erasure coding storage implementation
|
||||||
"e2e_test", # End-to-end test suite
|
"e2e_test", # End-to-end test suite
|
||||||
"common/common", # Shared utilities and data structures
|
"common/common", # Shared utilities and data structures
|
||||||
"common/lock", # Distributed locking implementation
|
"common/lock", # Distributed locking implementation
|
||||||
"common/protos", # Protocol buffer definitions
|
"common/protos", # Protocol buffer definitions
|
||||||
"api/admin", # Admin HTTP API endpoints
|
"api/admin", # Admin HTTP API endpoints
|
||||||
"reader", # Object reading service
|
"reader", # Object reading service
|
||||||
"common/workers", # Worker thread pools and task scheduling
|
"common/workers", # Worker thread pools and task scheduling
|
||||||
"iam", # Identity and Access Management
|
"iam", # Identity and Access Management
|
||||||
"crypto", # Cryptography and security features
|
"crypto", # Cryptography and security features
|
||||||
"cli/rustfs-gui", # Graphical user interface client
|
"cli/rustfs-gui", # Graphical user interface client
|
||||||
]
|
]
|
||||||
resolver = "2"
|
resolver = "2"
|
||||||
|
|
||||||
@@ -45,6 +45,7 @@ futures = "0.3.31"
|
|||||||
futures-util = "0.3.31"
|
futures-util = "0.3.31"
|
||||||
common = { path = "./common/common" }
|
common = { path = "./common/common" }
|
||||||
reader = { path = "./reader" }
|
reader = { path = "./reader" }
|
||||||
|
hex = "0.4.3"
|
||||||
hyper = "1.6.0"
|
hyper = "1.6.0"
|
||||||
hyper-util = { version = "0.1.10", features = [
|
hyper-util = { version = "0.1.10", features = [
|
||||||
"tokio",
|
"tokio",
|
||||||
@@ -57,6 +58,7 @@ humantime = "2.1.0"
|
|||||||
keyring = { version = "3.6.1", features = ["apple-native", "windows-native", "sync-secret-service"] }
|
keyring = { version = "3.6.1", features = ["apple-native", "windows-native", "sync-secret-service"] }
|
||||||
lock = { path = "./common/lock" }
|
lock = { path = "./common/lock" }
|
||||||
lazy_static = "1.5.0"
|
lazy_static = "1.5.0"
|
||||||
|
local-ip-address = "0.6.3"
|
||||||
mime = "0.3.17"
|
mime = "0.3.17"
|
||||||
netif = "0.1.6"
|
netif = "0.1.6"
|
||||||
pin-project-lite = "0.2"
|
pin-project-lite = "0.2"
|
||||||
@@ -71,6 +73,7 @@ reqwest = { version = "0.12.12", default-features = false, features = ["rustls-t
|
|||||||
rfd = { version = "0.15.2", default-features = false, features = ["xdg-portal", "tokio"] }
|
rfd = { version = "0.15.2", default-features = false, features = ["xdg-portal", "tokio"] }
|
||||||
rmp = "0.8.14"
|
rmp = "0.8.14"
|
||||||
rmp-serde = "1.3.0"
|
rmp-serde = "1.3.0"
|
||||||
|
rust-embed = "8.6.0"
|
||||||
s3s = { git = "https://github.com/Nugine/s3s.git", rev = "ab139f72fe768fb9d8cecfe36269451da1ca9779", default-features = true, features = [
|
s3s = { git = "https://github.com/Nugine/s3s.git", rev = "ab139f72fe768fb9d8cecfe36269451da1ca9779", default-features = true, features = [
|
||||||
"tower",
|
"tower",
|
||||||
] }
|
] }
|
||||||
@@ -78,6 +81,7 @@ s3s-policy = { git = "https://github.com/Nugine/s3s.git", rev = "ab139f72fe768fb
|
|||||||
shadow-rs = { version = "0.38.0", default-features = false }
|
shadow-rs = { version = "0.38.0", default-features = false }
|
||||||
serde = { version = "1.0.217", features = ["derive"] }
|
serde = { version = "1.0.217", features = ["derive"] }
|
||||||
serde_json = "1.0.138"
|
serde_json = "1.0.138"
|
||||||
|
sha2 = "0.10.8"
|
||||||
tempfile = "3.16.0"
|
tempfile = "3.16.0"
|
||||||
thiserror = "2.0.11"
|
thiserror = "2.0.11"
|
||||||
time = { version = "0.3.37", features = [
|
time = { version = "0.3.37", features = [
|
||||||
|
|||||||
@@ -11,15 +11,17 @@ chrono = { workspace = true }
|
|||||||
dioxus = { workspace = true, features = ["router"] }
|
dioxus = { workspace = true, features = ["router"] }
|
||||||
dirs = { workspace = true }
|
dirs = { workspace = true }
|
||||||
futures-util = { workspace = true }
|
futures-util = { workspace = true }
|
||||||
|
hex = { workspace = true }
|
||||||
keyring = { workspace = true }
|
keyring = { workspace = true }
|
||||||
reqwest = { workspace = true }
|
lazy_static = { workspace = true }
|
||||||
rfd = { workspace = true }
|
rfd = { workspace = true }
|
||||||
|
rust-embed = { workspace = true, features = ["interpolate-folder-path"] }
|
||||||
serde = { workspace = true }
|
serde = { workspace = true }
|
||||||
serde_json = { workspace = true }
|
serde_json = { workspace = true }
|
||||||
|
sha2 = { workspace = true }
|
||||||
tokio = { workspace = true, features = ["io-util", "net", "process", "sync"] }
|
tokio = { workspace = true, features = ["io-util", "net", "process", "sync"] }
|
||||||
tracing-subscriber = { workspace = true, features = ["fmt", "env-filter", "tracing-log", "time", "local-time", "json"] }
|
tracing-subscriber = { workspace = true, features = ["fmt", "env-filter", "tracing-log", "time", "local-time", "json"] }
|
||||||
tracing-appender = { workspace = true }
|
tracing-appender = { workspace = true }
|
||||||
zip = { workspace = true }
|
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = ["desktop"]
|
default = ["desktop"]
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
rustfs bin path, do not delete
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
use crate::components::navbar::LoadingSpinner;
|
use crate::components::navbar::LoadingSpinner;
|
||||||
use crate::router::Route;
|
use crate::route::Route;
|
||||||
use crate::utils::{RustFSConfig, ServiceManager};
|
use crate::utils::{RustFSConfig, ServiceManager};
|
||||||
use chrono::Datelike;
|
use chrono::Datelike;
|
||||||
use dioxus::logger::tracing::debug;
|
use dioxus::logger::tracing::debug;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
use crate::router::Route;
|
use crate::route::Route;
|
||||||
use dioxus::logger::tracing::debug;
|
use dioxus::logger::tracing::debug;
|
||||||
use dioxus::prelude::*;
|
use dioxus::prelude::*;
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
mod components;
|
mod components;
|
||||||
mod router;
|
mod route;
|
||||||
mod utils;
|
mod utils;
|
||||||
mod views;
|
mod views;
|
||||||
|
|
||||||
|
|||||||
@@ -1,14 +1,31 @@
|
|||||||
use crate::utils::RustFSConfig;
|
use crate::utils::RustFSConfig;
|
||||||
use dioxus::logger::tracing::{debug, error, info};
|
use dioxus::logger::tracing::{debug, error, info};
|
||||||
use futures_util::TryStreamExt;
|
use lazy_static::lazy_static;
|
||||||
|
use rust_embed::RustEmbed;
|
||||||
|
use sha2::{Digest, Sha256};
|
||||||
use std::error::Error;
|
use std::error::Error;
|
||||||
use std::fs::File;
|
|
||||||
use std::path::{Path, PathBuf};
|
use std::path::{Path, PathBuf};
|
||||||
use std::process::Command as StdCommand;
|
use std::process::Command as StdCommand;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
|
use tokio::fs;
|
||||||
|
use tokio::fs::File;
|
||||||
use tokio::io::AsyncWriteExt;
|
use tokio::io::AsyncWriteExt;
|
||||||
use tokio::net::TcpStream;
|
use tokio::net::TcpStream;
|
||||||
use tokio::sync::mpsc;
|
use tokio::sync::{mpsc, Mutex};
|
||||||
|
|
||||||
|
#[derive(RustEmbed)]
|
||||||
|
#[folder = "$CARGO_MANIFEST_DIR/embedded-rustfs/"]
|
||||||
|
struct Asset;
|
||||||
|
|
||||||
|
// Use `lazy_static` to cache the checksum of embedded resources
|
||||||
|
lazy_static! {
|
||||||
|
static ref RUSTFS_HASH: Mutex<String> = {
|
||||||
|
let rustfs_file = if cfg!(windows) { "rustfs.exe" } else { "rustfs" };
|
||||||
|
let rustfs_data = Asset::get(rustfs_file).expect("RustFs binary not embedded");
|
||||||
|
let hash = hex::encode(Sha256::digest(&rustfs_data.data));
|
||||||
|
Mutex::new(hash)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
/// Service command
|
/// Service command
|
||||||
/// This enum represents the commands that can be sent to the service manager
|
/// This enum represents the commands that can be sent to the service manager
|
||||||
@@ -159,107 +176,38 @@ impl ServiceManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let executable_path = if cfg!(windows) {
|
let rustfs_file = if cfg!(windows) { "rustfs.exe" } else { "rustfs" };
|
||||||
bin_dir.join("rustfs.exe")
|
let executable_path = bin_dir.join(rustfs_file);
|
||||||
} else {
|
let hash_path = bin_dir.join("embedded_rustfs.sha256");
|
||||||
bin_dir.join("rustfs")
|
|
||||||
};
|
|
||||||
|
|
||||||
// If the executable file doesn't exist, download and unzip it
|
if executable_path.exists() && hash_path.exists() {
|
||||||
if !executable_path.exists() {
|
let cached_hash = fs::read_to_string(&hash_path).await?;
|
||||||
// download the file
|
let expected_hash = RUSTFS_HASH.lock().await;
|
||||||
let tmp_zip = rustfs_dir.join("rustfs.zip");
|
if cached_hash == *expected_hash {
|
||||||
let file_download_url = if cfg!(windows) {
|
println!("Use cached rustfs: {:?}", executable_path);
|
||||||
"https://api.xmb.xyz/download/rustfs-win.zip"
|
return Ok(executable_path);
|
||||||
} else {
|
|
||||||
"https://api.xmb.xyz/download/rustfs.zip"
|
|
||||||
};
|
|
||||||
|
|
||||||
let download_task = Self::download_file(file_download_url, &tmp_zip);
|
|
||||||
let unzip_task = async {
|
|
||||||
download_task.await?;
|
|
||||||
Self::unzip_file(&tmp_zip, &bin_dir)?;
|
|
||||||
tokio::fs::remove_file(&tmp_zip).await?;
|
|
||||||
Ok::<(), Box<dyn Error>>(())
|
|
||||||
};
|
|
||||||
unzip_task.await?;
|
|
||||||
|
|
||||||
// delete the temporary zip file
|
|
||||||
tokio::fs::remove_file(&tmp_zip).await?;
|
|
||||||
|
|
||||||
// set execution permissions on unix systems
|
|
||||||
#[cfg(unix)]
|
|
||||||
{
|
|
||||||
use std::os::unix::fs::PermissionsExt;
|
|
||||||
let mut perms = std::fs::metadata(&executable_path)?.permissions();
|
|
||||||
perms.set_mode(0o755);
|
|
||||||
std::fs::set_permissions(&executable_path, perms)?;
|
|
||||||
}
|
}
|
||||||
Self::show_info("服务程序已成功下载并准备就绪");
|
}
|
||||||
|
|
||||||
|
// Extract and write files
|
||||||
|
let rustfs_data = Asset::get(rustfs_file).expect("RustFS binary not embedded");
|
||||||
|
let mut file = File::create(&executable_path).await?;
|
||||||
|
file.write_all(&rustfs_data.data).await?;
|
||||||
|
let expected_hash = hex::encode(Sha256::digest(&rustfs_data.data));
|
||||||
|
fs::write(&hash_path, expected_hash).await?;
|
||||||
|
|
||||||
|
// set execution permissions on unix systems
|
||||||
|
#[cfg(unix)]
|
||||||
|
{
|
||||||
|
use std::os::unix::fs::PermissionsExt;
|
||||||
|
let mut perms = std::fs::metadata(&executable_path)?.permissions();
|
||||||
|
perms.set_mode(0o755);
|
||||||
|
std::fs::set_permissions(&executable_path, perms)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(executable_path)
|
Ok(executable_path)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Download the file
|
|
||||||
/// This function is a modified version of the example from the `reqwest` crate documentation
|
|
||||||
///
|
|
||||||
/// # Example
|
|
||||||
/// ```
|
|
||||||
/// let url = "https://api.xmb.xyz/download/rustfs.zip";
|
|
||||||
/// let path = Path::new("rustfs.zip");
|
|
||||||
/// download_file(url, path).await;
|
|
||||||
/// ```
|
|
||||||
async fn download_file(url: &str, path: &Path) -> Result<(), Box<dyn Error>> {
|
|
||||||
let client = reqwest::Client::new();
|
|
||||||
let res = client.get(url).send().await?;
|
|
||||||
|
|
||||||
if !res.status().is_success() {
|
|
||||||
return Err(format!("下载失败:{}", res.status()).into());
|
|
||||||
}
|
|
||||||
|
|
||||||
let mut file = tokio::fs::File::create(path).await?;
|
|
||||||
let mut stream = res.bytes_stream();
|
|
||||||
while let Ok(Some(chunk)) = stream.try_next().await {
|
|
||||||
file.write_all(&chunk).await?;
|
|
||||||
}
|
|
||||||
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
/// unzip the file
|
|
||||||
/// This function is a modified version of the example from the `zip` crate documentation
|
|
||||||
///
|
|
||||||
/// # Example
|
|
||||||
/// ```
|
|
||||||
/// let zip_path = Path::new("rustfs.zip");
|
|
||||||
/// let extract_path = Path::new("rustfs");
|
|
||||||
/// unzip_file(zip_path, extract_path);
|
|
||||||
/// ```
|
|
||||||
fn unzip_file(zip_path: &Path, extract_path: &Path) -> Result<(), Box<dyn Error>> {
|
|
||||||
let file = File::open(zip_path)?;
|
|
||||||
let mut archive = zip::ZipArchive::new(file)?;
|
|
||||||
|
|
||||||
for i in 0..archive.len() {
|
|
||||||
let mut file = archive.by_index(i)?;
|
|
||||||
let out_path = extract_path.join(file.name());
|
|
||||||
|
|
||||||
if file.name().ends_with('/') {
|
|
||||||
std::fs::create_dir_all(&out_path)?;
|
|
||||||
} else {
|
|
||||||
if let Some(p) = out_path.parent() {
|
|
||||||
if !p.exists() {
|
|
||||||
std::fs::create_dir_all(p)?;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
let mut outfile = File::create(&out_path)?;
|
|
||||||
std::io::copy(&mut file, &mut outfile)?;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Helper function: Extracts the port from the address string
|
/// Helper function: Extracts the port from the address string
|
||||||
///
|
///
|
||||||
/// # Example
|
/// # Example
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
use crate::router::Route;
|
use crate::route::Route;
|
||||||
use dioxus::logger::tracing::info;
|
use dioxus::logger::tracing::info;
|
||||||
use dioxus::prelude::*;
|
use dioxus::prelude::*;
|
||||||
|
|
||||||
|
|||||||
+4
-4
@@ -73,9 +73,9 @@ iam = { path = "../iam" }
|
|||||||
jsonwebtoken = "9.3.0"
|
jsonwebtoken = "9.3.0"
|
||||||
tower-http = { version = "0.6.2", features = ["cors"] }
|
tower-http = { version = "0.6.2", features = ["cors"] }
|
||||||
mime_guess = "2.0.5"
|
mime_guess = "2.0.5"
|
||||||
rust-embed = { version = "8.6.0", features = ["interpolate-folder-path"] }
|
rust-embed = { workspace = true, features = ["interpolate-folder-path"] }
|
||||||
local-ip-address = "0.6.3"
|
local-ip-address = { workspace = true }
|
||||||
chrono = "0.4"
|
chrono = { workspace = true }
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
prost-build.workspace = true
|
prost-build.workspace = true
|
||||||
@@ -87,7 +87,7 @@ futures-util.workspace = true
|
|||||||
# uuid = { version = "1.8.0", features = ["v4", "fast-rng", "serde"] }
|
# uuid = { version = "1.8.0", features = ["v4", "fast-rng", "serde"] }
|
||||||
ecstore = { path = "../ecstore" }
|
ecstore = { path = "../ecstore" }
|
||||||
s3s.workspace = true
|
s3s.workspace = true
|
||||||
clap = { version = "4.5.31", features = ["derive","env"] }
|
clap = { version = "4.5.31", features = ["derive", "env"] }
|
||||||
tracing-subscriber = { version = "0.3.19", features = ["env-filter", "time"] }
|
tracing-subscriber = { version = "0.3.19", features = ["env-filter", "time"] }
|
||||||
hyper-util = { version = "0.1.10", features = [
|
hyper-util = { version = "0.1.10", features = [
|
||||||
"tokio",
|
"tokio",
|
||||||
|
|||||||
Reference in New Issue
Block a user