diff --git a/.github/workflows/python-client.yml b/.github/workflows/python-client.yml new file mode 100644 index 0000000000..cb730afc51 --- /dev/null +++ b/.github/workflows/python-client.yml @@ -0,0 +1,84 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# + +# This workflow uses actions that are not certified by GitHub. +# They are provided by a third-party and are governed by +# separate terms of service, privacy policy, and support +# documentation. +# This workflow will build a Python project with Poetry and cache/restore any dependencies to improve the workflow execution time +# For more information see: https://docs.github.com/en/actions/use-cases-and-examples/building-and-testing/building-and-testing-python + +name: Python CI with Poetry + +on: + push: + branches: [ "main" ] + paths: + - 'client/python/**' + pull_request: + branches: [ "main" ] + paths: + - 'client/python/**' + +jobs: + build: + + runs-on: ubuntu-latest + strategy: + matrix: + python-version: ["3.9", "3.10", "3.11"] + + steps: + - name: Checkout Polaris project + uses: actions/checkout@v4 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + + - name: Cache Poetry + id: cache-poetry + uses: actions/cache@v4 + with: + path: ~/.cache/pypoetry + key: ${{ runner.os }}-poetry-${{ hashFiles('client/python/poetry.lock') }} + restore-keys: | + ${{ runner.os }}-poetry- + + - name: Install Poetry + if: steps.cache-poetry.outputs.cache-hit != 'true' + run: | + curl -sSL https://install.python-poetry.org | python3 - --version 1.8.5 + export PATH="$HOME/.local/bin:$PATH" + + - name: Install dependencies + working-directory: client/python + run: poetry install + + - name: Lint with flake8 + working-directory: client/python + run: | + poetry run flake8 --select=E9,F63,F7,F82 --max-line-length=127 --statistics + + - name: Test with pytest + working-directory: client/python + run: | + export SCRIPT_DIR="non-existing-mock-directory" + poetry run pytest