119 lines
4.0 KiB
TOML
119 lines
4.0 KiB
TOML
[tools]
|
|
rust = "stable"
|
|
|
|
[tasks.default]
|
|
description = "Build and launch the Insta360 Link Controller desktop GUI"
|
|
depends = ["gui"]
|
|
|
|
[tasks.gui]
|
|
description = "Build and launch the Insta360 Link Controller desktop GUI"
|
|
run = "cargo run --release -p insta360-link-gui"
|
|
|
|
[tasks.cli]
|
|
description = "Run the insta360-link-ctl CLI (e.g. mise run cli -- info)"
|
|
run = "cargo run --release -p insta360-link-cli --"
|
|
|
|
[tasks.server]
|
|
description = "Start the HTTP & WebSocket remote control server on 127.0.0.1:8360"
|
|
run = "cargo run --release -p insta360-link-server --"
|
|
|
|
[tasks.build]
|
|
description = "Build all workspace crates in release mode"
|
|
run = "cargo build --release --workspace"
|
|
|
|
[tasks.test]
|
|
description = "Run all workspace unit and integration tests"
|
|
run = "cargo test --workspace"
|
|
|
|
[tasks.self-test]
|
|
description = "Run the automated live hardware GUI verification sequence"
|
|
run = "INSTA360_GUI_SELF_TEST=1 cargo run --release -p insta360-link-gui"
|
|
|
|
[tasks.udev-install]
|
|
description = "Install Linux udev rules for non-root USB access to Insta360 Link webcams"
|
|
run = "sudo cp udev/99-insta360-link.rules /etc/udev/rules.d/99-insta360-link.rules && sudo udevadm control --reload-rules && sudo udevadm trigger"
|
|
|
|
[tasks.package-release]
|
|
description = "Build and package release binaries for a target (usage: mise run package-release [target] [version])"
|
|
run = '''
|
|
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
TARGET="${1:-$(rustc -vV | sed -n 's|host: ||p')}"
|
|
VERSION="${2:-0.0.0}"
|
|
VERSION="${VERSION#v}"
|
|
|
|
case "$VERSION" in
|
|
0.*) ;;
|
|
*)
|
|
echo "Error: version must start with 0. (got: $VERSION)" >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
python3 -c '
|
|
import pathlib, re, sys
|
|
ver = sys.argv[1]
|
|
p = pathlib.Path("Cargo.toml")
|
|
txt = p.read_text()
|
|
txt = re.sub(r"(?m)^version\s*=\s*\"[^\"]+\"", f"version = \"{ver}\"", txt, count=1)
|
|
p.write_text(txt)
|
|
' "$VERSION"
|
|
|
|
rustup target add "$TARGET" 2>/dev/null || true
|
|
cargo build --release --workspace --target "$TARGET"
|
|
|
|
case "$TARGET" in
|
|
x86_64-unknown-linux-gnu) ASSET_SUFFIX="linux-x86_64"; EXT="tar.gz" ;;
|
|
aarch64-unknown-linux-gnu) ASSET_SUFFIX="linux-arm64"; EXT="tar.gz" ;;
|
|
aarch64-apple-darwin) ASSET_SUFFIX="macos-arm64"; EXT="tar.gz" ;;
|
|
x86_64-apple-darwin) ASSET_SUFFIX="macos-x86_64"; EXT="tar.gz" ;;
|
|
x86_64-pc-windows-msvc|x86_64-pc-windows-gnu) ASSET_SUFFIX="windows-x86_64"; EXT="zip" ;;
|
|
*) ASSET_SUFFIX="$TARGET"; EXT="tar.gz" ;;
|
|
esac
|
|
|
|
STAGE_NAME="insta360-link-controller-v${VERSION}-${ASSET_SUFFIX}"
|
|
STAGE_DIR="dist/${STAGE_NAME}"
|
|
rm -rf "$STAGE_DIR"
|
|
mkdir -p "$STAGE_DIR"
|
|
|
|
if [ "$EXT" = "zip" ]; then
|
|
cp "target/${TARGET}/release/insta360-link-gui.exe" "$STAGE_DIR/"
|
|
cp "target/${TARGET}/release/insta360-link-ctl.exe" "$STAGE_DIR/"
|
|
cp "target/${TARGET}/release/insta360-link-server.exe" "$STAGE_DIR/"
|
|
cp README.md "$STAGE_DIR/"
|
|
python3 -c '
|
|
import pathlib, sys, zipfile
|
|
stage_dir = pathlib.Path(sys.argv[1])
|
|
out_zip = pathlib.Path(sys.argv[2])
|
|
with zipfile.ZipFile(out_zip, "w", zipfile.ZIP_DEFLATED) as zf:
|
|
for f in stage_dir.rglob("*"):
|
|
if f.is_file():
|
|
zf.write(f, f.relative_to(stage_dir.parent))
|
|
' "$STAGE_DIR" "dist/${STAGE_NAME}.zip"
|
|
echo "Packaged dist/${STAGE_NAME}.zip"
|
|
else
|
|
cp "target/${TARGET}/release/insta360-link-gui" "$STAGE_DIR/"
|
|
cp "target/${TARGET}/release/insta360-link-ctl" "$STAGE_DIR/"
|
|
cp "target/${TARGET}/release/insta360-link-server" "$STAGE_DIR/"
|
|
cp README.md "$STAGE_DIR/"
|
|
cp -r udev "$STAGE_DIR/"
|
|
tar -C dist -czf "dist/${STAGE_NAME}.tar.gz" "$STAGE_NAME"
|
|
echo "Packaged dist/${STAGE_NAME}.tar.gz"
|
|
fi
|
|
rm -rf "$STAGE_DIR"
|
|
'''
|
|
|
|
[tasks.trigger-release]
|
|
description = "Trigger the GitHub Actions release pipeline from master (usage: mise run trigger-release [0.1.0])"
|
|
run = '''
|
|
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
VER="${1:-0.1.0}"
|
|
VER="${VER#v}"
|
|
env -u GITHUB_TOKEN -u GH_TOKEN -u GITHUB_AUTH_TOKEN gh workflow run release.yml \
|
|
--repo lucasoskorep/insta360-link-controller \
|
|
--ref master \
|
|
-f version="$VER"
|
|
echo "Triggered release workflow on master for v${VER}"
|
|
'''
|