mirror of
https://github.com/Start9Labs/start-os.git
synced 2026-03-30 20:14:49 +00:00
require script is present during pack step iff any pkg procs are type script
This commit is contained in:
@@ -77,6 +77,12 @@ pub enum PackageProcedure {
|
|||||||
Script(JsProcedure),
|
Script(JsProcedure),
|
||||||
}
|
}
|
||||||
impl PackageProcedure {
|
impl PackageProcedure {
|
||||||
|
pub fn is_script(&self) -> bool {
|
||||||
|
match self {
|
||||||
|
Self::Js(_) => true,
|
||||||
|
_ => false,
|
||||||
|
}
|
||||||
|
}
|
||||||
#[instrument]
|
#[instrument]
|
||||||
pub fn validate(
|
pub fn validate(
|
||||||
&self,
|
&self,
|
||||||
|
|||||||
@@ -154,6 +154,29 @@ pub struct Manifest {
|
|||||||
pub dependencies: Dependencies,
|
pub dependencies: Dependencies,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Manifest {
|
||||||
|
pub fn package_procedures(&self) -> impl Iterator<Item = &PackageProcedure> {
|
||||||
|
use std::iter::once;
|
||||||
|
let main = once(&self.main);
|
||||||
|
let cfg_get = self.config.as_ref().map(|a| &a.get).into_iter();
|
||||||
|
let cfg_set = self.config.as_ref().map(|a| &a.set).into_iter();
|
||||||
|
let props = self.properties.iter();
|
||||||
|
let backups = vec![&self.backup.create, &self.backup.restore].into_iter();
|
||||||
|
let migrations = self
|
||||||
|
.migrations
|
||||||
|
.to
|
||||||
|
.values()
|
||||||
|
.chain(self.migrations.from.values());
|
||||||
|
let actions = self.actions.0.values().map(|a| &a.implementation);
|
||||||
|
main.chain(cfg_get)
|
||||||
|
.chain(cfg_set)
|
||||||
|
.chain(props)
|
||||||
|
.chain(backups)
|
||||||
|
.chain(migrations)
|
||||||
|
.chain(actions)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
|
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
|
||||||
#[serde(rename_all = "kebab-case")]
|
#[serde(rename_all = "kebab-case")]
|
||||||
pub struct Assets {
|
pub struct Assets {
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ use crate::s9pk::reader::S9pkReader;
|
|||||||
use crate::util::display_none;
|
use crate::util::display_none;
|
||||||
use crate::util::serde::IoFormat;
|
use crate::util::serde::IoFormat;
|
||||||
use crate::volume::Volume;
|
use crate::volume::Volume;
|
||||||
use crate::{Error, ResultExt};
|
use crate::{Error, ErrorKind, ResultExt};
|
||||||
|
|
||||||
pub mod builder;
|
pub mod builder;
|
||||||
pub mod header;
|
pub mod header;
|
||||||
@@ -123,8 +123,12 @@ pub async fn pack(#[context] ctx: SdkContext, #[arg] path: Option<PathBuf>) -> R
|
|||||||
})
|
})
|
||||||
.scripts({
|
.scripts({
|
||||||
let script_path = path.join(manifest.assets.scripts_path()).join("embassy.js");
|
let script_path = path.join(manifest.assets.scripts_path()).join("embassy.js");
|
||||||
if script_path.exists() {
|
if manifest.package_procedures().any(|a| a.is_script()) {
|
||||||
Some(File::open(script_path).await?)
|
if script_path.exists() {
|
||||||
|
Some(File::open(script_path).await?)
|
||||||
|
} else {
|
||||||
|
return Err(Error::new(eyre!("Script is declared in manifest, but no such script exists at ./scripts/embassy.js"), ErrorKind::Pack).into())
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user