Implement package subcommand
This commit is contained in:
parent
742d128030
commit
82d085b11e
|
@ -11,7 +11,7 @@ use std::{fs, path::PathBuf};
|
||||||
pub struct BuildArgs {
|
pub struct BuildArgs {
|
||||||
/// The path of the project to build.
|
/// The path of the project to build.
|
||||||
#[clap(default_value = ".")]
|
#[clap(default_value = ".")]
|
||||||
path: PathBuf,
|
pub path: PathBuf,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn build(_verbose: bool, args: &BuildArgs) -> Result<()> {
|
pub fn build(_verbose: bool, args: &BuildArgs) -> Result<()> {
|
||||||
|
|
|
@ -1,4 +1,12 @@
|
||||||
use crate::error::Result;
|
use std::fs;
|
||||||
|
|
||||||
|
use path_absolutize::Absolutize;
|
||||||
|
|
||||||
|
use crate::{
|
||||||
|
config::ProjectConfig,
|
||||||
|
error::{Error, Result},
|
||||||
|
terminal_output::{print_error, print_info},
|
||||||
|
};
|
||||||
|
|
||||||
use super::BuildArgs;
|
use super::BuildArgs;
|
||||||
|
|
||||||
|
@ -9,8 +17,56 @@ pub struct PackageArgs {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn package(_verbose: bool, args: &PackageArgs) -> Result<()> {
|
pub fn package(_verbose: bool, args: &PackageArgs) -> Result<()> {
|
||||||
println!("PACKAGE");
|
let path = args.build_args.path.as_path();
|
||||||
println!(" - Args: {:?}", args);
|
|
||||||
|
print_info(&format!(
|
||||||
|
"Packaging project at {}",
|
||||||
|
path.absolutize()?.display()
|
||||||
|
));
|
||||||
|
|
||||||
|
let toml_path = if !path.exists() {
|
||||||
|
print_error("The specified path does not exist.");
|
||||||
|
return Err(Error::PathNotFoundError(path.to_path_buf()));
|
||||||
|
} else if path.is_dir() {
|
||||||
|
let toml_path = path.join("pack.toml");
|
||||||
|
if !toml_path.exists() {
|
||||||
|
print_error("The specified directory does not contain a pack.toml file.");
|
||||||
|
return Err(Error::InvalidPackPathError(path.to_path_buf()));
|
||||||
|
}
|
||||||
|
toml_path
|
||||||
|
} else if path.is_file()
|
||||||
|
&& path
|
||||||
|
.file_name()
|
||||||
|
.ok_or(Error::InvalidPackPathError(path.to_path_buf()))?
|
||||||
|
== "pack.toml"
|
||||||
|
{
|
||||||
|
path.to_path_buf()
|
||||||
|
} else {
|
||||||
|
print_error("The specified path is neither a directory nor a pack.toml file.");
|
||||||
|
return Err(Error::InvalidPackPathError(path.to_path_buf()));
|
||||||
|
};
|
||||||
|
|
||||||
|
let toml_content = fs::read_to_string(&toml_path)?;
|
||||||
|
let project_config = toml::from_str::<ProjectConfig>(&toml_content)?;
|
||||||
|
|
||||||
|
let main_path = toml_path
|
||||||
|
.parent()
|
||||||
|
.ok_or(Error::InvalidPackPathError(path.to_path_buf()))?
|
||||||
|
.join("src/main.shu");
|
||||||
|
let compiled = shulkerscript_lang::compile(&main_path)?;
|
||||||
|
|
||||||
|
let dist_path = toml_path
|
||||||
|
.parent()
|
||||||
|
.expect("Failed to get parent directory of pack.toml")
|
||||||
|
.join("dist")
|
||||||
|
.join(project_config.pack.name + ".zip");
|
||||||
|
|
||||||
|
compiled.zip(&dist_path)?;
|
||||||
|
|
||||||
|
print_info(&format!(
|
||||||
|
"Finished packaging project to {}",
|
||||||
|
dist_path.absolutize_from(path)?.display()
|
||||||
|
));
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue