Merge pull request #611 from Cypherock/develop #1859
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: CI Tests | |
on: | |
push: | |
branches: | |
- main | |
- develop | |
pull_request: | |
branches: | |
- '**' | |
jobs: | |
check-commit-msg: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 | |
- name: Validate PR commits | |
if: github.event_name == 'pull_request' | |
run: bash ./utilities/ci/test-commit-msg.sh ${{ github.event.pull_request.base.sha }} ${{ github.event.pull_request.head.sha }} | |
check-format: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 | |
- name: Restore clang-tools | |
id: cache-clang-tools | |
uses: actions/cache@v3 | |
with: | |
path: clang-tools | |
key: clang-tools | |
- name: Check formatting | |
env: | |
CACHED: ${{ steps.cache-clang-tools.outputs.cache-hit }} | |
SHA_BASE: ${{ github.event.pull_request.base.sha }} | |
run: | | |
if [ ! "${CACHED}" = "true" ]; then | |
bash ./utilities/ci/setup-clang-tools.sh; | |
fi | |
PATH="$PATH:$(pwd)/clang-tools" | |
# Check event type here so ci chaching can take effect | |
if [ ${{ github.event_name }} = 'pull_request' ]; then | |
bash ./utilities/ci/format-checker.sh ${SHA_BASE} | |
fi | |
static-checks: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 | |
- name: Restore clang-tools | |
id: cache-clang-tools | |
uses: actions/cache@v3 | |
with: | |
path: clang-tools | |
key: clang-tools | |
- name: Check formatting | |
env: | |
CACHED: ${{ steps.cache-clang-tools.outputs.cache-hit }} | |
SHA_BASE: ${{ github.event.pull_request.base.sha }} | |
run: | | |
if [ ! "${CACHED}" = "true" ]; then | |
bash ./utilities/ci/setup-clang-tools.sh; | |
fi | |
PATH="$PATH:$(pwd)/clang-tools" | |
# Check event type here so ci chaching can take effect | |
if [ ${{ github.event_name }} = 'pull_request' ]; then | |
bash ./utilities/ci/static-analyzer.sh ${SHA_BASE} | |
fi | |
- name: Upload result | |
uses: actions/upload-artifact@v3 | |
with: | |
name: clang-tidy-result | |
path: anaylysis.results | |
build-firmwares: | |
needs: check-format | |
strategy: | |
fail-fast: false | |
matrix: | |
firmware: [main] | |
target: [release, dev] | |
platform: [device, simulator] | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: recursive | |
- name: Restore build-tools | |
id: cache-build-tools | |
uses: actions/cache@v3 | |
with: | |
path: build-tools | |
key: build-tools | |
- name: Restore arm-gcc | |
if: matrix.platform == 'device' | |
id: cache-arm-gcc | |
uses: actions/cache@v3 | |
with: | |
path: arm-gcc | |
key: arm-gcc | |
- name: Restore proto-tools | |
id: cache-proto-tools | |
uses: actions/cache@v3 | |
with: | |
path: proto-tools | |
key: proto-tools | |
- name: Install target dependencies | |
if: matrix.platform == 'device' | |
env: | |
CACHED: ${{ steps.cache-arm-gcc.outputs.cache-hit }} | |
PROTO_CACHED: ${{ steps.cache-proto-tools.outputs.cache-hit }} | |
run: | | |
if [ ! "${CACHED}" = "true" ]; then | |
bash ./utilities/ci/setup-arm-gcc.sh; | |
fi | |
if [ ! "${PROTO_CACHED}" = "true" ]; then | |
bash ./utilities/ci/setup-protoc.sh; | |
fi | |
pip install -r utilities/script/requirements.txt | |
- name: Install simulator dependencies | |
if: matrix.platform == 'simulator' | |
run: sudo apt update && sudo apt install libsdl2-dev --no-install-recommends -y | |
- name: Build binaries | |
env: | |
CACHED: ${{ steps.cache-build-tools.outputs.cache-hit }} | |
run: | | |
if [ ! "${CACHED}" = "true" ]; then | |
bash ./utilities/ci/setup-build-tools.sh; | |
fi | |
pip install -r vendor/nanopb/extra/requirements.txt | |
PATH="$PATH:$(pwd)/build-tools:$(pwd)/arm-gcc/bin:$(pwd)/proto-tools/bin" | |
./utilities/build.sh -u -f ${{ matrix.firmware }} -t ${{ matrix.target }} -p ${{ matrix.platform }} | |
run-unit-tests: | |
needs: check-format | |
if: github.event_name == 'pull_request' | |
strategy: | |
fail-fast: false | |
matrix: | |
firmware: [main] | |
target: [release] | |
platform: [simulator] | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: recursive | |
- name: Restore build-tools | |
id: cache-build-tools | |
uses: actions/cache@v3 | |
with: | |
path: build-tools | |
key: build-tools | |
- name: Install simulator dependencies | |
run: sudo apt update && sudo apt install libsdl2-dev --no-install-recommends -y | |
- name: Run tests | |
env: | |
CACHED: ${{ steps.cache-build-tools.outputs.cache-hit }} | |
run: | | |
if [ ! "${CACHED}" = "true" ]; then | |
bash ./utilities/ci/setup-build-tools.sh; | |
fi | |
PATH="$PATH:$(pwd)/build-tools" | |
pip install -r vendor/nanopb/extra/requirements.txt | |
# Ignore any non-zero exits from simulator run using '|| true' | |
bash ./utilities/run_unit_tests.sh -f ${{ matrix.firmware }} -p ${{ matrix.platform }} > test_results.txt || true | |
cat test_results.txt | |
# Unity prints "OK" if all tests pass, "FAIL" if tests fail; return 1 to indicate failure | |
if [ ! "$(tail -n 1 test_results.txt)" = "OK" ]; then exit 1; fi |