feat: add cli support to build assets from executable (#3429)
* feat: add cli support to build assets from executable See https://github.com/DioxusLabs/dioxus/discussions/3402#discussioncomment-11632372 * fix: store relative paths in executable * bring back deprecation warning --------- Co-authored-by: Jonathan Kelley <jkelleyrtp@gmail.com>
This commit is contained in:
1 parent
2c5de0a713
commit
5109a4b745
4 files changed
+48
-1
No files matched your search
@@ -0,0 +1,40 @@
|
||||
use std::{fs::create_dir_all, path::PathBuf};
|
||||
|
||||
use crate::{Result, StructuredOutput};
|
||||
use clap::Parser;
|
||||
use dioxus_cli_opt::{process_file_to, AssetManifest};
|
||||
use tracing::debug;
|
||||
|
||||
#[derive(Clone, Debug, Parser)]
|
||||
pub struct BuildAssets {
|
||||
/// The source executable to build assets for.
|
||||
pub(crate) executable: PathBuf,
|
||||
|
||||
/// The source directory for the assets.
|
||||
pub(crate) source: PathBuf,
|
||||
|
||||
/// The destination directory for the assets.
|
||||
pub(crate) destination: PathBuf,
|
||||
}
|
||||
|
||||
impl BuildAssets {
|
||||
pub async fn run(self) -> Result<StructuredOutput> {
|
||||
let mut manifest = AssetManifest::default();
|
||||
manifest.add_from_object_path(&self.executable)?;
|
||||
|
||||
create_dir_all(&self.destination)?;
|
||||
for (path, asset) in manifest.assets.iter() {
|
||||
let source_path = self.source.join(path);
|
||||
let destination_path = self.destination.join(asset.bundled_path());
|
||||
debug!(
|
||||
"Processing asset {} --> {} {:#?}",
|
||||
source_path.display(),
|
||||
destination_path.display(),
|
||||
asset
|
||||
);
|
||||
process_file_to(asset.options(), &source_path, &destination_path)?;
|
||||
}
|
||||
|
||||
Ok(StructuredOutput::Success)
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
pub(crate) mod autoformat;
|
||||
pub(crate) mod build;
|
||||
pub(crate) mod build_assets;
|
||||
pub(crate) mod bundle;
|
||||
pub(crate) mod check;
|
||||
pub(crate) mod clean;
|
||||
@@ -90,6 +91,10 @@ pub(crate) enum Commands {
|
||||
#[clap(subcommand)]
|
||||
#[clap(name = "config")]
|
||||
Config(config::Config),
|
||||
|
||||
/// Build the assets for a specific target.
|
||||
#[clap(name = "build_assets")]
|
||||
BuildAssets(build_assets::BuildAssets),
|
||||
}
|
||||
|
||||
impl Display for Commands {
|
||||
@@ -106,6 +111,7 @@ impl Display for Commands {
|
||||
Commands::Check(_) => write!(f, "check"),
|
||||
Commands::Bundle(_) => write!(f, "bundle"),
|
||||
Commands::Run(_) => write!(f, "run"),
|
||||
Commands::BuildAssets(_) => write!(f, "build_assets"),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -57,6 +57,7 @@ async fn main() {
|
||||
Commands::Serve(opts) => opts.serve().await,
|
||||
Commands::Bundle(opts) => opts.bundle().await,
|
||||
Commands::Run(opts) => opts.run().await,
|
||||
Commands::BuildAssets(opts) => opts.run().await,
|
||||
};
|
||||
|
||||
// Provide a structured output for third party tools that can consume the output of the CLI
|
||||
|
||||
@@ -48,7 +48,7 @@ impl BundledAsset {
|
||||
/// Create a new asset but with a relative path
|
||||
///
|
||||
/// This method is deprecated and will be removed in a future release.
|
||||
#[deprecated(
|
||||
#[deprecated(
|
||||
note = "Relative asset!() paths are not supported. Use a path like `/assets/myfile.png` instead of `./assets/myfile.png`"
|
||||
)]
|
||||
pub const fn new_relative(
|
||||
|
||||
Reference in new issue
Block a user