name: Pytest on: [pull_request] # https://docs.github.com/en/actions/using-jobs/assigning-permissions-to-jobs # Required by MishaKav/pytest-coverage-comment permissions: checks: write pull-requests: write jobs: test: runs-on: ubuntu-latest steps: - name: Check out repository uses: actions/checkout@v4 - name: Set up python id: setup-python uses: actions/setup-python@v5 with: python-version: "3.12.7" - name: Install Poetry uses: snok/install-poetry@v1 with: version: 1.8.4 virtualenvs-create: true virtualenvs-in-project: true - name: Load cached venv id: cached-pip-wheels uses: actions/cache@v4 with: path: ~/.cache key: venv-${{ steps.setup-python.outputs.python-version }}-${{ hashFiles('**/poetry.lock') }} - name: Install dependencies run: cd backend && poetry install --no-interaction --no-root # Disable for now, remove if ultimately not needed. # - name: Install library # run: cd backend && poetry install --no-interaction - name: Acquire Database URL from Railway env: RAILWAY_TOKEN: ${{ secrets.RAILWAY_TOKEN }} SERVICE_ID: Postgres ENVIRONMENT_ID: development run: | bash <(curl -fsSL cli.new) --verbose --yes DATABASE_URL=$(railway variables --service $SERVICE_ID --environment $ENVIRONMENT_ID --json | jq -cMr .DATABASE_PUBLIC_URL) echo "::add-mask::$DATABASE_URL" echo "DATABASE_URL=$DATABASE_URL" >> "$GITHUB_ENV" - name: Pytest env: LOG_LEVEL: DEBUG LOG_JSON_FORMAT: false run: | cd backend set -o pipefail # otherwise 'tee' will eat the exit code poetry run pytest --color=yes --cov=linkpulse --cov-report=term-missing:skip-covered --junitxml=pytest.xml | tee pytest-coverage.txt # pytest-coverage-comment won't error if the files are missing if [ ! -f backend/pytest-coverage.txt ] || [ ! -f backend/pytest.xml ]; then echo "::error::Coverage files not found" exit 1 fi - name: Pytest coverage comment id: coverageComment if: steps.check-coverage-files.outputs.success == 'true' uses: MishaKav/pytest-coverage-comment@main with: pytest-coverage-path: backend/pytest-coverage.txt junitxml-path: backend/pytest.xml - name: Check the output coverage run: | echo "Coverage Percentage - ${{ steps.coverageComment.outputs.coverage }}" echo "Coverage Color - ${{ steps.coverageComment.outputs.color }}" echo "Coverage Html - ${{ steps.coverageComment.outputs.coverageHtml }}" echo "Summary Report - ${{ steps.coverageComment.outputs.summaryReport }}" echo "Coverage Warnings - ${{ steps.coverageComment.outputs.warnings }}" echo "Coverage Errors - ${{ steps.coverageComment.outputs.errors }}" echo "Coverage Failures - ${{ steps.coverageComment.outputs.failures }}" echo "Coverage Skipped - ${{ steps.coverageComment.outputs.skipped }}" echo "Coverage Tests - ${{ steps.coverageComment.outputs.tests }}" echo "Coverage Time - ${{ steps.coverageComment.outputs.time }}" echo "Not Success Test Info - ${{ steps.coverageComment.outputs.notSuccessTestInfo }}"