From 74e54a016c378fc942fc74ea4e58b2c0f1ea4d2d Mon Sep 17 00:00:00 2001 From: Albert Armea Date: Sat, 27 Dec 2025 20:53:13 -0500 Subject: [PATCH] Allow arguments for Snap apps --- crates/shepherd-api/src/types.rs | 3 +++ crates/shepherd-config/src/policy.rs | 2 +- crates/shepherd-config/src/schema.rs | 3 +++ crates/shepherd-host-linux/src/adapter.rs | 5 +++-- 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/crates/shepherd-api/src/types.rs b/crates/shepherd-api/src/types.rs index 1dd60b3..1993b49 100644 --- a/crates/shepherd-api/src/types.rs +++ b/crates/shepherd-api/src/types.rs @@ -35,6 +35,9 @@ pub enum EntryKind { /// Command to run (defaults to snap_name if not specified) #[serde(default)] command: Option, + /// Additional command-line arguments + #[serde(default)] + args: Vec, /// Additional environment variables #[serde(default)] env: HashMap, diff --git a/crates/shepherd-config/src/policy.rs b/crates/shepherd-config/src/policy.rs index 4a80fe6..c36a71f 100644 --- a/crates/shepherd-config/src/policy.rs +++ b/crates/shepherd-config/src/policy.rs @@ -192,7 +192,7 @@ pub struct LimitsPolicy { fn convert_entry_kind(raw: RawEntryKind) -> EntryKind { match raw { RawEntryKind::Process { argv, env, cwd } => EntryKind::Process { argv, env, cwd }, - RawEntryKind::Snap { snap_name, command, env } => EntryKind::Snap { snap_name, command, env }, + RawEntryKind::Snap { snap_name, command, args, env } => EntryKind::Snap { snap_name, command, args, env }, RawEntryKind::Vm { driver, args } => EntryKind::Vm { driver, args }, RawEntryKind::Media { library_id, args } => EntryKind::Media { library_id, args }, RawEntryKind::Custom { type_name, payload } => EntryKind::Custom { diff --git a/crates/shepherd-config/src/schema.rs b/crates/shepherd-config/src/schema.rs index 5133c49..e1f3a9d 100644 --- a/crates/shepherd-config/src/schema.rs +++ b/crates/shepherd-config/src/schema.rs @@ -89,6 +89,9 @@ pub enum RawEntryKind { snap_name: String, /// Command to run (defaults to snap_name if not specified) command: Option, + /// Additional command-line arguments + #[serde(default)] + args: Vec, /// Additional environment variables #[serde(default)] env: HashMap, diff --git a/crates/shepherd-host-linux/src/adapter.rs b/crates/shepherd-host-linux/src/adapter.rs index c609a8a..54c9f61 100644 --- a/crates/shepherd-host-linux/src/adapter.rs +++ b/crates/shepherd-host-linux/src/adapter.rs @@ -118,10 +118,11 @@ impl HostAdapter for LinuxHost { EntryKind::Process { argv, env, cwd } => { (argv.clone(), env.clone(), cwd.clone(), None) } - EntryKind::Snap { snap_name, command, env } => { + EntryKind::Snap { snap_name, command, args, env } => { // For snap apps, the command defaults to the snap name let cmd = command.clone().unwrap_or_else(|| snap_name.clone()); - let argv = vec![cmd]; + let mut argv = vec![cmd]; + argv.extend(args.clone()); (argv, env.clone(), None, Some(snap_name.clone())) } EntryKind::Vm { driver, args } => {