WIP: No Code Change CI #14
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Compare Build Outputs | |
on: | |
pull_request: | |
types: [labeled] | |
concurrency: | |
group: ci-${{github.workflow}}-${{ github.ref }} | |
cancel-in-progress: true | |
jobs: | |
build-and-compare: | |
if: github.event.label.name == 'CX_NO_CODE_CHANGE' | |
runs-on: ubuntu-20.04 | |
container: ardupilot/ardupilot-dev-${{ matrix.toolchain }}:v0.0.29 | |
strategy: | |
fail-fast: false # don't cancel if a job from the matrix fails | |
matrix: | |
toolchain: [ | |
chibios, | |
#chibios-clang, | |
] | |
gcc: [10] | |
exclude: | |
- gcc: 10 | |
toolchain: chibios-clang | |
board: ["CarbonixF405", "Volanti-M1"] | |
# board: ["CarbonixCubeOrange", "CarbonixF405", "Volanti-M1", "Volanti-M2", "Volanti-M3", "Volanti-M4", "Volanti-M5", "Volanti-LWing", "Volanti-RWing", "Volanti-LTail", "Volanti-RTail", "Ottano-M1", "Ottano-M2", "Ottano-M3", "Ottano-M4", "Ottano-M5", "Ottano-LWing", "Ottano-RWing", "Ottano-LTail", "Ottano-RTail"] | |
steps: | |
# git checkout the PR | |
- uses: actions/checkout@v3 | |
with: | |
submodules: 'recursive' | |
- name: Add default environment version | |
run: | | |
export CHIBIOS_GIT_VERSION="12345678" | |
export GIT_VERSION="abcdef" | |
export GIT_VERSION_INT="15" | |
# Put ccache into github cache for faster build | |
- name: Prepare ccache timestamp | |
id: ccache_cache_timestamp | |
run: | | |
NOW=$(date -u +"%F-%T") | |
echo "timestamp=${NOW}" >> $GITHUB_OUTPUT | |
- name: ccache cache files | |
uses: actions/cache@v3 | |
with: | |
path: ~/.ccache | |
key: ${{github.workflow}}-ccache-${{steps.ccache_cache_timestamp.outputs.timestamp}} | |
restore-keys: ${{github.workflow}}-ccache- # restore ccache from either previous build on this branch or on master | |
- name: setup ccache | |
run: | | |
. .github/workflows/ccache.env | |
- name: build head | |
shell: bash | |
run: ./Tools/Carbonix_scripts/carbonix_board_build.sh ${{ matrix.board }} | |
- name: Check build files | |
id: check_files | |
uses: andstor/file-existence-action@v2 | |
with: | |
files: "build/${{ matrix.board }}/*" | |
fail: true | |
- name: Save head branch build output | |
uses: actions/upload-artifact@v2 | |
with: | |
name: head-build-output | |
path: ./build | |
- name: Checkout base branch | |
uses: actions/checkout@v2 | |
with: | |
submodules: 'recursive' | |
ref: ${{ github.base_ref }} | |
- name: Add default environment version | |
run: | | |
export CHIBIOS_GIT_VERSION="12345678" | |
export GIT_VERSION="abcdef" | |
export GIT_VERSION_INT="15" | |
- name: build base | |
shell: bash | |
run: ./Tools/Carbonix_scripts/carbonix_board_build.sh ${{ matrix.board }} | |
- name: Check build files | |
id: check_files_base | |
uses: andstor/file-existence-action@v2 | |
with: | |
files: "build/${{ matrix.board }}/*" | |
fail: true | |
- name: Save base branch build output | |
uses: actions/upload-artifact@v2 | |
with: | |
name: base-build-output | |
path: ./build | |
- name: Download build outputs | |
uses: actions/download-artifact@v2 | |
with: | |
path: ./artifacts | |
- name: List build output | |
run: ls -l ./artifacts/ | |
- name: Compare build outputs | |
shell: bash | |
run: | | |
echo '<?xml version="1.0" encoding="UTF-8"?>' > junit.xml | |
echo '<testsuite name="CompareBuildOutputs" tests="1">' >> junit.xml | |
for base_file in ./artifacts/base-build-output/${{ matrix.board }}/bin/*.bin; do | |
base_filename=$(basename "$base_file") | |
head_file="./artifacts/head-build-output/${{ matrix.board }}/bin/$base_filename" | |
echo "Comparing $base_file with $head_file" | |
diff_output=$(diff "$base_file" "$head_file" || true) | |
base_file_size=$(du -b "$base_file" | cut -f1) | |
head_file_size=$(du -b "$head_file" | cut -f1) | |
if [ -n "$diff_output" ]; then | |
echo "Difference found between $base_file and $head_file" | |
echo "$diff_output" # print the diff output to the console | |
echo "<testcase classname=\"${base_filename}\" name=\"CompareBuildOutputs\">" >> junit.xml | |
echo "<failure message=\"Difference found between $base_file and $head_file. Base file size: $base_file_size bytes. Head file size: $head_file_size bytes.\">" >> junit.xml | |
echo "$diff_output" >> junit.xml | |
echo "</failure>" >> junit.xml | |
echo "</testcase>" >> junit.xml | |
else | |
echo "No difference found between $base_file and $head_file" | |
echo "<testcase classname=\"${base_filename}\" name=\"CompareBuildOutputs\">" >> junit.xml | |
echo "<system-out>No difference found between $base_file and $head_file. Base file size: $base_file_size bytes. Head file size: $head_file_size bytes.</system-out>" >> junit.xml | |
echo "</testcase>" >> junit.xml | |
fi | |
done | |
echo '</testsuite>' >> junit.xml | |
- name: Upload test results | |
uses: actions/upload-artifact@v2 | |
with: | |
name: test-results | |
path: junit.xml |