diff --git a/.github/actions/workflow-run-job-linux/action.yml b/.github/actions/workflow-run-job-linux/action.yml index 4ee567f1b30..3b8ccc65000 100644 --- a/.github/actions/workflow-run-job-linux/action.yml +++ b/.github/actions/workflow-run-job-linux/action.yml @@ -87,13 +87,16 @@ runs: ln -s "$(pwd)" "${{github.workspace}}" cd "${{github.workspace}}" - cat <<"EOF" > ci.sh + mkdir artifacts + + cat <<'EOF' > ci.sh #! /usr/bin/env bash - set -eo pipefail + set -euo pipefail echo -e "\e[1;34mRunning as '$(whoami)' user in $(pwd):\e[0m" echo -e "\e[1;34m${COMMAND}\e[0m" - eval "${COMMAND}" || exit_code=$? - if [ ! -z "$exit_code" ]; then + eval "${COMMAND}" + exit_code=$? + if [[ "$exit_code" -ne 0 ]]; then echo -e "::group::️❗ \e[1;31mInstructions to Reproduce CI Failure Locally\e[0m" echo "::error:: To replicate this failure locally, follow the steps below:" echo "1. Clone the repository, and navigate to the correct branch and commit:" @@ -107,6 +110,22 @@ runs: echo " - Continuous Integration (CI) Overview: https://github.com/NVIDIA/cccl/blob/main/ci-overview.md" exit $exit_code fi + + # Copy any artifacts we want to preserve out of the container: + results_dir=/artifacts + + # Finds a matching file in the repo directory and copies it to the results directory. + find_and_copy() { + filename="$1" + filepath="$(find . -name "${filename}" -print -quit)" + if [[ -z "$filepath" ]]; then + echo "${filename} does not exist in repo directory." + return 1 + fi + cp -v "$filepath" "$results_dir" + } + + find_and_copy "sccache_stats.json" || : EOF chmod +x ci.sh @@ -167,6 +186,7 @@ runs: --env "GITHUB_REPOSITORY=$GITHUB_REPOSITORY" \ --env "GITHUB_STEP_SUMMARY=$GITHUB_STEP_SUMMARY" \ --volume "${{github.workspace}}/ci.sh:/ci.sh" \ + --volume "${{github.workspace}}/artifacts:/artifacts" \ --volume "$(host_path "$RUNNER_TEMP")/.aws:/root/.aws" \ --volume "$(dirname "$(dirname "${{github.workspace}}")"):/__w" \ -- /ci.sh @@ -179,19 +199,7 @@ runs: mkdir -p "$result_dir" touch "$result_dir/success" - - # Finds a matching file in the repo directory and copies it to the results directory. - find_and_copy() { - filename="$1" - filepath="$(find ${{github.event.repository.name}} -name "${filename}" -print -quit)" - if [[ -z "$filepath" ]]; then - echo "${filename} does not exist in repo directory." - return 1 - fi - cp -v "$filepath" "$result_dir" - } - - find_and_copy "sccache_stats.json" || true # Ignore failures + cp -rv artifacts/* "$result_dir" echo "::group::Job artifacts" tree "$result_dir"