From 7b61431ba549e0aa87f0c2dcdc225001ae11f7cc Mon Sep 17 00:00:00 2001 From: Anthony Dodd Date: Tue, 15 Sep 2020 22:05:27 -0500 Subject: [PATCH] Ensure JS snippets from wasm-bindgen are being copied to dist. closes #40 --- CHANGELOG.md | 10 +++++++++- Cargo.lock | 55 +++++++++++++++++++++++++++++----------------------- Cargo.toml | 1 + src/build.rs | 24 +++++++++++++++++++++-- 4 files changed, 63 insertions(+), 27 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b38dd3ab..35c3e52d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,12 +3,20 @@ changelog This changelog follows the patterns described here: https://keepachangelog.com/en/1.0.0/. ## Unreleased + +## 0.4.0 ### added - Added support for layered configuration via `Trunk.toml` & environment variables. - Added an example `Trunk.toml` to the root of the repository showing all possible config values along with their defaults. + +### changed - README has been updated with details on how the config system works. - Removed a fair amount of code duplication as part of the configuration feature. -- Trunk now exits with a non-zero code when an error takes place during execution. +- Added full release automation with optimized release binaries for Linux, MacOS & Windows (all x64). + +### fixed +- Closed [#37](https://github.com/thedodd/trunk/issues/37): Trunk now exits with a non-zero code when an error takes place during execution. +- Closed [#40](https://github.com/thedodd/trunk/issues/40): Trunk is now copying JS snippets from wasm-bindgen into the dist dir as part of the standard build/watch/serve commands. ## 0.3.1 ### fixed diff --git a/Cargo.lock b/Cargo.lock index 65a04f35..1ac2d5e8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -96,7 +96,7 @@ version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "quote 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -151,7 +151,7 @@ dependencies = [ "polling 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", "socket2 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", "vec-arena 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", - "wepoll-sys-stjepang 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", + "wepoll-sys-stjepang 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -172,7 +172,7 @@ dependencies = [ "socket2 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)", "vec-arena 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)", "waker-fn 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "wepoll-sys-stjepang 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", + "wepoll-sys-stjepang 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -272,7 +272,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "proc-macro2 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", "quote 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -553,7 +553,7 @@ dependencies = [ "proc-macro2 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", "quote 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)", "smallvec 1.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -562,7 +562,7 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "quote 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -577,7 +577,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "proc-macro2 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", "quote 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -664,6 +664,11 @@ dependencies = [ "winapi 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "fs_extra" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "fsevent" version = "0.4.0" @@ -783,7 +788,7 @@ dependencies = [ "proc-macro-hack 0.5.18 (registry+https://github.com/rust-lang/crates.io-index)", "proc-macro2 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", "quote 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -923,7 +928,7 @@ dependencies = [ "markup5ever 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", "proc-macro2 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", "quote 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1310,7 +1315,7 @@ dependencies = [ "proc-macro-hack 0.5.18 (registry+https://github.com/rust-lang/crates.io-index)", "proc-macro2 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", "quote 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1336,7 +1341,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "proc-macro2 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", "quote 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1362,7 +1367,7 @@ dependencies = [ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.77 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", - "wepoll-sys-stjepang 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", + "wepoll-sys-stjepang 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1393,7 +1398,7 @@ dependencies = [ "proc-macro-error-attr 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", "proc-macro2 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", "quote 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)", "version_check 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -1619,7 +1624,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "proc-macro2 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", "quote 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1759,7 +1764,7 @@ dependencies = [ "quote 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.116 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.116 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1774,7 +1779,7 @@ dependencies = [ "serde_derive 1.0.116 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.57 (registry+https://github.com/rust-lang/crates.io-index)", "sha1 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1829,7 +1834,7 @@ dependencies = [ "proc-macro-error 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)", "proc-macro2 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", "quote 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1839,7 +1844,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "syn" -version = "1.0.40" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "proc-macro2 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", @@ -1949,7 +1954,7 @@ dependencies = [ "proc-macro2 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", "quote 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)", "standback 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1975,6 +1980,7 @@ dependencies = [ "cargo_metadata 0.11.2 (registry+https://github.com/rust-lang/crates.io-index)", "console 0.12.0 (registry+https://github.com/rust-lang/crates.io-index)", "envy 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", + "fs_extra 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "indicatif 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)", "nipper 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2110,7 +2116,7 @@ dependencies = [ "log 0.4.11 (registry+https://github.com/rust-lang/crates.io-index)", "proc-macro2 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", "quote 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)", "wasm-bindgen-shared 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2141,7 +2147,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "proc-macro2 1.0.21 (registry+https://github.com/rust-lang/crates.io-index)", "quote 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)", + "syn 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)", "wasm-bindgen-backend 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", "wasm-bindgen-shared 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2162,7 +2168,7 @@ dependencies = [ [[package]] name = "wepoll-sys-stjepang" -version = "1.0.6" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "cc 1.0.59 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2286,6 +2292,7 @@ dependencies = [ "checksum fastrand 1.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "5c85295147490b8fcf2ea3d104080a105a8b2c63f9c319e82c02d8e952388919" "checksum femme 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2af1a24f391a5a94d756db5092c6576aad494b88a71a5a36b20c67b63e0df034" "checksum filetime 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)" = "3ed85775dcc68644b5c950ac06a2b23768d3bc9390464151aaf27136998dcf9e" +"checksum fs_extra 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2022715d62ab30faffd124d40b76f4134a550a87792276512b18d63272333394" "checksum fsevent 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5ab7d1bd1bd33cc98b0889831b72da23c0aa4df9cec7e0702f46ecea04b35db6" "checksum fsevent-sys 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f41b048a94555da0f42f1d632e2e19510084fb8e303b0daa2816e733fb3644a0" "checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" @@ -2425,7 +2432,7 @@ dependencies = [ "checksum structopt 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)" = "6cc388d94ffabf39b5ed5fadddc40147cb21e605f53db6f8f36a625d27489ac5" "checksum structopt-derive 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "5e2513111825077552a6751dfad9e11ce0fba07d7276a3943a037d7e93e64c5f" "checksum subtle 2.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "343f3f510c2915908f155e94f17220b19ccfacf2a64a2a5d8004f2c3e311e7fd" -"checksum syn 1.0.40 (registry+https://github.com/rust-lang/crates.io-index)" = "963f7d3cc59b59b9325165add223142bbf1df27655d07789f109896d353d8350" +"checksum syn 1.0.41 (registry+https://github.com/rust-lang/crates.io-index)" = "6690e3e9f692504b941dc6c3b188fd28df054f7fb8469ab40680df52fdcc842b" "checksum tendril 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "707feda9f2582d5d680d733e38755547a3e8fb471e7ba11452ecfd9ce93a5d3b" "checksum terminal_size 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "9a14cd9f8c72704232f0bfc8455c0e861f0ad4eb60cc9ec8a170e231414c1e13" "checksum termios 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6f0fcee7b24a25675de40d5bb4de6e41b0df07bc9856295e7e2b3a3600c400c2" @@ -2461,7 +2468,7 @@ dependencies = [ "checksum wasm-bindgen-macro-support 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)" = "f249f06ef7ee334cc3b8ff031bfc11ec99d00f34d86da7498396dc1e3b1498fe" "checksum wasm-bindgen-shared 0.2.68 (registry+https://github.com/rust-lang/crates.io-index)" = "1d649a3145108d7d3fbcde896a468d1bd636791823c9921135218ad89be08307" "checksum web-sys 0.3.45 (registry+https://github.com/rust-lang/crates.io-index)" = "4bf6ef87ad7ae8008e15a355ce696bed26012b7caa21605188cfd8214ab51e2d" -"checksum wepoll-sys-stjepang 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "6fd319e971980166b53e17b1026812ad66c6b54063be879eb182342b55284694" +"checksum wepoll-sys-stjepang 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)" = "1fdfbb03f290ca0b27922e8d48a0997b4ceea12df33269b9f75e713311eb178d" "checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" "checksum winapi 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" "checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" diff --git a/Cargo.toml b/Cargo.toml index 7d89a2d2..5ea3c677 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -17,6 +17,7 @@ async-std = { version="1.6.3", features=["attributes", "unstable"] } cargo_metadata = "0.11.1" console = "0.12.0" envy = "0.4.1" +fs_extra = "1.2.0" futures = "0.3.5" indicatif = "0.15.0" nipper = "0.1.8" diff --git a/src/build.rs b/src/build.rs index 30530155..e2376af7 100644 --- a/src/build.rs +++ b/src/build.rs @@ -4,9 +4,9 @@ use std::ffi::OsString; use std::path::PathBuf; use std::sync::Arc; -use anyhow::{anyhow, bail, ensure, Result}; +use anyhow::{anyhow, bail, Context, ensure, Result}; use async_process::{Command, Stdio}; -use async_std::fs; +use async_std::{fs, path}; use async_std::task::{spawn, spawn_blocking, JoinHandle}; use cargo_metadata::{Metadata, MetadataCommand, Package}; use console::Emoji; @@ -18,6 +18,7 @@ use crate::config::RtcBuild; const TRUNK_ID: &str = "__trunk-id"; const HREF_ATTR: &str = "href"; +const SNIPPETS_DIR: &str = "snippets"; /// A system used for building a Rust WASM app & bundling its assets. /// @@ -211,6 +212,7 @@ impl BuildSystem { /// Spawn the wasm-bindgen build process. fn spawn_wasm_bindgen_build(&self, file_name: String) -> JoinHandle> { let (dist, bindgen_out, app_target_wasm) = (self.cfg.dist.clone(), self.bindgen_out.clone(), self.app_target_wasm.clone()); + let (snippets_dir_from, snippets_dir_to) = (self.bindgen_out.join(SNIPPETS_DIR), self.cfg.dist.join(SNIPPETS_DIR)); self.progress.set_message(&format!("{}starting wasm-bindgen build", Emoji("📦 ", ""))); spawn(async move { @@ -228,6 +230,7 @@ impl BuildSystem { .map_err(|err| anyhow!("error spawning wasm-bindgen build: {}", err))? .output() .await; + // Handle build results. match build_result { Ok(output) => { @@ -237,6 +240,7 @@ impl BuildSystem { } Err(err) => return Err(anyhow!("error during wasm-bindgen build: {}", err)), } + // Copy the generated WASM & JS loader to the dist dir, and generate the needed body // for the output HTML. let hashed_js_name = format!("{}.js", &file_name); @@ -248,6 +252,9 @@ impl BuildSystem { fs::copy(js_loader_path, js_loader_path_dist).await?; fs::copy(wasm_path, wasm_path_dist).await?; + // Check for any snippets, and copy them over. + Self::copy_dir_recursive(snippets_dir_from, snippets_dir_to).await.with_context(|| "error copying snippets dir")?; + Ok(WasmBindgenOutput { js_output: hashed_js_name, wasm_output: hashed_wasm_name, @@ -255,6 +262,19 @@ impl BuildSystem { }) } + /// A utility function to recursively copy a directory. + async fn copy_dir_recursive(from_dir: PathBuf, to_dir: PathBuf) -> Result<()> { + if !path::PathBuf::from(&from_dir).exists().await { + return Ok(()); + } + spawn_blocking(move || { + let opts = fs_extra::dir::CopyOptions{overwrite: true, content_only: true, ..Default::default()}; + Ok(fs_extra::dir::copy(from_dir, to_dir, &opts)?) + }) + .await + .map(|_| ()) + } + /// Spawn asset building/bundling pipelines. /// /// Assets are given an ID which corresponds to an ID added to the DOM. Once the processing