name: Python CI on: push: branches: [ main, master, develop ] pull_request: branches: [ main, master, develop ] jobs: test: runs-on: self-hosted steps: - name: Checkout code run: | # Manual checkout since we're on a host runner without Node.js if [ -d ".git" ]; then git pull origin ${{ github.ref_name }} else git clone ${{ github.server_url }}/${{ github.repository }} . git checkout ${{ github.sha }} fi - name: Set up Python run: | # Check if Python is available python3 --version || python --version # Create a virtual environment for isolation python3 -m venv venv || python -m venv venv source venv/bin/activate echo "VIRTUAL_ENV=$VIRTUAL_ENV" >> $GITHUB_ENV echo "$VIRTUAL_ENV/bin" >> $GITHUB_PATH - name: Install dependencies run: | source venv/bin/activate python -m pip install --upgrade pip # Install package in development mode pip install -e . # Install test dependencies if they exist if [ -f requirements-dev.txt ]; then pip install -r requirements-dev.txt; fi if [ -f requirements/test.txt ]; then pip install -r requirements/test.txt; fi # Install common test packages pip install pytest pytest-cov flake8 - name: Lint with flake8 run: | source venv/bin/activate # Stop the build if there are Python syntax errors or undefined names flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics # Exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics - name: Run tests with pytest run: | source venv/bin/activate # Run tests with coverage python -m pytest tests/ -v --cov=pyWebLayout --cov-report=term-missing - name: Test package installation run: | source venv/bin/activate # Test that the package can be imported python -c "import pyWebLayout; print('Package imported successfully')"