105 lines
3.1 KiB
YAML
105 lines
3.1 KiB
YAML
name: Analyse Python project
|
|
|
|
on:
|
|
workflow_call:
|
|
inputs:
|
|
project_name:
|
|
required: true
|
|
type: string
|
|
path_to_project:
|
|
required: true
|
|
type: string
|
|
secrets:
|
|
sonar_token:
|
|
required: true
|
|
sonar_host:
|
|
required: true
|
|
|
|
jobs:
|
|
test:
|
|
name: Build and test on Python ${{ matrix.python-version }}
|
|
runs-on: ubuntu-latest
|
|
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
python-version: ["3.8.12", "3.9.12", "3.10.4"]
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v2
|
|
|
|
- name: Setup Python ${{ matrix.python-version }}
|
|
uses: actions/setup-python@v2
|
|
with:
|
|
python-version: ${{ matrix.python-version }}
|
|
|
|
- name: Install dependencies
|
|
run: |
|
|
python3 -m pip install --upgrade pip setuptools pytest pytest-cov pytest-subtests pytest-asyncio
|
|
cd ${{ inputs.path_to_project }}
|
|
(pip install --editable .) || true
|
|
(test -f requirements.txt && pip install -r requirements.txt --upgrade) || true
|
|
(test -f dev-requirements.txt && pip install -r dev-requirements.txt --upgrade) || true
|
|
|
|
- name: Run tests
|
|
run: python3 -m pytest --cov=. --cov-report=xml --junit-xml pytest.xml --asyncio-mode=strict || true
|
|
working-directory: ${{ inputs.path_to_project }}
|
|
|
|
- name: Upload results
|
|
if: always()
|
|
uses: actions/upload-artifact@v2
|
|
with:
|
|
name: Unit test coverage (Python ${{ matrix.python-version }})
|
|
path: ${{ inputs.path_to_project }}/*.xml
|
|
|
|
sonar:
|
|
name: Analyse Python project with SonarQube
|
|
needs: test
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v2
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
- name: Install dependencies
|
|
run: |
|
|
python -m pip install --upgrade pip
|
|
pip install -r requirements.txt --upgrade
|
|
working-directory: ${{ inputs.path_to_project }}
|
|
|
|
- name: Download test results
|
|
uses: actions/download-artifact@v2
|
|
with:
|
|
path: ${{ inputs.path_to_project }}/artifacts
|
|
|
|
- uses: sonarsource/sonarqube-scan-action@master
|
|
env:
|
|
SONAR_TOKEN: ${{ secrets.sonar_token }}
|
|
SONAR_HOST_URL: ${{ secrets.sonar_host }}
|
|
with:
|
|
projectBaseDir: ${{ inputs.path_to_project }}
|
|
args: >
|
|
-Dsonar.projectKey=${{ inputs.project_name }}
|
|
-Dsonar.login=${{ secrets.sonar_token }}
|
|
-Dsonar.verbose=true
|
|
-Dsonar.python.coverage.reportPaths=artifacts/*/coverage.xml
|
|
-Dsonar.coverage.exclusions=**/external/**/*
|
|
-Dsonar.exclusions=**/external/**/*,artifacts/**/*
|
|
|
|
publish-test-results:
|
|
name: Publish unit test results
|
|
needs: test
|
|
runs-on: ubuntu-latest
|
|
if: always()
|
|
steps:
|
|
- name: Download artifacts
|
|
uses: actions/download-artifact@v2
|
|
with:
|
|
path: artifacts
|
|
|
|
- name: Publish results
|
|
uses: EnricoMi/publish-unit-test-result-action@v1
|
|
with:
|
|
files: artifacts/*/pytest.xml
|