Skip to content

Commit

Permalink
CI: Validate all defconfig files before running any builds
Browse files Browse the repository at this point in the history
Currently, CI Build Jobs will validate the `defconfig` file just before compiling the NuttX Target (like `rv-virt:nsh`). This means that the Build Job might run for a while, before hitting a `defconfig` error and failing much later.

This PR updates the CI Workflow `build.yml` to validate all `defconfig` files before running any builds. This means that errors in the `defconfig` files will be flagged earlier. And the Build Job will terminate (with an error) before any build begins.

This behaviour is helpful for resolving CI Build Issues quickly. The code is derived from `tools/testbuild.sh`. The enhancement was suggested here: apache#14259
  • Loading branch information
lupyuen committed Oct 15, 2024
1 parent d22ad37 commit ce10548
Showing 1 changed file with 36 additions and 1 deletion.
37 changes: 36 additions & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,41 @@ jobs:
export ARTIFACTDIR=`pwd`/buildartifacts
git config --global --add safe.directory /github/workspace/sources/nuttx
git config --global --add safe.directory /github/workspace/sources/apps
# Validate the defconfig files in a temp folder, preserving the links
tar cf sources.tar sources/nuttx sources/apps
mkdir validate
pushd validate
tar xf ../sources.tar
pushd sources/nuttx
testfile=tools/ci/testlist/${{matrix.boards}}.dat
echo Validating targets in $testfile
testlist=`grep -v -E "^(-|#)|^[C|c][M|m][A|a][K|k][E|e]" $testfile || true`
for line in $testlist; do
firstch=${line:0:1}
if [ "X$firstch" == "X/" ]; then
dir=`echo $line | cut -d',' -f1`
list=`find boards$dir -name defconfig | cut -d'/' -f4,6`
for config in ${list}; do
echo ./tools/refresh.sh --silent $config
if ! ./tools/refresh.sh --silent $config; then
echo Error: $config:1:1: error: $config is configured incorrectly. To fix it, run '"'tools/refresh.sh $config'"'
fail=1
fi
make distclean || true
done
fi
done
popd ; popd
rm -rf sources.tar validate
# Quit if the defconfig validation failed
if [[ "$fail" == "1" ]]; then
echo Error: $testfile:1:1: error: Quitting, defconfig validation failed for $testfile
exit 1
fi
# Build the targets
cd sources/nuttx/tools/ci
if [ "X${{matrix.boards}}" = "Xcodechecker" ]; then
./cibuild.sh -c -A -N -R --codechecker testlist/${{matrix.boards}}.dat
Expand Down Expand Up @@ -385,4 +420,4 @@ jobs:
with:
name: msvc-builds
path: buildartifacts/
continue-on-error: true
continue-on-error: true

0 comments on commit ce10548

Please sign in to comment.