name: End to end tests on: schedule: - cron: "0 0 * * *" # Run every day at midnight workflow_dispatch: {} jobs: test-simulator: runs-on: ubuntu-latest env: LCOV_CAPTURE_FLAGS: --quiet --capture --include "${PWD}/src/*" --exclude '*/src/mesh/generated/*' --directory .pio/build/coverage/src --base-directory "${PWD}" steps: - name: Install libs needed for native build shell: bash run: | sudo apt-get update --fix-missing sudo apt-get install -y libbluetooth-dev libgpiod-dev libyaml-cpp-dev openssl libssl-dev libulfius-dev liborcania-dev libusb-1.0-0-dev libi2c-dev sudo apt-get install -y lcov - name: Checkout code uses: actions/checkout@v4 with: submodules: recursive - name: Upgrade python tools shell: bash run: | python -m pip install --upgrade pip pip install -U platformio adafruit-nrfutil dotmap pip install -U meshtastic --pre - name: Upgrade platformio shell: bash run: | pio upgrade - name: Build Native run: bin/build-native.sh # We now run integration test before other build steps (to quickly see runtime failures) - name: Build for native/coverage run: | platformio run -e coverage lcov ${{ env.LCOV_CAPTURE_FLAGS }} --initial --output-file coverage_base.info - name: Integration test run: | .pio/build/coverage/program & PID=$! timeout 20 bash -c "until ls -al /proc/$PID/fd | grep socket; do sleep 1; done" echo "Simulator started, launching python test..." python3 -c 'from meshtastic.test import testSimulator; testSimulator()' wait lcov ${{ env.LCOV_CAPTURE_FLAGS }} --test-name integration --output-file coverage_integration.info - name: PlatformIO Tests run: | platformio test -e coverage --junit-output-path testreport.xml lcov ${{ env.LCOV_CAPTURE_FLAGS }} --test-name tests --output-file coverage_tests.info - name: Test Report uses: dorny/test-reporter@v1.9.1 if: success() || failure() # run this step even if previous step failed with: name: PlatformIO Tests path: testreport.xml reporter: java-junit - name: Generate Code Coverage Report run: | lcov --quiet --add-tracefile coverage_base.info --add-tracefile coverage_integration.info --add-tracefile coverage_tests.info --output-file coverage_src.info mkdir code-coverage-report genhtml --quiet --legend --prefix "${PWD}" coverage_src.info --output-directory code-coverage-report mv coverage_*.info code-coverage-report - name: Save Code Coverage Report uses: actions/upload-artifact@v4 with: name: code-coverage-report path: code-coverage-report hardware-tests: runs-on: test-runner steps: - name: Checkout code uses: actions/checkout@v4 # - uses: actions/setup-python@v5 # with: # python-version: '3.10' # pipx install "setuptools<72" - name: Upgrade python tools shell: bash run: | pipx install adafruit-nrfutil pipx install poetry pipx install meshtastic --pip-args=--pre - name: Install PlatformIO from script shell: bash run: | curl -fsSL -o get-platformio.py https://raw.githubusercontent.com/platformio/platformio-core-installer/master/get-platformio.py python3 get-platformio.py - name: Upgrade platformio shell: bash run: | export PATH=$PATH:$HOME/.local/bin pio upgrade - name: Setup Node uses: actions/setup-node@v4 with: node-version: 18 - name: Setup pnpm uses: pnpm/action-setup@v4 with: version: latest - name: Install dependencies, setup devices and run shell: bash run: | git submodule update --init --recursive cd meshtestic/ pnpm install pnpm run setup pnpm run test