Skip to content

WIP: No Code Change CI #14

WIP: No Code Change CI

WIP: No Code Change CI #14

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