check rust programs (#4688)

This commit is contained in:
Jack May 2019-06-20 07:43:31 -07:00 committed by GitHub
parent f8523db51d
commit b430762a23
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
16 changed files with 46 additions and 18 deletions

View File

@ -2,7 +2,7 @@ steps:
- command: "ci/shellcheck.sh" - command: "ci/shellcheck.sh"
name: "shellcheck" name: "shellcheck"
timeout_in_minutes: 5 timeout_in_minutes: 5
- command: ". ci/rust-version.sh; ci/docker-run.sh $$rust_stable_docker_image ci/test-checks.sh" - command: ". ci/rust-version.sh; ci/docker-run.sh $$rust_nightly_docker_image ci/test-checks.sh"
name: "checks" name: "checks"
timeout_in_minutes: 15 timeout_in_minutes: 15
- wait - wait

View File

@ -3,6 +3,7 @@ ARG date
RUN set -x \ RUN set -x \
&& rustup install nightly-$date \ && rustup install nightly-$date \
&& rustup component add clippy --toolchain=nightly-$date \
&& rustup show \ && rustup show \
&& rustc --version \ && rustc --version \
&& cargo --version \ && cargo --version \

View File

@ -15,12 +15,12 @@ To update the pinned version:
1. Run `ci/docker-rust-nightly/build.sh` to rebuild the nightly image locally, 1. Run `ci/docker-rust-nightly/build.sh` to rebuild the nightly image locally,
or potentially `ci/docker-rust-nightly/build.sh YYYY-MM-DD` if there's a or potentially `ci/docker-rust-nightly/build.sh YYYY-MM-DD` if there's a
specific YYYY-MM-DD that is desired (default is today's build). specific YYYY-MM-DD that is desired (default is today's build).
1. Update `ci/rust-version.sh` to reflect the new nightly `YYY-MM-DD`
1. Run `SOLANA_DOCKER_RUN_NOSETUID=1 ci/docker-run.sh --nopull solanalabs/rust-nightly:YYYY-MM-DD ci/test-coverage.sh` 1. Run `SOLANA_DOCKER_RUN_NOSETUID=1 ci/docker-run.sh --nopull solanalabs/rust-nightly:YYYY-MM-DD ci/test-coverage.sh`
to confirm the new nightly image builds. Fix any issues as needed to confirm the new nightly image builds. Fix any issues as needed
1. Run `docker login` to enable pushing images to Docker Hub, if you're authorized. 1. Run `docker login` to enable pushing images to Docker Hub, if you're authorized.
1. Run `CI=true ci/docker-rust-nightly/build.sh YYYY-MM-DD` to push the new nightly image to dockerhub.com. 1. Run `CI=true ci/docker-rust-nightly/build.sh YYYY-MM-DD` to push the new nightly image to dockerhub.com.
1. Modify the `solanalabs/rust-nightly:YYYY-MM-DD` reference in `ci/rust-version.sh` from the previous to 1. Send a PR with the `ci/rust-version.sh` change and any codebase adjustments needed.
new *YYYY-MM-DD* value, send a PR with this change and any codebase adjustments needed.
## Troubleshooting ## Troubleshooting

View File

@ -23,11 +23,13 @@ declare print_free_tree=(
'metrics/src' 'metrics/src'
'netutil/src' 'netutil/src'
'runtime/src' 'runtime/src'
'sdk/bpf/rust/rust-utils'
'sdk/src' 'sdk/src'
'programs/vote_api/src' 'programs/bpf/rust'
'programs/vote_program/src'
'programs/stake_api/src' 'programs/stake_api/src'
'programs/stake_program/src' 'programs/stake_program/src'
'programs/vote_api/src'
'programs/vote_program/src'
) )
if _ git --no-pager grep -n --max-depth=0 "${prints[@]/#/-e }" -- "${print_free_tree[@]}"; then if _ git --no-pager grep -n --max-depth=0 "${prints[@]/#/-e }" -- "${print_free_tree[@]}"; then

View File

