Update README.md #1
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: CI/CD Pipeline | |
| on: | |
| push: | |
| branches: [ main, dev ] | |
| pull_request: | |
| branches: [ main, dev ] | |
| jobs: | |
| pip-install-smoke: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.11' | |
| cache: 'pip' | |
| - name: Install package from source (pip install .) | |
| run: | | |
| python -m pip install --upgrade pip build | |
| pip install . | |
| - name: Verify GUI imports with declared dependencies only | |
| env: | |
| QT_QPA_PLATFORM: offscreen | |
| run: | | |
| python -c "from app.gui.main import MainWindow; print('MainWindow import OK:', MainWindow)" | |
| test: | |
| needs: pip-install-smoke | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| matrix: | |
| os: [ubuntu-latest, windows-latest, macos-latest] | |
| python-version: ['3.10', '3.11', '3.12'] | |
| exclude: | |
| - os: macos-latest | |
| python-version: '3.12' | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Set up Python ${{ matrix.python-version }} | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| cache: 'pip' | |
| - name: Install dependencies | |
| run: | | |
| python -m pip install --upgrade pip | |
| pip install -r requirements.txt | |
| pip install -r requirements-dev.txt | |
| - name: Compile all application modules | |
| run: python -m compileall -q app | |
| - name: Verify GUI modules import | |
| if: matrix.os == 'ubuntu-latest' && matrix.python-version == '3.11' | |
| env: | |
| QT_QPA_PLATFORM: offscreen | |
| run: python -c "from app.gui.widgets.telegram_selector import TelegramSelectorDialog" | |
| - name: Lint with flake8 | |
| continue-on-error: true | |
| run: | | |
| flake8 app/ --count --select=E9,F63,F7,F82 --show-source --statistics || true | |
| flake8 app/ --count --exit-zero --max-complexity=10 --max-line-length=100 --statistics || true | |
| - name: Check code formatting with black | |
| continue-on-error: true | |
| run: | | |
| black --check app/ || true | |
| - name: Check import sorting with isort | |
| continue-on-error: true | |
| run: | | |
| isort --check-only app/ || true | |
| - name: Type check with mypy | |
| continue-on-error: true | |
| run: | | |
| mypy app/ --ignore-missing-imports || true | |
| - name: Test with pytest | |
| run: | | |
| pytest tests/ --cov=app --cov-report=xml --cov-report=term-missing --junitxml=junit.xml -v || echo "Some tests may have failed" | |
| env: | |
| QT_QPA_PLATFORM: offscreen | |
| continue-on-error: true | |
| - name: Upload coverage to Codecov | |
| if: matrix.os == 'ubuntu-latest' && matrix.python-version == '3.11' | |
| uses: codecov/codecov-action@v4 | |
| with: | |
| file: ./coverage.xml | |
| flags: unittests | |
| name: codecov-umbrella | |
| fail_ci_if_error: false | |
| build: | |
| needs: test | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| matrix: | |
| os: [ubuntu-latest, windows-latest, macos-latest] | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.11' | |
| cache: 'pip' | |
| - name: Install build dependencies | |
| run: | | |
| python -m pip install --upgrade pip | |
| pip install build wheel twine | |
| - name: Build package | |
| run: | | |
| python -m build | |
| - name: Check package | |
| run: | | |
| twine check dist/* | |
| - name: Upload build artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: dist-${{ matrix.os }} | |
| path: dist/ | |
| retention-days: 7 |