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/*"