diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..ccafae3 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,69 @@ +name: Continuous Integration + +on: + pull_request: + branches: + - main + paths-ignore: + - "docs/**" + - "*.md" + push: + branches: + - main + paths-ignore: + - "docs/**" + - "*.md" + - Dockerfile + +concurrency: + group: ${{ github.event.number || github.run_id }} + cancel-in-progress: true + +jobs: + Tests: + env: + PYTHONDEVMODE: 1 + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + python-version: ["3.9", "3.10", "3.11", "3.12"] + os: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + + - name: Set Variables + id: set_variables + shell: bash + run: | + echo "PY=$(python -c 'import hashlib, sys;print(hashlib.sha256(sys.version.encode()+sys.executable.encode()).hexdigest())')" >> $GITHUB_OUTPUT + echo "PIP_CACHE=$(pip cache dir)" >> $GITHUB_OUTPUT + + - name: Cache PIP + uses: actions/cache@v3 + with: + path: ${{ steps.set_variables.outputs.PIP_CACHE }} + key: ${{ runner.os }}-pip-${{ steps.set_variables.outputs.PY }} + + - name: Cache venv + uses: actions/cache@v3 + with: + path: .venv + key: venv-${{ runner.os }}-${{ matrix.arch }}-${{ matrix.python-version }}-${{ hashFiles('pdm.lock') }} + restore-keys: | + venv-${{ runner.os }}-${{ matrix.arch }}-${{ matrix.python-version }}- + + - name: Run Tests + run: pdm run pytest --cov=src --cov-report=xml tests + + - name: Upload coverage to Codecov + uses: codecov/codecov-action@v3 + with: + token: ${{ secrets.CODECOV_TOKEN }} + file: ./coverage.xml + flags: unittests