name: Check library on: workflow_dispatch: push: branches: - main - dev jobs: test: name: Build and test on Python ${{ matrix.python-version }} runs-on: ubuntu-latest strategy: matrix: python-version: ["3.8.12", "3.9.12", "3.10.4"] steps: - name: Checkout uses: actions/checkout@v3 - 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 pip install . - name: Check code and formatting run: scripts/check-python.sh . - name: Run tests run: python3 -m pytest --cov=. --cov-report=xml --junit-xml pytest.xml --asyncio-mode=strict || true - name: Upload results if: always() uses: actions/upload-artifact@v2 with: name: Unit test coverage (Python ${{ matrix.python-version }}) path: "*.xml" sonar: name: Analyse Python project with SonarQube needs: test runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v3 with: fetch-depth: 0 - name: Install dependencies run: | python -m pip install --upgrade pip pip install . - name: Download test results uses: actions/download-artifact@v2 with: path: artifacts - uses: sonarsource/sonarqube-scan-action@master env: SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }} with: args: > -Dsonar.projectKey=great-ai -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