From 97e165274a030ec824611614b1d453106f604f4d Mon Sep 17 00:00:00 2001 From: Raphael Krupinski <10319569-mattesilver@users.noreply.gitlab.com> Date: Fri, 2 Feb 2024 16:05:38 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=91=B7=20Add=20pytest=20GH=20workflow.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/test.yaml | 86 +++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 .github/workflows/test.yaml diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml new file mode 100644 index 0000000..b442767 --- /dev/null +++ b/.github/workflows/test.yaml @@ -0,0 +1,86 @@ +name: Test + +on: +- push + +concurrency: + group: tests-${{ github.head_ref || github.ref }} + cancel-in-progress: ${{ github.event_name == 'pull_request' }} + +jobs: + tests: + name: ${{ matrix.os }} / ${{ matrix.python-version }} + runs-on: ${{ matrix.image }} + strategy: + matrix: + os: + - Ubuntu + - macOS + - Windows + python-version: + - "3.8" + - "3.9" + - "3.10" + - "3.11" + - "3.12" + include: + - os: Ubuntu + image: ubuntu-latest + - os: Windows + image: windows-latest + - os: macOS + image: macos-latest + fail-fast: false + defaults: + run: + shell: bash + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + + - name: Bootstrap poetry + run: | + curl -sL https://install.python-poetry.org | python - -y + + - name: Update PATH + if: ${{ matrix.os != 'Windows' }} + run: echo "$HOME/.local/bin" >> $GITHUB_PATH + + - name: Update Path for Windows + if: ${{ matrix.os == 'Windows' }} + run: echo "$APPDATA\Python\Scripts" >> $GITHUB_PATH + + - name: Configure poetry + run: | + poetry config virtualenvs.in-project true + + - name: Set up cache + uses: actions/cache@v3 + id: cache + with: + path: .venv + key: venv-${{ runner.os }}-${{ steps.full-python-version.outputs.version }}-${{ hashFiles('**/poetry.lock') }} + + - name: Ensure cache is healthy + if: steps.cache.outputs.cache-hit == 'true' + run: | + # `timeout` is not available on macOS, so we define a custom function. + [ "$(command -v timeout)" ] || function timeout() { perl -e 'alarm shift; exec @ARGV' "$@"; } + + # Using `timeout` is a safeguard against the Poetry command hanging for some reason. + timeout 10s poetry run pip --version || rm -rf .venv + + - name: Check lock file + run: poetry lock --check + + - name: Install dependencies + run: poetry install --all-extras --with=dev + + - name: Run pytest + run: poetry run pytest -s