name: Python Tests on: push: # Exclude beta and main: those branches re-trigger this workflow via # workflow_call from beta-release.yml / release.yml. Without the exclusion, # a push to beta that touches Server/** fires this workflow twice for the # same SHA, and GitHub auto-cancels the duplicate. branches-ignore: [beta, main] paths: - Server/** - tools/** - .github/workflows/python-tests.yml pull_request: branches: [main, beta] paths: - Server/** - tools/** - .github/workflows/python-tests.yml workflow_dispatch: {} workflow_call: inputs: ref: description: "Git ref to test (defaults to the triggering ref)." type: string required: false default: "" jobs: test: name: Run Python Tests runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 with: ref: ${{ inputs.ref || github.ref }} - name: Install uv uses: astral-sh/setup-uv@v4 with: version: "latest" - name: Set up Python run: uv python install 3.10 - name: Install dependencies run: | cd Server uv sync uv pip install -e ".[dev]" - name: Run tests with coverage run: | cd Server uv run pytest tests/ -v --tb=short --cov --cov-report=xml --cov-report=html --cov-report=term - name: Run local harness unit tests (hermetic, no Unity) run: | cd Server uv run python -m pytest "$GITHUB_WORKSPACE/tools/tests/" -v --tb=short - name: Upload coverage reports uses: codecov/codecov-action@v4 if: always() with: files: ./Server/coverage.xml flags: python name: python-coverage fail_ci_if_error: false - name: Upload test results uses: actions/upload-artifact@v4 if: always() with: name: pytest-results path: | Server/.pytest_cache/ Server/tests/ Server/coverage.xml Server/htmlcov/