Replaced the run-test.sh script with a Python script that runs our unit tests through pytest. Tests are now run in parallel to speed up running the entire test suite, and it allows for integration with other tools that support pytest, such as IDEs. Also removed a dependency on remarshal, because it depends on an old version of PyYAML that conflicts with other Python packages in our Docker image. Replaced it with yq.
72 lines
2 KiB
YAML
72 lines
2 KiB
YAML
name: Tests
|
|
|
|
on:
|
|
push:
|
|
paths:
|
|
- ".github/workflows/test.yml"
|
|
- "app/tests/**"
|
|
- "app/src/**"
|
|
pull_request:
|
|
paths:
|
|
- ".github/workflows/test.yml"
|
|
- "app/tests/**"
|
|
- "app/src/**"
|
|
|
|
jobs:
|
|
collect-tests:
|
|
outputs:
|
|
test-dirs: ${{ steps.test-dirs.outputs.test-dirs }}
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v3
|
|
- name: Find test directories
|
|
id: test-dirs
|
|
run: |
|
|
cd app/tests/
|
|
export TESTS=$(ls -d * | jq -R -s -c 'split("\n")[:-1]')
|
|
echo "::set-output name=test-dirs::${TESTS}"
|
|
run-tests:
|
|
needs: collect-tests
|
|
strategy:
|
|
matrix:
|
|
test: ${{ fromJSON(needs.collect-tests.outputs.test-dirs) }}
|
|
runs-on: ubuntu-latest
|
|
container:
|
|
image: docker.io/zmkfirmware/zmk-build-arm:stable
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v3
|
|
|
|
- name: Cache west modules
|
|
uses: actions/cache@v3.0.2
|
|
env:
|
|
cache-name: cache-zephyr-modules
|
|
with:
|
|
path: |
|
|
modules/
|
|
tools/
|
|
zephyr/
|
|
bootloader/
|
|
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('app/west.yml') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-build-${{ env.cache-name }}-
|
|
${{ runner.os }}-build-
|
|
${{ runner.os }}-
|
|
timeout-minutes: 2
|
|
continue-on-error: true
|
|
- name: Initialize workspace (west init)
|
|
run: west init -l app
|
|
- name: Update modules (west update)
|
|
run: west update
|
|
- name: Export Zephyr CMake package (west zephyr-export)
|
|
run: west zephyr-export
|
|
- name: Test ${{ matrix.test }}
|
|
working-directory: app
|
|
run: west test ${{ matrix.test }}
|
|
- name: Archive artifacts
|
|
if: ${{ always() }}
|
|
uses: actions/upload-artifact@v2
|
|
with:
|
|
name: "log-files"
|
|
path: app/build/**/*.log
|