mirror of
https://github.com/yewprint/yewprint
synced 2024-11-25 04:50:20 +00:00
Replace wasm-run by xtask-wasm (#138)
This commit is contained in:
parent
28f879a9a4
commit
25be039090
47 changed files with 352 additions and 1549 deletions
2
.cargo/config.toml
Normal file
2
.cargo/config.toml
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
[alias]
|
||||||
|
xtask = "run --package xtask --"
|
10
.github/workflows/main.yml
vendored
10
.github/workflows/main.yml
vendored
|
@ -15,22 +15,22 @@ jobs:
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
- uses: Swatinem/rust-cache@v1
|
- uses: Swatinem/rust-cache@v1
|
||||||
- run: cargo test --all-features --verbose
|
- run: cargo test --workspace --all-features --verbose
|
||||||
|
|
||||||
site:
|
site:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
if: ${{ github.event_name == 'push' }}
|
if: ${{ github.event_name == 'push' }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
- run: cargo doc --verbose --all-features --no-deps
|
- run: cargo doc --verbose --workspace --all-features --no-deps
|
||||||
- name: Build (Release)
|
- name: Build (Release)
|
||||||
run: "cargo run -- build"
|
run: "cargo xtask dist --release"
|
||||||
- name: Move doc to build/api
|
- name: Move doc to build/api
|
||||||
run: mv ./target/doc ./build/api
|
run: mv ./target/doc ./target/release/dist/api
|
||||||
- name: Deploy to Netlify
|
- name: Deploy to Netlify
|
||||||
uses: nwtgck/actions-netlify@v1.1
|
uses: nwtgck/actions-netlify@v1.1
|
||||||
with:
|
with:
|
||||||
publish-dir: './build'
|
publish-dir: './target/release/dist'
|
||||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
deploy-message: ${{ github.event.head_commit.message }}
|
deploy-message: ${{ github.event.head_commit.message }}
|
||||||
production-deploy: true
|
production-deploy: true
|
||||||
|
|
8
.github/workflows/pr.yml
vendored
8
.github/workflows/pr.yml
vendored
|
@ -16,14 +16,14 @@ jobs:
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
- uses: Swatinem/rust-cache@v1
|
- uses: Swatinem/rust-cache@v1
|
||||||
- run: cargo test --all-features --verbose
|
- run: cargo test --workspace --all-features --verbose
|
||||||
- name: Build (Release)
|
- name: Build (Release)
|
||||||
id: build
|
id: build
|
||||||
run: "cargo run -- build && echo ::set-output name=size::`cat build/wasm_bg.wasm | wc -c`"
|
run: "cargo xtask dist --release && echo ::set-output name=size::`cat target/release/dist/app.wasm | wc -c`"
|
||||||
- name: Deploy to Netlify
|
- name: Deploy to Netlify
|
||||||
uses: nwtgck/actions-netlify@v1.1
|
uses: nwtgck/actions-netlify@v1.1
|
||||||
with:
|
with:
|
||||||
publish-dir: './build'
|
publish-dir: 'target/release/dist'
|
||||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
deploy-message: ${{ github.event.pull_request.title }}
|
deploy-message: ${{ github.event.pull_request.title }}
|
||||||
env:
|
env:
|
||||||
|
@ -41,5 +41,5 @@ jobs:
|
||||||
- uses: actions-rs/clippy-check@v1
|
- uses: actions-rs/clippy-check@v1
|
||||||
with:
|
with:
|
||||||
token: ${{ secrets.GITHUB_TOKEN }}
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
args: --all-features --workspace -- -D warnings
|
args: --all --all-features --tests -- -D warnings
|
||||||
- run: cargo +nightly fmt -- --check
|
- run: cargo +nightly fmt -- --check
|
||||||
|
|
1649
Cargo.lock
generated
1649
Cargo.lock
generated
File diff suppressed because it is too large
Load diff
33
Cargo.toml
33
Cargo.toml
|
@ -1,13 +1,32 @@
|
||||||
[package]
|
[package]
|
||||||
name = "run"
|
name = "yewprint"
|
||||||
version = "0.0.0"
|
version = "0.1.1"
|
||||||
|
authors = ["Cecile Tonglet <cecile.tonglet@cecton.com>"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
|
license = "MIT OR Apache-2.0"
|
||||||
|
description = "Port of blueprintjs.com to Yew"
|
||||||
|
repository = "https://github.com/yewprint/yewprint"
|
||||||
|
homepage = "https://github.com/yewprint/yewprint"
|
||||||
|
documentation = "https://docs.rs/yewprint"
|
||||||
|
readme = "README.md"
|
||||||
|
include = ["src/**/*.rs", "README.md", "LICENSE.Apache-2.0", "LICENSE.MIT", "iconSvgPaths.js", "build.rs"]
|
||||||
|
keywords = ["blueprint", "yew", "ui"]
|
||||||
|
categories = ["gui"]
|
||||||
|
|
||||||
|
[features]
|
||||||
|
default = ["tree"]
|
||||||
|
tree = ["id_tree"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
log = "0.4"
|
web-sys = { version = "0.3", features = ["DomRect", "Element"] }
|
||||||
structopt = "0.3"
|
yew = "0.18"
|
||||||
wasm-run = "0.9"
|
id_tree = { version = "1.7", optional = true }
|
||||||
yewprint-css = { path = "./yewprint-css" }
|
yewtil = { version = "0.4", features = ["pure"] }
|
||||||
|
wasm-bindgen = "0.2"
|
||||||
|
|
||||||
|
[build-dependencies]
|
||||||
|
regex = { version = "1", default-features = false, features = ["std", "unicode-perl"] }
|
||||||
|
heck = "0.3"
|
||||||
|
|
||||||
[workspace]
|
[workspace]
|
||||||
members = ["yewprint", "yewprint-css", "yewprint-doc"]
|
members = ["yewprint-css", "yewprint-doc", "xtask"]
|
||||||
|
|
|
@ -186,7 +186,7 @@
|
||||||
same "printed page" as the copyright notice for easier
|
same "printed page" as the copyright notice for easier
|
||||||
identification within third-party archives.
|
identification within third-party archives.
|
||||||
|
|
||||||
Copyright [yyyy] [name of copyright owner]
|
Copyright 2020 Cecile Tonglet
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
MIT License
|
MIT License
|
||||||
|
|
||||||
Copyright (c) 2021 Cecile Tonglet
|
Copyright (c) 2020 Cecile Tonglet
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
|
|
@ -29,15 +29,15 @@ cargo generate --git https://github.com/yewprint/yewprint-template.git
|
||||||
## Development Environment
|
## Development Environment
|
||||||
|
|
||||||
```
|
```
|
||||||
cargo run -- serve
|
cargo xtask start
|
||||||
```
|
```
|
||||||
|
|
||||||
You can now go to http://localhost:3000
|
You can now go to http://localhost:8000
|
||||||
|
|
||||||
### Blueprint CSS update
|
### Blueprint CSS update
|
||||||
|
|
||||||
```
|
```
|
||||||
cargo run -- update-css
|
cargo xtask update-css
|
||||||
```
|
```
|
||||||
|
|
||||||
Roadmap
|
Roadmap
|
||||||
|
|
63
src/main.rs
63
src/main.rs
|
@ -1,63 +0,0 @@
|
||||||
#![allow(clippy::unnecessary_wraps)]
|
|
||||||
|
|
||||||
use anyhow::{Context, Result};
|
|
||||||
use std::fs;
|
|
||||||
use std::path::Path;
|
|
||||||
use std::process::Command;
|
|
||||||
use structopt::StructOpt;
|
|
||||||
use wasm_run::prelude::*;
|
|
||||||
|
|
||||||
#[wasm_run::main("yewprint-doc", pre_build, other_cli_commands)]
|
|
||||||
#[derive(StructOpt, Debug)]
|
|
||||||
enum Cli {
|
|
||||||
/// Update Blueprint CSS and docs-theme CSS.
|
|
||||||
UpdateCss,
|
|
||||||
}
|
|
||||||
|
|
||||||
fn pre_build(args: &DefaultBuildArgs, profile: BuildProfile, cargo: &mut Command) -> Result<()> {
|
|
||||||
let package = args.frontend_package();
|
|
||||||
|
|
||||||
download_css(package, false)?;
|
|
||||||
|
|
||||||
match profile {
|
|
||||||
BuildProfile::Profiling | BuildProfile::Release => {
|
|
||||||
cargo.args(&["--features", "wee_alloc"]);
|
|
||||||
}
|
|
||||||
BuildProfile::Dev => {
|
|
||||||
cargo.args(&["--features", "console_error_panic_hook"]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fs::copy("yewprint-doc/src/logo.svg", "build/favicon.svg")?;
|
|
||||||
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
fn other_cli_commands(cli: Cli, _metadata: &Metadata, package: &Package) -> Result<()> {
|
|
||||||
match cli {
|
|
||||||
Cli::UpdateCss => {
|
|
||||||
download_css(package, true)?;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
fn download_css(package: &Package, force: bool) -> Result<()> {
|
|
||||||
let static_path = package.manifest_path.parent().unwrap().join("static");
|
|
||||||
let css_path = static_path.join("blueprint.css");
|
|
||||||
|
|
||||||
if force || !css_path.exists() {
|
|
||||||
yewprint_css::download_css(&css_path)?;
|
|
||||||
|
|
||||||
let version = yewprint_css::download_from_npm_package(
|
|
||||||
"@blueprintjs/docs-theme",
|
|
||||||
"3.11.1",
|
|
||||||
Path::new("package/lib/css/docs-theme.css"),
|
|
||||||
&static_path.join("docs-theme.css"),
|
|
||||||
)
|
|
||||||
.context("while downloading CSS of @blueprintjs/docs-theme")?;
|
|
||||||
log::info!("Docs Theme CSS updated to: {}", version);
|
|
||||||
}
|
|
||||||
|
|
||||||
Ok(())
|
|
||||||
}
|
|
12
xtask/Cargo.toml
Normal file
12
xtask/Cargo.toml
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
[package]
|
||||||
|
name = "xtask"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
env_logger = "0.9"
|
||||||
|
log = "0.4"
|
||||||
|
xtask-wasm = "0.1.3"
|
||||||
|
yewprint-css = { path = "../yewprint-css" }
|
76
xtask/src/main.rs
Normal file
76
xtask/src/main.rs
Normal file
|
@ -0,0 +1,76 @@
|
||||||
|
use std::{
|
||||||
|
fs,
|
||||||
|
path::{Path, PathBuf},
|
||||||
|
process,
|
||||||
|
};
|
||||||
|
use xtask_wasm::{
|
||||||
|
anyhow::{Context, Result},
|
||||||
|
clap,
|
||||||
|
};
|
||||||
|
|
||||||
|
#[derive(clap::Parser)]
|
||||||
|
enum Cli {
|
||||||
|
Dist(xtask_wasm::Dist),
|
||||||
|
Watch(xtask_wasm::Watch),
|
||||||
|
Start(xtask_wasm::DevServer),
|
||||||
|
/// Update Blueprint CSS and docs-theme CSS.
|
||||||
|
UpdateCSS,
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() -> Result<()> {
|
||||||
|
env_logger::builder()
|
||||||
|
.filter_module("xtask", log::LevelFilter::Info)
|
||||||
|
.filter_module("yewprint", log::LevelFilter::Info)
|
||||||
|
.init();
|
||||||
|
|
||||||
|
let cli: Cli = clap::Parser::parse();
|
||||||
|
|
||||||
|
match cli {
|
||||||
|
Cli::Dist(arg) => {
|
||||||
|
log::info!("Generating package...");
|
||||||
|
|
||||||
|
download_css(false)?;
|
||||||
|
|
||||||
|
let result = arg
|
||||||
|
.static_dir_path("yewprint-doc/static")
|
||||||
|
.run("yewprint-doc")?;
|
||||||
|
|
||||||
|
fs::copy(
|
||||||
|
"yewprint-doc/src/logo.svg",
|
||||||
|
result.dist_dir.join("favicon.svg"),
|
||||||
|
)?;
|
||||||
|
}
|
||||||
|
Cli::Watch(arg) => {
|
||||||
|
let mut command = process::Command::new("cargo");
|
||||||
|
command.args(["xtask", "dist"]);
|
||||||
|
|
||||||
|
arg.run(command)?;
|
||||||
|
}
|
||||||
|
Cli::Start(arg) => {
|
||||||
|
arg.arg("dist").start(xtask_wasm::default_dist_dir(false))?;
|
||||||
|
}
|
||||||
|
Cli::UpdateCSS => download_css(true)?,
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn download_css(force: bool) -> Result<()> {
|
||||||
|
let static_path = PathBuf::from("yewprint-doc/static");
|
||||||
|
let css_path = static_path.join("blueprint.css");
|
||||||
|
|
||||||
|
if force || !css_path.exists() {
|
||||||
|
yewprint_css::download_css(&css_path)?;
|
||||||
|
|
||||||
|
let version = yewprint_css::download_from_npm_package(
|
||||||
|
"@blueprintjs/docs-theme",
|
||||||
|
"3.11.1",
|
||||||
|
Path::new("package/lib/css/docs-theme.css"),
|
||||||
|
&static_path.join("docs-theme.css"),
|
||||||
|
)
|
||||||
|
.context("while downloading CSS of @blueprintjs/docs-theme")?;
|
||||||
|
log::info!("Docs Theme CSS updated to: {}", version);
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
|
@ -13,7 +13,7 @@ crate-type = ["cdylib"]
|
||||||
wasm-bindgen = "=0.2"
|
wasm-bindgen = "=0.2"
|
||||||
yew = "0.18"
|
yew = "0.18"
|
||||||
web-sys = { version = "0.3", features = ["Window", "MediaQueryList"] }
|
web-sys = { version = "0.3", features = ["Window", "MediaQueryList"] }
|
||||||
yewprint = { path = "../yewprint" }
|
yewprint = { path = ".." }
|
||||||
yew-router = "0.15"
|
yew-router = "0.15"
|
||||||
|
|
||||||
# `wee_alloc` is a tiny allocator for wasm that is only ~1K in code size
|
# `wee_alloc` is a tiny allocator for wasm that is only ~1K in code size
|
||||||
|
|
|
@ -78,7 +78,7 @@ macro_rules! build_source_code_component {
|
||||||
|
|
||||||
format!(
|
format!(
|
||||||
"https://github.com/yewprint/yewprint/blob/{}\
|
"https://github.com/yewprint/yewprint/blob/{}\
|
||||||
/yewprint/src/{}.rs",
|
/src/{}.rs",
|
||||||
branch, component_name,
|
branch, component_name,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
<title>Yewprint</title>
|
<title>Yewprint</title>
|
||||||
<script type="module">
|
<script type="module">
|
||||||
import init from "/app.js";
|
import init from "/app.js";
|
||||||
init(new URL('app_bg.wasm', import.meta.url));
|
init(new URL('app.wasm', import.meta.url));
|
||||||
</script>
|
</script>
|
||||||
<link rel="icon" href="/favicon.svg">
|
<link rel="icon" href="/favicon.svg">
|
||||||
<link rel="stylesheet" href="/blueprint.css">
|
<link rel="stylesheet" href="/blueprint.css">
|
||||||
|
|
|
@ -1,29 +0,0 @@
|
||||||
[package]
|
|
||||||
name = "yewprint"
|
|
||||||
version = "0.1.1"
|
|
||||||
authors = ["Cecile Tonglet <cecile.tonglet@cecton.com>"]
|
|
||||||
edition = "2018"
|
|
||||||
license = "MIT OR Apache-2.0"
|
|
||||||
description = "Port of blueprintjs.com to Yew"
|
|
||||||
repository = "https://github.com/yewprint/yewprint"
|
|
||||||
homepage = "https://github.com/yewprint/yewprint"
|
|
||||||
documentation = "https://docs.rs/yewprint"
|
|
||||||
readme = "README.md"
|
|
||||||
include = ["src/**/*.rs", "README.md", "LICENSE.Apache-2.0", "LICENSE.MIT", "iconSvgPaths.js", "build.rs"]
|
|
||||||
keywords = ["blueprint", "yew", "ui"]
|
|
||||||
categories = ["gui"]
|
|
||||||
|
|
||||||
[features]
|
|
||||||
default = ["tree"]
|
|
||||||
tree = ["id_tree"]
|
|
||||||
|
|
||||||
[dependencies]
|
|
||||||
web-sys = { version = "0.3", features = ["DomRect", "Element"] }
|
|
||||||
yew = "0.18"
|
|
||||||
id_tree = { version = "1.7", optional = true }
|
|
||||||
yewtil = { version = "0.4", features = ["pure"] }
|
|
||||||
wasm-bindgen = "0.2"
|
|
||||||
|
|
||||||
[build-dependencies]
|
|
||||||
regex = { version = "1", default-features = false, features = ["std", "unicode-perl"] }
|
|
||||||
heck = "0.3"
|
|
|
@ -1 +0,0 @@
|
||||||
../LICENSE.Apache-2.0
|
|
|
@ -1 +0,0 @@
|
||||||
../LICENSE.MIT
|
|
|
@ -1 +0,0 @@
|
||||||
../README.md
|
|
Loading…
Reference in a new issue