name: CI on: push: branches: [ "**" ] pull_request: branches: [ "**" ] jobs: build: strategy: matrix: os: [ubuntu-latest, windows-latest, macos-latest] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v3 - uses: actions/setup-python@v4 with: python-version: '3.11' - name: Install build tools (Linux/macOS) if: runner.os != 'Windows' shell: bash run: | if [ "$RUNNER_OS" = "Linux" ]; then sudo apt-get update sudo apt-get install -y pkg-config build-essential else brew install pkg-config fi - name: Install MSYS2 and secp256k1 if: runner.os == 'Windows' id: msys uses: msys2/setup-msys2@v2 with: update: true install: >- mingw-w64-x86_64-toolchain mingw-w64-x86_64-libsecp256k1 - name: Set PKG_CONFIG_PATH if: runner.os == 'Windows' shell: bash run: echo "PKG_CONFIG_PATH=${{ steps.msys.outputs.msys2-location }}/mingw64/lib/pkgconfig" >> $GITHUB_ENV - name: Set libsecp256k1 path if: runner.os == 'Windows' shell: bash run: echo "SECP256K1_LIB_DIR=${{ steps.msys.outputs.msys2-location }}/mingw64" >> $GITHUB_ENV - name: Cache pip uses: actions/cache@v3 with: path: ~/.cache/pip key: ${{ runner.os }}-pip-${{ hashFiles('src/requirements.txt') }} restore-keys: | ${{ runner.os }}-pip- - name: Set up Python dependencies id: deps run: | python -m pip install --upgrade pip pip install -r src/requirements.txt - name: Run tests with coverage run: | pytest --cov=src --cov-report=xml --cov-report=term-missing \ --cov-fail-under=20 src/tests - name: Upload coverage report uses: actions/upload-artifact@v4 with: name: coverage-xml-${{ matrix.os }} path: coverage.xml