diff options
Diffstat (limited to '.github/workflows/ci.yml')
-rw-r--r-- | .github/workflows/ci.yml | 153 |
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/*" |