name: End to end tests

on:
  schedule:
    - cron: "0 0 * * *" # Run every day at midnight
  workflow_dispatch: {}

jobs:
  test-simulator:
    runs-on: ubuntu-latest
    steps:
      - name: Install libbluetooth
        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

      - 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
          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
        run: platformio run -e native

      - name: Integration test
        run: |
          .pio/build/native/program & sleep 10 # 5 seconds was not enough
          echo "Simulator started, launching python test..."
          python3 -c 'from meshtastic.test import testSimulator; testSimulator()'

      - name: PlatformIO Tests
        run: platformio test -e native --junit-output-path testreport.xml

      - 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

  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