@ -13,11 +13,14 @@
# $ source ci/rust-version.sh # $ source ci/rust-version.sh
# #
export rust_stable=1.35.0 stable_version=1.35.0
export rust_stable_docker_image=solanalabs/rust:1.35.0 nightly_version=2019-06-20
export rust_nightly=nightly-2019-05-01 export rust_stable="$stable_version"
export rust_nightly_docker_image=solanalabs/rust-nightly:2019-05-01 export rust_stable_docker_image=solanalabs/rust:"$stable_version"
export rust_nightly=nightly-"$nightly_version"
export rust_nightly_docker_image=solanalabs/rust-nightly:"$nightly_version"
[[ -z $1 ]] || ( [[ -z $1 ]] || (

View File

@ -5,10 +5,23 @@ cd "$(dirname "$0")/.."
source ci/_ source ci/_
source ci/rust-version.sh stable source ci/rust-version.sh stable
source ci/rust-version.sh nightly
export RUST_BACKTRACE=1 export RUST_BACKTRACE=1
export RUSTFLAGS="-D warnings" export RUSTFLAGS="-D warnings"
(
for project in programs/bpf/rust/*/ ; do
(
cd "$project"
_ cargo +"$rust_stable" fmt --all -- --check
_ cargo +"$rust_nightly" clippy --all -- --version
_ cargo +"$rust_nightly" clippy --all -- --deny=warnings
_ cargo +"$rust_stable" audit
)
done
)
_ cargo +"$rust_stable" fmt --all -- --check _ cargo +"$rust_stable" fmt --all -- --check
_ cargo +"$rust_stable" clippy --all -- --version _ cargo +"$rust_stable" clippy --all -- --version
_ cargo +"$rust_stable" clippy --all -- --deny=warnings _ cargo +"$rust_stable" clippy --all -- --deny=warnings

View File

@ -1,5 +1,6 @@
//! @brief Example Rust-based BPF program that test dynamic memory allocation //! @brief Example Rust-based BPF program that test dynamic memory allocation
#![no_std] #![no_std]
#![allow(unused_attributes)]
#[macro_use] #[macro_use]
extern crate alloc; extern crate alloc;
@ -52,7 +53,7 @@ pub extern "C" fn entrypoint(_input: *mut u8) -> bool {
for i in 0..ITERS { for i in 0..ITERS {
assert_eq!(*ptr.add(i as usize), i as u8); assert_eq!(*ptr.add(i as usize), i as u8);
} }
sol_log_64(0x3, 0, 0, 0, *ptr.add(42) as u64); sol_log_64(0x3, 0, 0, 0, u64::from(*ptr.add(42)));
assert_eq!(*ptr.add(42), 42); assert_eq!(*ptr.add(42), 42);
alloc::alloc::dealloc(ptr, layout); alloc::alloc::dealloc(ptr, layout);
} }

View File

@ -1,6 +1,7 @@
//! @brief Example Rust-based BPF program tests dependent crates //! @brief Example Rust-based BPF program tests dependent crates
#![no_std] #![no_std]
#![allow(unused_attributes)]
extern crate solana_sdk_bpf_utils; extern crate solana_sdk_bpf_utils;

View File

@ -1,6 +1,7 @@
//! @brief Example Rust-based BPF program tests loop iteration //! @brief Example Rust-based BPF program tests loop iteration
#![no_std] #![no_std]
#![allow(unused_attributes)]
extern crate solana_sdk_bpf_utils; extern crate solana_sdk_bpf_utils;

View File

@ -1,6 +1,7 @@
//! @brief Example Rust-based BPF program tests loop iteration //! @brief Example Rust-based BPF program tests loop iteration
#![no_std] #![no_std]
#![allow(unused_attributes)]
mod helper; mod helper;

View File

@ -1,6 +1,7 @@
//! @brief Example Rust-based BPF program that prints out the parameters passed to it //! @brief Example Rust-based BPF program that prints out the parameters passed to it
#![no_std] #![no_std]
#![allow(unreachable_code)]
extern crate solana_sdk_bpf_utils; extern crate solana_sdk_bpf_utils;
@ -37,7 +38,7 @@ fn process_instruction(
{ {
// Test - arch config // Test - arch config
#[cfg(not(target_arch = "bpf"))] #[cfg(not(target_arch = "bpf"))]
assert!(false); panic!();
} }
{ {

View File

@ -1,6 +1,7 @@
//! @brief Example Rust-based BPF program that panics //! @brief Example Rust-based BPF program that panics
#![no_std] #![no_std]
#![allow(unused_attributes)]
extern crate solana_sdk_bpf_utils; extern crate solana_sdk_bpf_utils;

View File

@ -21,7 +21,7 @@ fn process_instruction(
let tick_height = LittleEndian::read_u64(k.data); let tick_height = LittleEndian::read_u64(k.data);
assert_eq!(10u64, tick_height); assert_eq!(10u64, tick_height);
sol_log("Success"); sol_log("Success");
return true return true;
} }
panic!(); panic!();
} }

View File

@ -46,7 +46,7 @@ pub struct SolClusterInfo<'a> {
macro_rules! entrypoint { macro_rules! entrypoint {
($process_instruction:ident) => { ($process_instruction:ident) => {
#[no_mangle] #[no_mangle]
pub extern "C" fn entrypoint(input: *mut u8) -> bool { pub unsafe extern "C" fn entrypoint(input: *mut u8) -> bool {
unsafe { unsafe {
if let Ok((mut ka, info, data)) = $crate::entrypoint::deserialize(input) { if let Ok((mut ka, info, data)) = $crate::entrypoint::deserialize(input) {
// Call use function // Call use function
@ -86,9 +86,9 @@ pub unsafe fn deserialize<'a>(
return Err(()); return Err(());
} }
let mut ka: [Option<SolKeyedAccount>; MAX_ACCOUNTS] = let mut kas: [Option<SolKeyedAccount>; MAX_ACCOUNTS] =
[None, None, None, None, None, None, None, None, None, None]; [None, None, None, None, None, None, None, None, None, None];
for i in 0..num_ka { for ka in kas.iter_mut().take(num_ka) {
let is_signer = { let is_signer = {
#[allow(clippy::cast_ptr_alignment)] #[allow(clippy::cast_ptr_alignment)]
let is_signer_val = *(input.add(offset) as *const u64); let is_signer_val = *(input.add(offset) as *const u64);
@ -121,7 +121,7 @@ pub unsafe fn deserialize<'a>(
}; };
offset += SIZE_PUBKEY; offset += SIZE_PUBKEY;
ka[i] = Some(SolKeyedAccount { *ka = Some(SolKeyedAccount {
key, key,
is_signer, is_signer,
lamports, lamports,
@ -149,7 +149,7 @@ pub unsafe fn deserialize<'a>(
let info = SolClusterInfo { program_id }; let info = SolClusterInfo { program_id };
Ok((ka, info, data)) Ok((kas, info, data))
} }
#[cfg(test)] #[cfg(test)]

View File

@ -5,6 +5,8 @@
#![feature(alloc_error_handler)] #![feature(alloc_error_handler)]
#![feature(panic_info_message)] #![feature(panic_info_message)]
#![feature(compiler_builtins_lib)] #![feature(compiler_builtins_lib)]
#![feature(lang_items)]
#[lang = "eh_personality"] extern fn eh_personality() {}
extern crate compiler_builtins; extern crate compiler_builtins;

View File

@ -1,6 +1,7 @@
//! @brief Solana Rust-based BPF program panic handling //! @brief Solana Rust-based BPF program panic handling
use core::panic::PanicInfo; use core::panic::PanicInfo;
use core::ptr;
#[cfg(not(test))] #[cfg(not(test))]
#[panic_handler] #[panic_handler]
@ -22,7 +23,7 @@ fn panic(info: &PanicInfo) -> ! {
); );
} }
} }
None => unsafe { sol_panic_(0 as *const u8, 0, 0) }, None => unsafe { sol_panic_(ptr::null(), 0, 0) },
} }
} }
extern "C" { extern "C" {