From ba8fb00880a2138855fc7473f507cef9e0cdcfa7 Mon Sep 17 00:00:00 2001 From: Lucas Fernandes Nogueira Date: Sat, 30 Jan 2021 13:50:26 -0300 Subject: [PATCH] feat(ci): add unused dependencies check (#1168) --- .github/workflows/core-lint-fmt.yml | 4 +- .github/workflows/udeps.yml | 78 ++++++++++++++++++++++++++ cli/tauri-bundler/Cargo.lock | 87 ----------------------------- cli/tauri-bundler/Cargo.toml | 3 +- tauri-api/src/rpc.rs | 2 +- tauri/build.rs | 2 +- tauri/src/app/runner.rs | 63 +++++++++++---------- 7 files changed, 115 insertions(+), 124 deletions(-) create mode 100644 .github/workflows/udeps.yml diff --git a/.github/workflows/core-lint-fmt.yml b/.github/workflows/core-lint-fmt.yml index 8ef774851..ebce02076 100644 --- a/.github/workflows/core-lint-fmt.yml +++ b/.github/workflows/core-lint-fmt.yml @@ -23,7 +23,7 @@ jobs: - uses: actions-rs/clippy-check@v1 with: token: ${{ secrets.GITHUB_TOKEN }} - args: --all-targets -- -D warnings + args: --all-targets --all-features -- -D warnings name: workspace env: TAURI_DIST_DIR: ${{ runner.workspace }}/tauri/tauri/examples/communication/dist @@ -48,7 +48,7 @@ jobs: - uses: actions-rs/clippy-check@v1 with: token: ${{ secrets.GITHUB_TOKEN }} - args: --manifest-path ./cli/core/Cargo.toml --all-targets -- -D warnings + args: --manifest-path ./cli/core/Cargo.toml --all-targets --all-features -- -D warnings name: cli - uses: actions-rs/toolchain@v1 with: diff --git a/.github/workflows/udeps.yml b/.github/workflows/udeps.yml new file mode 100644 index 000000000..94c11e950 --- /dev/null +++ b/.github/workflows/udeps.yml @@ -0,0 +1,78 @@ +name: Udeps + +on: + pull_request: + paths: + - '.github/workflows/udeps.yml' + - 'cli/tauri-bundler/**' + - 'cli/core/**' + - 'tauri/**' + - 'tauri-api/**' + - 'tauri-utils/**' + +jobs: + udeps: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + + - uses: actions-rs/toolchain@v1 + with: + profile: minimal + toolchain: nightly + override: true + + - name: Cache cargo registry + uses: actions/cache@v2 + with: + path: ~/.cargo/registry + key: ubuntu-latest-nightly-cargo-registry-${{ hashFiles('**/Cargo.toml') }} + + - name: Cache cargo index + uses: actions/cache@v2 + with: + path: ~/.cargo/git + key: ubuntu-latest-nightly-cargo-index-${{ hashFiles('**/Cargo.toml') }} + + - name: Cache core cargo target + uses: actions/cache@v2 + with: + path: target + key: ubuntu-latest-nightly-cargo-build-target-${{ hashFiles('**/Cargo.toml') }} + + - name: Cache bundler cargo target + uses: actions/cache@v2 + with: + path: cli/tauri-bundler/target + key: ubuntu-latest-nightly-cargo-build-bundler-target-${{ hashFiles('**/Cargo.toml') }} + + - name: Cache CLI cargo target + uses: actions/cache@v2 + with: + path: cli/core/target + key: ubuntu-latest-nightly-cargo-build-cli-target-${{ hashFiles('**/Cargo.toml') }} + + - uses: actions-rs/cargo@v1 + with: + command: install + args: cargo-udeps --locked + + - name: Install required packages + run: | + sudo apt-get update + sudo apt-get install -y webkit2gtk-4.0 + + - uses: actions-rs/cargo@v1 + with: + command: udeps + args: --all-targets --all-features + + - uses: actions-rs/cargo@v1 + with: + command: udeps + args: --manifest-path ./cli/tauri-bundler/Cargo.toml --all-targets --all-features + + - uses: actions-rs/cargo@v1 + with: + command: udeps + args: --manifest-path ./cli/core/Cargo.toml --all-targets --all-features diff --git a/cli/tauri-bundler/Cargo.lock b/cli/tauri-bundler/Cargo.lock index 18826e721..988446bcf 100644 --- a/cli/tauri-bundler/Cargo.lock +++ b/cli/tauri-bundler/Cargo.lock @@ -190,16 +190,6 @@ version = "1.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed67cbde08356238e75fc4656be4749481eeffb09e19f320a25237d5221c985d" -[[package]] -name = "cfb" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca453e8624711b2f0f4eb47076a318feda166252a827ee25d067b43de83dcba0" -dependencies = [ - "byteorder", - "uuid", -] - [[package]] name = "cfg-if" version = "0.1.10" @@ -394,70 +384,6 @@ version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" -[[package]] -name = "encoding" -version = "0.2.33" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b0d943856b990d12d3b55b359144ff341533e516d94098b1d3fc1ac666d36ec" -dependencies = [ - "encoding-index-japanese", - "encoding-index-korean", - "encoding-index-simpchinese", - "encoding-index-singlebyte", - "encoding-index-tradchinese", -] - -[[package]] -name = "encoding-index-japanese" -version = "1.20141219.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04e8b2ff42e9a05335dbf8b5c6f7567e5591d0d916ccef4e0b1710d32a0d0c91" -dependencies = [ - "encoding_index_tests", -] - -[[package]] -name = "encoding-index-korean" -version = "1.20141219.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dc33fb8e6bcba213fe2f14275f0963fd16f0a02c878e3095ecfdf5bee529d81" -dependencies = [ - "encoding_index_tests", -] - -[[package]] -name = "encoding-index-simpchinese" -version = "1.20141219.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d87a7194909b9118fc707194baa434a4e3b0fb6a5a757c73c3adb07aa25031f7" -dependencies = [ - "encoding_index_tests", -] - -[[package]] -name = "encoding-index-singlebyte" -version = "1.20141219.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3351d5acffb224af9ca265f435b859c7c01537c0849754d3db3fdf2bfe2ae84a" -dependencies = [ - "encoding_index_tests", -] - -[[package]] -name = "encoding-index-tradchinese" -version = "1.20141219.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd0e20d5688ce3cab59eb3ef3a2083a5c77bf496cb798dc6fcdb75f323890c18" -dependencies = [ - "encoding_index_tests", -] - -[[package]] -name = "encoding_index_tests" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a246d82be1c9d791c5dfde9a2bd045fc3cbba3fa2b11ad558f27d01712f00569" - [[package]] name = "failure" version = "0.1.8" @@ -775,18 +701,6 @@ dependencies = [ "autocfg 1.0.1", ] -[[package]] -name = "msi" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a560d1c6b878d43f61c4c4cd252a75bff207347ecc959d89a71d3ec1c517dfe2" -dependencies = [ - "byteorder", - "cfb", - "encoding", - "uuid", -] - [[package]] name = "native-tls" version = "0.2.4" @@ -1507,7 +1421,6 @@ dependencies = [ "lazy_static", "libflate", "md5", - "msi", "regex", "runas", "serde 1.0.117", diff --git a/cli/tauri-bundler/Cargo.toml b/cli/tauri-bundler/Cargo.toml index e31f55395..e1c52f3e6 100644 --- a/cli/tauri-bundler/Cargo.toml +++ b/cli/tauri-bundler/Cargo.toml @@ -26,7 +26,6 @@ icns = "0.3" image = "0.23.12" libflate = "1.0" md5 = "0.7.0" -msi = "0.3" anyhow = "1.0" thiserror = "1.0" serde_json = "1.0" @@ -36,7 +35,6 @@ tar = "0.4" target_build_utils = "0.3" termcolor = "1.1.2" toml = "0.5.8" -uuid = { version = "0.8", features = [ "v5" ] } walkdir = "2" lazy_static = { version = "1.4" } handlebars = { version = "3.5" } @@ -45,6 +43,7 @@ handlebars = { version = "3.5" } attohttpc = { version = "0.16.1" } regex = { version = "1" } runas = "0.2" +uuid = { version = "0.8", features = [ "v5" ] } [target."cfg(not(target_os = \"linux\"))".dependencies] zip = { version = "0.5" } diff --git a/tauri-api/src/rpc.rs b/tauri-api/src/rpc.rs index 9760b4a11..17c3fd04e 100644 --- a/tauri-api/src/rpc.rs +++ b/tauri-api/src/rpc.rs @@ -85,7 +85,7 @@ mod test { #[quickcheck] fn qc_formating(f: String, a: String) -> bool { // can not accept empty strings - if f != "" && a != "" { + if !f.is_empty() && !a.is_empty() { // call format callback let fc = format_callback(f.clone(), a.clone()); fc.contains(&format!( diff --git a/tauri/build.rs b/tauri/build.rs index 87401e1d0..e43564520 100644 --- a/tauri/build.rs +++ b/tauri/build.rs @@ -31,7 +31,7 @@ pub fn main() -> Result<(), Box> { .unwrap() .split('|') .map(|s| s.to_string()) - .filter(|s| s != "") + .filter(|s| !s.is_empty()) .collect(), None => Vec::new(), }; diff --git a/tauri/src/app/runner.rs b/tauri/src/app/runner.rs index 960cf5813..6d946443d 100644 --- a/tauri/src/app/runner.rs +++ b/tauri/src/app/runner.rs @@ -1,11 +1,4 @@ -#[allow(unused_imports)] -use std::{ - env, - fs::{self, read_to_string}, - path::Path, - process::Stdio, - thread::spawn, -}; +use std::path::Path; use webview_official::{SizeHint, Webview, WebviewBuilder}; @@ -55,11 +48,11 @@ pub(crate) fn run(application: &mut App) -> crate::Result<()> { // spawn the embedded server on our server url #[cfg(embedded_server)] - spawn_server(server_url)?; + spawn_server(server_url); // spin up the updater process #[cfg(feature = "updater")] - spawn_updater()?; + spawn_updater(); // run the webview webview.run(); @@ -67,6 +60,11 @@ pub(crate) fn run(application: &mut App) -> crate::Result<()> { Ok(()) } +#[cfg(all(embedded_server, no_server))] +fn setup_content() -> crate::Result> { + panic!("only one of `embedded-server` and `no-server` is allowed") +} + // setup content for dev-server #[cfg(dev)] fn setup_content() -> crate::Result> { @@ -107,13 +105,13 @@ fn setup_content() -> crate::Result> { } Ok(Content::Html(format!( "data:text/html,{}", - urlencoding::encode(&read_to_string(dev_path)?) + urlencoding::encode(&std::fs::read_to_string(dev_path)?) ))) } } // setup content for embedded server -#[cfg(embedded_server)] +#[cfg(all(embedded_server, not(no_server)))] fn setup_content() -> crate::Result> { let (port, valid) = setup_port()?; let url = (if valid { @@ -127,7 +125,7 @@ fn setup_content() -> crate::Result> { } // setup content for no-server -#[cfg(no_server)] +#[cfg(all(no_server, not(embedded_server)))] fn setup_content() -> crate::Result> { let html = include_str!(concat!(env!("OUT_DIR"), "/index.tauri.html")); Ok(Content::Html(format!( @@ -138,6 +136,7 @@ fn setup_content() -> crate::Result> { // get the port for the embedded server #[cfg(embedded_server)] +#[allow(dead_code)] fn setup_port() -> crate::Result<(String, bool)> { let config = get()?; match config.tauri.embedded_server.port { @@ -154,6 +153,7 @@ fn setup_port() -> crate::Result<(String, bool)> { // setup the server url for embedded server #[cfg(embedded_server)] +#[allow(dead_code)] fn setup_server_url(port: String) -> crate::Result { let config = get()?; let mut url = format!("{}:{}", config.tauri.embedded_server.host, port); @@ -165,8 +165,8 @@ fn setup_server_url(port: String) -> crate::Result { // spawn the embedded server #[cfg(embedded_server)] -fn spawn_server(server_url: String) -> crate::Result<()> { - spawn(move || { +fn spawn_server(server_url: String) { + std::thread::spawn(move || { let server = tiny_http::Server::http(server_url.replace("http://", "").replace("https://", "")) .expect("Unable to spawn server"); for request in server.incoming_requests() { @@ -180,18 +180,19 @@ fn spawn_server(server_url: String) -> crate::Result<()> { .expect("unable to setup response"); } }); - - Ok(()) } // spawn an updater process. #[cfg(feature = "updater")] -fn spawn_updater() -> crate::Result<()> { - spawn(|| { - tauri_api::command::spawn_relative_command("updater".to_string(), Vec::new(), Stdio::inherit()) - .expect("Unable to spawn relative command"); +fn spawn_updater() { + std::thread::spawn(|| { + tauri_api::command::spawn_relative_command( + "updater".to_string(), + Vec::new(), + std::process::Stdio::inherit(), + ) + .expect("Unable to spawn relative command"); }); - Ok(()) } pub fn init() -> String { @@ -295,7 +296,7 @@ fn build_webview( if has_splashscreen { let env_var = envmnt::get_or("TAURI_DIR", "../dist"); let path = Path::new(&env_var); - let contents = fs::read_to_string(path.join("/tauri.js"))?; + let contents = std::fs::read_to_string(path.join("/tauri.js"))?; // inject the tauri.js entry point webview.dispatch(move |_webview| _webview.eval(&contents)); } @@ -357,7 +358,7 @@ fn build_webview( }) .map_err(|e| e.replace("'", "\\'")); if let Err(handler_error_message) = endpoint_handle { - if handler_error_message != "" { + if !handler_error_message.is_empty() { w.eval(&get_api_error_message(&arg, handler_error_message)); } } @@ -391,9 +392,6 @@ mod test { use proptest::prelude::*; use std::env; - #[cfg(not(feature = "embedded-server"))] - use std::{fs::read_to_string, path::Path}; - #[test] fn check_setup_content() { let tauri_dir = match option_env!("TAURI_DIR") { @@ -409,7 +407,7 @@ mod test { #[cfg(embedded_server)] match res { - Ok(Content::Url(u)) => assert!(u.contains("http://")), + Ok(Content::Url(ref u)) => assert!(u.contains("http://")), _ => panic!("setup content failed"), } @@ -429,7 +427,8 @@ mod test { format!( "data:text/html,{}", urlencoding::encode( - &read_to_string(Path::new(&dist_dir).join("index.tauri.html")).unwrap() + &std::fs::read_to_string(std::path::Path::new(&dist_dir).join("index.tauri.html")) + .unwrap() ) ) ); @@ -444,12 +443,14 @@ mod test { Ok(Content::Url(dp)) => assert_eq!(dp, config.build.dev_path), Ok(Content::Html(s)) => { let dev_dir = &config.build.dev_path; - let dev_path = Path::new(dev_dir).join("index.tauri.html"); + let dev_path = std::path::Path::new(dev_dir).join("index.tauri.html"); assert_eq!( s, format!( "data:text/html,{}", - urlencoding::encode(&read_to_string(dev_path).expect("failed to read dev path")) + urlencoding::encode( + &std::fs::read_to_string(dev_path).expect("failed to read dev path") + ) ) ); }