QoL: fastoll & package.json minor adjustments

This commit is contained in:
Darkatse 2026-02-23 05:34:00 +08:00
parent 36895813a0
commit 8ac267316b
6 changed files with 241 additions and 64 deletions

View file

@ -84,43 +84,6 @@ jobs:
- name: Build frontend assets
run: pnpm build
- name: Build FasTools (Windows)
if: startsWith(matrix.platform, 'windows-latest')
run: |
cd fastools
cargo build --release
mv target/release/fastools.exe ../FasTools.exe
- name: Build FasTools (Unix)
if: runner.os != 'Windows'
run: |
TARGET_FLAG=""
if [[ "${{ matrix.name }}" == "macos-x64" ]]; then
TARGET_FLAG="--target x86_64-apple-darwin"
elif [[ "${{ matrix.name }}" == "macos-arm64" ]]; then
TARGET_FLAG="--target aarch64-apple-darwin"
fi
cd fastools
echo "Building FasTools with target: $TARGET_FLAG"
cargo build --release $TARGET_FLAG
if [[ -n "$TARGET_FLAG" ]]; then
TARGET_NAME=$(echo $TARGET_FLAG | awk '{print $2}')
BIN_PATH="target/$TARGET_NAME/release/fastools"
else
BIN_PATH="target/release/fastools"
fi
echo "Moving binary from $BIN_PATH"
mv "$BIN_PATH" ../FasTools
chmod +x ../FasTools
cd ..
# Update tauri.conf.json
echo "Updating tauri.conf.json..."
jq '.bundle.resources["../FasTools"] = "FasTools" | del(.bundle.resources["../FasTools.exe"])' src-tauri/tauri.conf.json > src-tauri/tauri.conf.json.tmp && mv src-tauri/tauri.conf.json.tmp src-tauri/tauri.conf.json
- name: Build and upload desktop pre-release
uses: tauri-apps/tauri-action@v0
env:

93
.github/workflows/fastools-build.yml vendored Normal file
View file

@ -0,0 +1,93 @@
name: FasTools Build
on:
workflow_dispatch:
push:
branches:
- main
paths:
- "fastools/**"
- ".github/workflows/fastools-build.yml"
concurrency:
group: fastools-build-${{ github.ref }}
cancel-in-progress: true
permissions:
contents: read
jobs:
build-fastools:
strategy:
fail-fast: false
matrix:
include:
- name: windows-x64
platform: windows-latest
target: ""
bin_name: fastools.exe
out_name: FasTools.exe
- name: macos-x64
platform: macos-latest
target: x86_64-apple-darwin
bin_name: fastools
out_name: FasTools
- name: macos-arm64
platform: macos-latest
target: aarch64-apple-darwin
bin_name: fastools
out_name: FasTools
- name: linux-x64
platform: ubuntu-22.04
target: ""
bin_name: fastools
out_name: FasTools
- name: linux-arm64
platform: ubuntu-22.04-arm
target: ""
bin_name: fastools
out_name: FasTools
runs-on: ${{ matrix.platform }}
name: build-${{ matrix.name }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Install Rust toolchain (default target)
if: matrix.target == ''
uses: dtolnay/rust-toolchain@stable
- name: Install Rust toolchain (custom target)
if: matrix.target != ''
uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.target }}
- name: Cache Rust build artifacts
uses: swatinem/rust-cache@v2
with:
workspaces: "fastools -> target"
- name: Build FasTools
shell: bash
run: |
cd fastools
if [[ -n "${{ matrix.target }}" ]]; then
cargo build --release --target "${{ matrix.target }}"
BIN_PATH="target/${{ matrix.target }}/release/${{ matrix.bin_name }}"
else
cargo build --release
BIN_PATH="target/release/${{ matrix.bin_name }}"
fi
mkdir -p "../dist-fastools/${{ matrix.name }}"
cp "$BIN_PATH" "../dist-fastools/${{ matrix.name }}/${{ matrix.out_name }}"
- name: Upload FasTools artifact
uses: actions/upload-artifact@v4
with:
name: fastools-${{ matrix.name }}
path: dist-fastools/${{ matrix.name }}/${{ matrix.out_name }}

View file

@ -79,9 +79,33 @@ pnpm install
常用命令:
```bash
pnpm run build # 构建前端资源包
pnpm run tauri:dev # 以开发模式运行桌面应用
pnpm run tauri:build # 构建发行版安装程序
pnpm run build # 构建前端资源包(webpack)
pnpm run dev # 桌面开发模式(等价 tauri:dev)
pnpm run tauri:dev # 桌面开发模式
pnpm run tauri:build # 构建桌面发行包
pnpm run android:dev # Android 开发模式
pnpm run ios:dev # iOS 开发模式
```
## FasTools(调试工具)
`fastools` 是一个极其有用的小工具箱,方便开发与桌面端部署时的调试。
构建:
```bash
pnpm run fastools:build
```
运行:
- `pnpm run fastools:run`
如需直接使用 cargo,也可在仓库根目录执行:
```bash
cargo build --release --manifest-path fastools/Cargo.toml
cargo run --manifest-path fastools/Cargo.toml
```
## 项目文档

View file

