cli: Option to specify program to launch/deploy in workspace (#288)
This commit is contained in:
parent
37118e8c50
commit
30a58b99e1
|
@ -94,6 +94,8 @@ pub enum Command {
|
||||||
url: Option<String>,
|
url: Option<String>,
|
||||||
#[clap(short, long)]
|
#[clap(short, long)]
|
||||||
keypair: Option<String>,
|
keypair: Option<String>,
|
||||||
|
#[clap(short, long)]
|
||||||
|
program_name: Option<String>,
|
||||||
},
|
},
|
||||||
/// Runs the deploy migration script.
|
/// Runs the deploy migration script.
|
||||||
Migrate {
|
Migrate {
|
||||||
|
@ -110,6 +112,8 @@ pub enum Command {
|
||||||
/// this should almost always be set.
|
/// this should almost always be set.
|
||||||
#[clap(short, long)]
|
#[clap(short, long)]
|
||||||
verifiable: bool,
|
verifiable: bool,
|
||||||
|
#[clap(short, long)]
|
||||||
|
program_name: Option<String>,
|
||||||
},
|
},
|
||||||
/// Upgrades a single program. The configured wallet must be the upgrade
|
/// Upgrades a single program. The configured wallet must be the upgrade
|
||||||
/// authority.
|
/// authority.
|
||||||
|
@ -218,7 +222,11 @@ fn main() -> Result<()> {
|
||||||
Command::New { name } => new(name),
|
Command::New { name } => new(name),
|
||||||
Command::Build { idl, verifiable } => build(idl, verifiable),
|
Command::Build { idl, verifiable } => build(idl, verifiable),
|
||||||
Command::Verify { program_id } => verify(program_id),
|
Command::Verify { program_id } => verify(program_id),
|
||||||
Command::Deploy { url, keypair } => deploy(url, keypair),
|
Command::Deploy {
|
||||||
|
url,
|
||||||
|
keypair,
|
||||||
|
program_name,
|
||||||
|
} => deploy(url, keypair, program_name),
|
||||||
Command::Upgrade {
|
Command::Upgrade {
|
||||||
program_id,
|
program_id,
|
||||||
program_filepath,
|
program_filepath,
|
||||||
|
@ -229,7 +237,8 @@ fn main() -> Result<()> {
|
||||||
url,
|
url,
|
||||||
keypair,
|
keypair,
|
||||||
verifiable,
|
verifiable,
|
||||||
} => launch(url, keypair, verifiable),
|
program_name,
|
||||||
|
} => launch(url, keypair, verifiable, program_name),
|
||||||
Command::Test {
|
Command::Test {
|
||||||
skip_deploy,
|
skip_deploy,
|
||||||
skip_local_validator,
|
skip_local_validator,
|
||||||
|
@ -936,7 +945,7 @@ fn test(
|
||||||
_ => {
|
_ => {
|
||||||
if !skip_deploy {
|
if !skip_deploy {
|
||||||
build(None, false)?;
|
build(None, false)?;
|
||||||
deploy(None, None)?;
|
deploy(None, None, None)?;
|
||||||
}
|
}
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
@ -1151,11 +1160,19 @@ fn start_test_validator(cfg: &Config, flags: Option<Vec<String>>) -> Result<Chil
|
||||||
|
|
||||||
// TODO: Testing and deploys should use separate sections of metadata.
|
// TODO: Testing and deploys should use separate sections of metadata.
|
||||||
// Similarly, each network should have separate metadata.
|
// Similarly, each network should have separate metadata.
|
||||||
fn deploy(url: Option<String>, keypair: Option<String>) -> Result<()> {
|
fn deploy(
|
||||||
_deploy(url, keypair).map(|_| ())
|
url: Option<String>,
|
||||||
|
keypair: Option<String>,
|
||||||
|
program_name: Option<String>,
|
||||||
|
) -> Result<()> {
|
||||||
|
_deploy(url, keypair, program_name).map(|_| ())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn _deploy(url: Option<String>, keypair: Option<String>) -> Result<Vec<(Pubkey, Program)>> {
|
fn _deploy(
|
||||||
|
url: Option<String>,
|
||||||
|
keypair: Option<String>,
|
||||||
|
program_str: Option<String>,
|
||||||
|
) -> Result<Vec<(Pubkey, Program)>> {
|
||||||
with_workspace(|cfg, _path, _cargo| {
|
with_workspace(|cfg, _path, _cargo| {
|
||||||
// Fallback to config vars if not provided via CLI.
|
// Fallback to config vars if not provided via CLI.
|
||||||
let url = url.unwrap_or_else(|| cfg.cluster.url().to_string());
|
let url = url.unwrap_or_else(|| cfg.cluster.url().to_string());
|
||||||
|
@ -1168,9 +1185,19 @@ fn _deploy(url: Option<String>, keypair: Option<String>) -> Result<Vec<(Pubkey,
|
||||||
let mut programs = Vec::new();
|
let mut programs = Vec::new();
|
||||||
|
|
||||||
for mut program in read_all_programs()? {
|
for mut program in read_all_programs()? {
|
||||||
|
if let Some(single_prog_str) = &program_str {
|
||||||
|
let program_name = program.path.file_name().unwrap().to_str().unwrap();
|
||||||
|
if single_prog_str.as_str() != program_name {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
let binary_path = program.binary_path().display().to_string();
|
let binary_path = program.binary_path().display().to_string();
|
||||||
|
|
||||||
println!("Deploying {}...", binary_path);
|
println!(
|
||||||
|
"Deploying program {:?}...",
|
||||||
|
program.path.file_name().unwrap().to_str().unwrap()
|
||||||
|
);
|
||||||
|
println!("Program path: {}...", binary_path);
|
||||||
|
|
||||||
// Write the program's keypair filepath. This forces a new deploy
|
// Write the program's keypair filepath. This forces a new deploy
|
||||||
// address.
|
// address.
|
||||||
|
@ -1245,10 +1272,15 @@ fn upgrade(program_id: Pubkey, program_filepath: String) -> Result<()> {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fn launch(url: Option<String>, keypair: Option<String>, verifiable: bool) -> Result<()> {
|
fn launch(
|
||||||
|
url: Option<String>,
|
||||||
|
keypair: Option<String>,
|
||||||
|
verifiable: bool,
|
||||||
|
program_name: Option<String>,
|
||||||
|
) -> Result<()> {
|
||||||
// Build and deploy.
|
// Build and deploy.
|
||||||
build(None, verifiable)?;
|
build(None, verifiable)?;
|
||||||
let programs = _deploy(url.clone(), keypair.clone())?;
|
let programs = _deploy(url.clone(), keypair.clone(), program_name.clone())?;
|
||||||
|
|
||||||
with_workspace(|cfg, _path, _cargo| {
|
with_workspace(|cfg, _path, _cargo| {
|
||||||
let url = url.unwrap_or_else(|| cfg.cluster.url().to_string());
|
let url = url.unwrap_or_else(|| cfg.cluster.url().to_string());
|
||||||
|
|
Loading…
Reference in New Issue