From f3dc3ae29031679c3a502dc3b46a1a112d114bf7 Mon Sep 17 00:00:00 2001
From: Martin Larralde <martin.larralde@embl.de>
Date: Sun, 13 Jun 2021 16:31:01 +0200
Subject: [PATCH] Add `test.yml` Actions workflow to test and measure coverage

---
 .github/workflows/requirements.txt |   6 +
 .github/workflows/test.yml         | 199 +++++++++++++++++++++++++++++
 2 files changed, 205 insertions(+)
 create mode 100644 .github/workflows/requirements.txt
 create mode 100644 .github/workflows/test.yml

diff --git a/.github/workflows/requirements.txt b/.github/workflows/requirements.txt
new file mode 100644
index 0000000..3897d01
--- /dev/null
+++ b/.github/workflows/requirements.txt
@@ -0,0 +1,6 @@
+coverage ~=5.0
+codecov ~=2.0
+cython ~=0.29.16
+wheel
+auditwheel
+setuptools >=46.4.0
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
new file mode 100644
index 0000000..e39e7fd
--- /dev/null
+++ b/.github/workflows/test.yml
@@ -0,0 +1,199 @@
+name: Test
+
+on:
+  - push
+  - pull_request
+
+jobs:
+
+  test_linux:
+    name: Test (Linux)
+    runs-on: ubuntu-latest
+    env:
+      OS: Linux
+    strategy:
+      matrix:
+        include:
+        - python-version: 3.5
+          python-release: v3.5
+          python-impl: CPython
+        - python-version: 3.6
+          python-release: v3.6
+          python-impl: CPython
+        - python-version: 3.7
+          python-release: v3.7
+          python-impl: CPython
+        - python-version: 3.8
+          python-release: v3.8
+          python-impl: CPython
+        - python-version: 3.9
+          python-release: v3.9
+          python-impl: CPython
+        - python-version: pypy-3.6
+          python-release: v3.6
+          python-impl: PyPy
+        - python-version: pypy-3.7
+          python-release: v3.7
+          python-impl: PyPy
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v2
+      with:
+        submodules: true
+    - name: Cache Python requirements
+      uses: actions/cache@v2
+      with:
+        path: ~/.cache/pip
+        key: ${{ runner.os }}-pip-${{ matrix.python-version }}
+        restore-keys: ${{ runner.os }}-pip-${{ matrix.python-version }}
+    - name: Cache built C files
+      uses: actions/cache@v2
+      with:
+        path: build
+        key: ${{ runner.os }}-build-${{ matrix.python-version }}
+        restore-keys: ${{ runner.os }}-build-${{ matrix.python-version }}
+    - name: Setup Python ${{ matrix.python-version }}
+      uses: actions/setup-python@v2
+      with:
+        python-version: ${{ matrix.python-version }}
+    - name: Update pip
+      run: python -m pip install -U pip wheel setuptools
+    - name: Install Python requirements
+      run: python -m pip install -r .github/workflows/requirements.txt
+    - name: Build C extension
+      run: python setup.py build_ext --inplace --debug
+    - name: Test with coverage
+      run: python -m coverage run -m unittest discover -vv
+    - name: Upload to Codecov
+      uses: codecov/codecov-action@v1
+      with:
+        flags: ${{ matrix.python-impl }},${{ matrix.python-release }},${{ env.OS }}
+        name: test-python-${{ matrix.python-version }}
+        fail_ci_if_error: true
+        token: ${{ secrets.CODECOV_TOKEN }}
+
+  test_osx:
+    name: Test (OSX)
+    runs-on: macos-latest
+    env:
+      OS: OSX
+    strategy:
+      matrix:
+        include:
+        - python-version: 3.5
+          python-release: v3.5
+          python-impl: CPython
+        - python-version: 3.6
+          python-release: v3.6
+          python-impl: CPython
+        - python-version: 3.7
+          python-release: v3.7
+          python-impl: CPython
+        - python-version: 3.8
+          python-release: v3.8
+          python-impl: CPython
+        - python-version: 3.9
+          python-release: v3.9
+          python-impl: CPython
+        - python-version: pypy-3.6
+          python-release: v3.6
+          python-impl: PyPy
+        - python-version: pypy-3.7
+          python-release: v3.7
+          python-impl: PyPy
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v2
+      with:
+        submodules: true
+    - name: Cache Python requirements
+      uses: actions/cache@v2
+      with:
+        path: ~/.cache/pip
+        key: ${{ runner.os }}-pip-${{ matrix.python-version }}
+        restore-keys: ${{ runner.os }}-pip-${{ matrix.python-version }}
+    - name: Cache built C files
+      uses: actions/cache@v2
+      with:
+        path: build
+        key: ${{ runner.os }}-build-${{ matrix.python-version }}
+        restore-keys: ${{ runner.os }}-build-${{ matrix.python-version }}
+    - name: Setup Python ${{ matrix.python-version }}
+      uses: actions/setup-python@v2
+      with:
+        python-version: ${{ matrix.python-version }}
+    - name: Update pip
+      run: python -m pip install -U pip wheel setuptools
+    - name: Install Python requirements
+      run: python -m pip install -r .github/workflows/requirements.txt
+    - name: Build C extension
+      run: python setup.py build_ext --inplace --debug
+    - name: Test with coverage
+      run: python -m coverage run -m unittest discover -vv
+    - uses: codecov/codecov-action@v1
+      with:
+        flags: ${{ matrix.python-impl }},${{ matrix.python-release }},${{ env.OS }}
+        name: test-python-${{ matrix.python-version }}
+        fail_ci_if_error: true
+        token: ${{ secrets.CODECOV_TOKEN }}
+
+  test_windows:
+    name: Test (Windows)
+    runs-on: windows-latest
+    env:
+      OS: Windows
+    strategy:
+      matrix:
+        include:
+        - python-version: 3.5
+          python-release: v3.5
+          python-impl: CPython
+        - python-version: 3.6
+          python-release: v3.6
+          python-impl: CPython
+        - python-version: 3.7
+          python-release: v3.7
+          python-impl: CPython
+        - python-version: 3.8
+          python-release: v3.8
+          python-impl: CPython
+        - python-version: 3.9
+          python-release: v3.9
+          python-impl: CPython
+        - python-version: pypy-3.6
+          python-release: v3.6
+          python-impl: PyPy
+        - python-version: pypy-3.7
+          python-release: v3.7
+          python-impl: PyPy
+    steps:
+    - name: Checkout code
+      uses: actions/checkout@v2
+      with:
+        submodules: true
+    - name: Cache built C files
+      uses: actions/cache@v2
+      with:
+        path: build
+        key: ${{ runner.os }}-build-${{ matrix.python-version }}
+        restore-keys: ${{ runner.os }}-build-${{ matrix.python-version }}
+    - name: Setup Python ${{ matrix.python-version }}
+      uses: actions/setup-python@v2
+      with:
+        python-version: ${{ matrix.python-version }}
+        architecture: x64
+    - name: Update pip
+      run: python -m pip install -U pip wheel setuptools
+    - name: Install Python requirements
+      run: python -m pip install -r .github/workflows/requirements.txt
+    - name: Build C extension
+      run: python setup.py build_ext --inplace
+    - name: Test with coverage
+      run: python -m coverage run -m unittest discover -vv
+    - name: Upload to Codecov
+      uses: codecov/codecov-action@v1
+      with:
+        flags: ${{ matrix.python-impl }},${{ matrix.python-release }},${{ env.OS }}
+        name: test-python-${{ matrix.python-version }}
+        fail_ci_if_error: true
+        token: ${{ secrets.CODECOV_TOKEN }}
-- 
GitLab