summaryrefslogtreecommitdiffstats
path: root/.github/workflows/ci.yml
diff options
context:
space:
mode:
Diffstat (limited to '.github/workflows/ci.yml')
-rw-r--r--.github/workflows/ci.yml153
1 files changed, 153 insertions, 0 deletions
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 0000000..58449e8
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,153 @@
+name: CI
+
+on:
+ push:
+ branches:
+ - main
+ pull_request:
+ branches:
+ - main
+
+defaults:
+ run:
+ shell: bash
+
+jobs:
+ pre_job:
+ runs-on: ubuntu-latest
+ outputs:
+ should_skip: ${{ steps.skip_check.outputs.should_skip }}
+ steps:
+ - id: skip_check
+ uses: fkirc/skip-duplicate-actions@v5
+ with:
+ concurrent_skipping: 'outdated_runs'
+ cancel_others: 'true'
+ skip_after_successful_duplicate: 'false'
+
+ test:
+ needs: pre_job
+ if: needs.pre_job.outputs.should_skip != 'true'
+ strategy:
+ matrix:
+ os: [ubuntu-latest, windows-latest]
+ python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"]
+ runs-on: ${{ matrix.os }}
+ steps:
+ - uses: actions/checkout@v3
+ - name: Use Python ${{ matrix.python-version }}
+ uses: actions/setup-python@v4
+ id: setup-python
+ with:
+ python-version: ${{ matrix.python-version }}
+ allow-prereleases: true
+ - name: Install Poetry
+ uses: snok/install-poetry@v1
+ with:
+ version: '1.5.1'
+ virtualenvs-in-project: true
+ - name: Load cached venv
+ id: cached-poetry-dependencies
+ uses: actions/cache@v3
+ with:
+ path: .venv
+ key: venv-${{ runner.os }}-${{ steps.setup-python.outputs.python-version }}-${{ hashFiles('**/poetry.lock') }}
+ - name: Install dependencies
+ if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true'
+ run: poetry install --all-extras
+ - name: Run tests
+ run: |
+ source $VENV # Only needed because of Github Action caching
+ poe test
+
+ test-pyodide:
+ needs: pre_job
+ if: needs.pre_job.outputs.should_skip != 'true'
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - name: Use Python "3.10"
+ uses: actions/setup-python@v4
+ with:
+ python-version: "3.10"
+ - name: Install Poetry
+ uses: snok/install-poetry@v1
+ with:
+ virtualenvs-in-project: true
+ - name: Install Dependencies
+ if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true'
+ run: |
+ poetry install --with pyodide
+ - name: Run Testsuite
+ uses: nick-fields/retry@v2
+ with:
+ timeout_minutes: 10
+ max_attempts: 6
+ command: |
+ source $VENV
+ poe test-pyodide || true
+
+ lint:
+ needs: pre_job
+ if: needs.pre_job.outputs.should_skip != 'true'
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ with:
+ fetch-depth: 0
+ - name: Use Python
+ uses: actions/setup-python@v4
+ with:
+ python-version: "3.x"
+ - name: Install Poetry
+ uses: snok/install-poetry@v1
+ with:
+ virtualenvs-in-project: true
+ - name: Load cached venv
+ id: cached-poetry-dependencies
+ uses: actions/cache@v3
+ with:
+ path: .venv
+ key: venv-${{ hashFiles('**/poetry.lock') }}
+ - name: Install dependencies
+ if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true'
+ run: poetry install --all-extras --with dev
+ - name: Run lints
+ run: |
+ source $VENV
+ poe lint
+
+ build:
+ needs: pre_job
+ if: needs.pre_job.outputs.should_skip != 'true'
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ with:
+ fetch-depth: 0
+ - name: Use Python
+ uses: actions/setup-python@v4
+ with:
+ python-version: "3.x"
+ - name: Install Poetry
+ uses: snok/install-poetry@v1
+ with:
+ virtualenvs-in-project: true
+ - name: Load cached venv
+ id: cached-poetry-dependencies
+ uses: actions/cache@v3
+ with:
+ path: .venv
+ key: venv-${{ hashFiles('**/poetry.lock') }}
+ - name: Install dependencies
+ if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true'
+ run: poetry install --all-extras
+ - name: Build packages (sdist and wheel)
+ run: |
+ git describe --tags --abbrev=0
+ poetry build
+ - name: Upload builds
+ uses: actions/upload-artifact@v3
+ with:
+ name: build-artifacts
+ path: "dist/*"