ci: silence ci test output while recording in full (#30654)

* ci: silence ci test output while recording in full

* shellcheck

* Adjust --color handling place

* Dump to stderr...

* Reduce too spammy solana_metrics logs

* Clean up

* Tweak

* Stash actual command's exit_code, not echo's
This commit is contained in:
Ryo Onodera 2023-03-16 22:17:29 +09:00 committed by GitHub
parent 423fd6010e
commit aaaee556d8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 46 additions and 12 deletions

View File

@ -1,11 +1,22 @@
#!/bin/bash -e
source ci/upload-ci-artifact.sh
#
# Add job_stats data point
#
if [[ -z $CI_BUILD_START ]]; then
echo Error: CI_BUILD_START empty
else
# make sure console outputs are uploaded as soon as possible, if any
(
shopt -s nullglob
for console_log in ./intercepted-console-*; do
gzip -f "$console_log"
upload-ci-artifact "$console_log.gz"
done
)
CI_BUILD_DURATION=$(( $(date +%s) - CI_BUILD_START + 1 ))
CI_LABEL=${BUILDKITE_LABEL:-build label missing}

22
ci/intercept.sh Executable file
View File

@ -0,0 +1,22 @@
#!/usr/bin/env bash
set -e
if [[ -n $CI && -z $NO_INTERCEPT ]]; then
console_log="./intercepted-console-$(date '+%Yy%mm%dd%Hh%Mm%Ss%Nns').log"
echo "$0: Intercepting stderr into $console_log, along side tee-d stdout."
# we don't care about being racy here as was before; so disable shellcheck
# shellcheck disable=SC2094
if "$@" 2>> "$console_log" 1>> >(tee -a "$console_log"); then
exit_code=0
else
exit_code=$?
echo "$0: command failed; please see $console_log in artifacts"
fi
exit "$exit_code"
else
# revert to noop so that this wrapper isn't so inconvenient to be used deep
# outside CI=1 land (i.e. on laptops)
"$@"
fi

View File

@ -21,9 +21,6 @@ report=coverage-"${CI_COMMIT:0:9}".tar.gz
mv target/cov/report.tar.gz "$report"
upload-ci-artifact "$report"
gzip -f target/cov/coverage-stderr.log
upload-ci-artifact target/cov/coverage-stderr.log.gz
annotate --style success --context lcov-report \
"lcov report: <a href=\"artifact://$report\">$report</a>"

View File

@ -65,7 +65,7 @@ test-stable)
_ cargo test --jobs "$JOBS" --all --tests --exclude solana-local-cluster ${V:+--verbose} -- -Z unstable-options --format json --report-time | tee results.json
exit_if_error "${PIPESTATUS[0]}"
else
_ cargo test --jobs "$JOBS" --all --tests --exclude solana-local-cluster ${V:+--verbose} -- --nocapture
_ ci/intercept.sh cargo test --jobs "$JOBS" --all --tests --exclude solana-local-cluster ${V:+--verbose} -- --nocapture
fi
;;
test-stable-sbf)
@ -180,7 +180,7 @@ test-local-cluster)
_ cargo test --release --package solana-local-cluster --test local_cluster ${V:+--verbose} -- --test-threads=1 -Z unstable-options --format json --report-time | tee results.json
exit_if_error "${PIPESTATUS[0]}"
else
_ cargo test --release --package solana-local-cluster --test local_cluster ${V:+--verbose} -- --nocapture --test-threads=1
_ ci/intercept.sh cargo test --release --package solana-local-cluster --test local_cluster ${V:+--verbose} -- --nocapture --test-threads=1
fi
exit 0
;;
@ -190,7 +190,7 @@ test-local-cluster-flakey)
_ cargo test --release --package solana-local-cluster --test local_cluster_flakey ${V:+--verbose} -- --test-threads=1 -Z unstable-options --format json --report-time | tee results.json
exit_if_error "${PIPESTATUS[0]}"
else
_ cargo test --release --package solana-local-cluster --test local_cluster_flakey ${V:+--verbose} -- --nocapture --test-threads=1
_ ci/intercept.sh cargo test --release --package solana-local-cluster --test local_cluster_flakey ${V:+--verbose} -- --nocapture --test-threads=1
fi
exit 0
;;
@ -200,7 +200,7 @@ test-local-cluster-slow-1)
_ cargo test --release --package solana-local-cluster --test local_cluster_slow_1 ${V:+--verbose} -- --test-threads=1 -Z unstable-options --format json --report-time | tee results.json
exit_if_error "${PIPESTATUS[0]}"
else
_ cargo test --release --package solana-local-cluster --test local_cluster_slow_1 ${V:+--verbose} -- --nocapture --test-threads=1
_ ci/intercept.sh cargo test --release --package solana-local-cluster --test local_cluster_slow_1 ${V:+--verbose} -- --nocapture --test-threads=1
fi
exit 0
;;
@ -210,7 +210,7 @@ test-local-cluster-slow-2)
_ cargo test --release --package solana-local-cluster --test local_cluster_slow_2 ${V:+--verbose} -- --test-threads=1 -Z unstable-options --format json --report-time | tee results.json
exit_if_error "${PIPESTATUS[0]}"
else
_ cargo test --release --package solana-local-cluster --test local_cluster_slow_2 ${V:+--verbose} -- --nocapture --test-threads=1
_ ci/intercept.sh cargo test --release --package solana-local-cluster --test local_cluster_slow_2 ${V:+--verbose} -- --nocapture --test-threads=1
fi
exit 0
;;
@ -243,6 +243,7 @@ esac
(
export CARGO_TOOLCHAIN=+"$rust_stable"
export RUST_LOG="solana_metrics=warn,info,$RUST_LOG"
echo --- ci/localnet-sanity.sh
ci/localnet-sanity.sh -x

View File

@ -78,8 +78,11 @@ fi
NPROC=$(nproc)
JOBS=$((JOBS>NPROC ? NPROC : JOBS))
RUST_LOG=solana=trace _ "$cargo" nightly test --jobs "$JOBS" --target-dir target/cov --no-run "${packages[@]}"
if RUST_LOG=solana=trace _ "$cargo" nightly test --jobs "$JOBS" --target-dir target/cov "${packages[@]}" -- --nocapture 2> >(tee target/cov/coverage-stderr.log >&2); then
_ "$cargo" nightly test --jobs "$JOBS" --target-dir target/cov --no-run "${packages[@]}"
# most verbose log level (trace) is enabled for all solana code to make log!
# macro code green always
if RUST_LOG=solana=trace _ ci/intercept.sh "$cargo" nightly test --jobs "$JOBS" --target-dir target/cov "${packages[@]}" -- --nocapture; then
test_status=0
else
test_status=$?

View File

@ -30,8 +30,8 @@ fn run_cargo_build(crate_name: &str, extra_args: &[&str], fail: bool) {
let mut cmd = assert_cmd::Command::cargo_bin("cargo-build-sbf").unwrap();
let assert = cmd.env("RUST_LOG", "debug").args(&args).assert();
let output = assert.get_output();
println!("Test stdout\n{}\n", String::from_utf8_lossy(&output.stdout));
println!("Test stderr\n{}\n", String::from_utf8_lossy(&output.stderr));
eprintln!("Test stdout\n{}\n", String::from_utf8_lossy(&output.stdout));
eprintln!("Test stderr\n{}\n", String::from_utf8_lossy(&output.stderr));
if fail {
assert.failure();
} else {