@ -77,9 +77,33 @@ pnpm install
Common commands:
```bash
pnpm run build # build frontend bundles
pnpm run tauri:dev # run desktop app in dev mode
pnpm run tauri:build # build release installers
pnpm run build # build frontend bundles (webpack)
pnpm run dev # desktop dev mode (alias of tauri:dev)
pnpm run tauri:dev # desktop dev mode
pnpm run tauri:build # build desktop installers
pnpm run android:dev # Android dev mode
pnpm run ios:dev # iOS dev mode
```
## FasTools (Debug Utility)
`fastools` is an useful toolkit that facilitates debugging during development and desktop deployment.
Build:
```bash
pnpm run fastools:build
```
Run:
- `pnpm run fastools:run`
If you prefer cargo directly, run from repository root:
```bash
cargo build --release --manifest-path fastools/Cargo.toml
cargo run --manifest-path fastools/Cargo.toml
```
## Documentation

View file

@ -359,6 +359,7 @@ fn get_cmd(cmd: &str) -> String {
fn show_menu() -> Result<bool> {
let selections = &[
"🚀 启动开发模式 (Dev)",
"📱 启动 Android 开发模式 (Android Dev)",
"🔨 构建生产版本 (Build)",
"⭐ 检查更新 (Git Pull)",
"🧰 工具箱 (Toolbox)",
@ -378,18 +379,22 @@ fn show_menu() -> Result<bool> {
Ok(true) // 继续循环
}
1 => {
run_build()?;
run_android_dev()?;
Ok(true)
}
2 => {
update_repository()?;
run_build()?;
Ok(true)
}
3 => {
show_toolbox_menu()?;
update_repository()?;
Ok(true)
}
4 => {
show_toolbox_menu()?;
Ok(true)
}
5 => {
show_debug_menu()?;
Ok(true)
}
@ -604,6 +609,22 @@ fn run_dev() -> Result<()> {
Ok(())
}
fn run_android_dev() -> Result<()> {
log_info("正在启动 Android 开发模式...");
let status = run_sequential_attempts(&[
("pnpm", vec!["run", "android:dev"]),
("corepack", vec!["pnpm", "run", "android:dev"]),
("npm", vec!["run", "android:dev"]),
])?;
if !status.success() {
log_error("Android 开发模式启动失败");
pause();
}
Ok(())
}
fn run_build() -> Result<()> {
log_info("正在构建生产版本...");
@ -986,21 +1007,63 @@ fn run_debug() -> Result<()> {
env::set_var("FORCE_COLOR", "1");
env::set_var("CARGO_TERM_COLOR", "always");
let (prog, args) = if which("pnpm").is_ok() {
("pnpm", vec!["tauri", "dev"])
} else {
("npm", vec!["run", "tauri", "dev"])
};
// 与 run_sequential_attempts 保持一致的多候选回退策略,避免单条命令 NotFound 直接失败。
let candidates = [
("pnpm", vec!["tauri", "dev"]),
("pnpm", vec!["run", "tauri:dev"]),
("corepack", vec!["pnpm", "tauri", "dev"]),
("corepack", vec!["pnpm", "run", "tauri:dev"]),
("npm", vec!["run", "tauri:dev"]),
];
let cmd_prog = get_cmd(prog);
log_info(&format!("执行命令: {} {:?}", cmd_prog, args));
let mut last_err: Option<anyhow::Error> = None;
let mut child_opt = None;
let mut child = Command::new(&cmd_prog)
.args(&args)
.stdout(Stdio::piped())
.stderr(Stdio::piped())
.spawn()
.context("无法启动调试进程")?;
for (prog, args) in candidates.iter() {
let cmd_prog = get_cmd(prog);
log_info(&format!("执行命令: {} {:?}", cmd_prog, args));
match Command::new(&cmd_prog)
.args(args)
.stdout(Stdio::piped())
.stderr(Stdio::piped())
.spawn()
{
Ok(child) => {
child_opt = Some(child);
break;
}
Err(e) if e.kind() == std::io::ErrorKind::NotFound => {
// Windows 下额外尝试不带 .cmd 的命令名(兼容部分 shell/path 配置)。
if cfg!(windows) && *prog != "corepack" {
match Command::new(prog)
.args(args)
.stdout(Stdio::piped())
.stderr(Stdio::piped())
.spawn()
{
Ok(child) => {
child_opt = Some(child);
break;
}
Err(e2) => {
last_err = Some(e2.into());
}
}
} else {
last_err = Some(e.into());
}
}
Err(e) => {
last_err = Some(e.into());
}
}
}
let mut child = child_opt.ok_or_else(|| {
anyhow::anyhow!("无法启动调试进程")
.context(last_err.unwrap_or_else(|| anyhow::anyhow!("program not found")))
})?;
let stdout = child.stdout.take().unwrap();
let stderr = child.stderr.take().unwrap();

View file

@ -5,10 +5,20 @@
"type": "module",
"scripts": {
"tauri": "tauri",
"build": "node build.js --build-only",
"dev": "webpack --config webpack.config.js --watch",
"tauri:dev": "node build.js",
"tauri:build": "node build.js --prod"
"android": "tauri android",
"ios": "tauri ios",
"build": "pnpm run web:build",
"dev": "pnpm run tauri:dev",
"web:build": "node build.js --build-only",
"web:dev": "webpack --config webpack.config.js --watch",
"tauri:dev": "tauri dev",
"tauri:build": "tauri build",
"android:dev": "tauri android dev",
"android:build": "tauri android build",
"ios:dev": "tauri ios dev",
"ios:build": "tauri ios build",
"fastools:build": "cargo build --release --manifest-path fastools/Cargo.toml",
"fastools:run": "cargo run --manifest-path fastools/Cargo.toml"
},
"devDependencies": {
"@tauri-apps/cli": "^2.10.0",