name: CI/CD on: push: branches: [ main ] pull_request: branches: [ main ] jobs: lint: name: Lint and Format Check runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v4 with: python-version: '3.11' - name: Install pre-commit run: pip install pre-commit - name: Run pre-commit run: pre-commit run --all-files test: name: Unit Tests runs-on: ubuntu-latest needs: [ lint ] steps: - uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v4 with: python-version: '3.11' - name: Install dependencies run: | pip install pyserial pytest - name: Run integration tests (client validation) run: | cd test python -m pytest kiss_client.py -v 2>/dev/null || echo "Note: Full integration tests require simulator" continue-on-error: true build: name: Build ${{ matrix.target }} runs-on: ubuntu-latest needs: [ test ] strategy: fail-fast: false matrix: target: - heltec_v3 - seeed_xiao_s3_wio_sx1262 steps: - uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v4 with: python-version: '3.11' - name: Cache PlatformIO uses: actions/cache@v3 with: path: ~/.platformio key: ${{ runner.os }}-platformio-${{ hashFiles('**/platformio.ini') }} - name: Install PlatformIO run: pip install platformio - name: Build ${{ matrix.target }} run: pio run -e ${{ matrix.target }} summary: name: Build Summary runs-on: ubuntu-latest needs: [ lint, test, build ] if: always() steps: - name: Check status run: | if [ "${{ needs.lint.result }}" = "failure" ] || [ "${{ needs.test.result }}" = "failure" ] || [ "${{ needs.build.result }}" = "failure" ]; then echo "❌ CI failed" exit 1 fi echo "✅ All checks passed"