From 238b5967732f88ae15ea8a17f47ba56189f30ea9 Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 16 Dec 2020 21:21:22 +0000 Subject: [PATCH] cargo-build-bpf: Create a random `-keypair.json` file alongside the program deploy artifact for easy upgrades (bp #14162) (#14164) * Use AsRef (cherry picked from commit 9993d2c6236987ec02f70e40b047b52ce1867e83) * Create a random `-keypair.json` file alongside the program deploy artifact for easy upgrades (cherry picked from commit 636a455790f43c66a6d1719132336127d6cbf5bf) * Update Cargo.toml Co-authored-by: Michael Vines --- Cargo.lock | 1 + sdk/cargo-build-bpf/Cargo.toml | 1 + sdk/cargo-build-bpf/src/main.rs | 35 +++++++++++++++++++++++---------- sdk/src/signature.rs | 14 ++++++------- 4 files changed, 34 insertions(+), 17 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2e467d9ecd..68644a507e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3792,6 +3792,7 @@ version = "1.4.18" dependencies = [ "cargo_metadata", "clap", + "solana-sdk", ] [[package]] diff --git a/sdk/cargo-build-bpf/Cargo.toml b/sdk/cargo-build-bpf/Cargo.toml index 4808746a98..e3d78efce6 100644 --- a/sdk/cargo-build-bpf/Cargo.toml +++ b/sdk/cargo-build-bpf/Cargo.toml @@ -12,6 +12,7 @@ publish = false [dependencies] clap = "2.33.3" cargo_metadata = "0.12.0" +solana-sdk = { path = "..", version = "1.4.18" } [features] program = [] diff --git a/sdk/cargo-build-bpf/src/main.rs b/sdk/cargo-build-bpf/src/main.rs index 297112cf5d..f148401773 100644 --- a/sdk/cargo-build-bpf/src/main.rs +++ b/sdk/cargo-build-bpf/src/main.rs @@ -1,13 +1,16 @@ -use clap::{ - crate_description, crate_name, crate_version, value_t, value_t_or_exit, values_t, App, Arg, -}; -use std::{ - env, - ffi::OsStr, - fs, - path::{Path, PathBuf}, - process::exit, - process::Command, +use { + clap::{ + crate_description, crate_name, crate_version, value_t, value_t_or_exit, values_t, App, Arg, + }, + solana_sdk::signature::{write_keypair_file, Keypair}, + std::{ + env, + ffi::OsStr, + fs, + path::{Path, PathBuf}, + process::exit, + process::Command, + }, }; struct Config { @@ -166,6 +169,7 @@ fn build_bpf_package( let program_unstripped_so = target_build_directory.join(&format!("{}.so", program_name)); let program_dump = bpf_out_dir.join(&format!("{}-dump.txt", program_name)); let program_so = bpf_out_dir.join(&format!("{}.so", program_name)); + let program_keypair = bpf_out_dir.join(&format!("{}-keypair.json", program_name)); fn file_older_or_missing(prerequisite_file: &Path, target_file: &Path) -> bool { let prerequisite_metadata = fs::metadata(prerequisite_file).unwrap_or_else(|err| { @@ -186,6 +190,17 @@ fn build_bpf_package( } } + if !program_keypair.exists() { + write_keypair_file(&Keypair::new(), &program_keypair).unwrap_or_else(|err| { + eprintln!( + "Unable to get create {}: {}", + program_keypair.display(), + err + ); + exit(1); + }); + } + if file_older_or_missing(&program_unstripped_so, &program_so) { spawn( &config.bpf_sdk.join("scripts/strip.sh"), diff --git a/sdk/src/signature.rs b/sdk/src/signature.rs index 08b8ad3ca1..278e2ca65d 100644 --- a/sdk/src/signature.rs +++ b/sdk/src/signature.rs @@ -333,9 +333,8 @@ pub fn read_keypair(reader: &mut R) -> Result Result> { - assert!(path != "-"); - let mut file = File::open(path.to_string())?; +pub fn read_keypair_file>(path: F) -> Result> { + let mut file = File::open(path.as_ref())?; read_keypair(&mut file) } @@ -349,12 +348,13 @@ pub fn write_keypair( Ok(serialized) } -pub fn write_keypair_file( +pub fn write_keypair_file>( keypair: &Keypair, - outfile: &str, + outfile: F, ) -> Result> { - assert!(outfile != "-"); - if let Some(outdir) = Path::new(outfile).parent() { + let outfile = outfile.as_ref(); + + if let Some(outdir) = outfile.parent() { fs::create_dir_all(outdir)?; }