Skip to content

Add CI workflow for dependency failure control #5

Add CI workflow for dependency failure control

Add CI workflow for dependency failure control #5

Workflow file for this run

name: Realistic Python Deps Catastrophe
on:
push:
branches: [ main, master ]
pull_request:
branches: [ main, master ]
workflow_dispatch: # ручной запуск
jobs:
install-deps:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ['3.9', '3.10', '3.11']
steps:
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Cache pip
uses: actions/cache@v4
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('requirements.txt') }}
restore-keys: |
${{ runner.os }}-pip-
- name: Install system dependencies
run: |
sudo apt-get update
sudo apt-get install -y \
build-essential \
libssl-dev \
libffi-dev \
python3-dev
- name: Create realistic broken project
run: |
# Создаём проблемный requirements.txt
cat > requirements.txt << 'EOF'
# Core dependencies - но с конфликтами!
numpy==1.24.0
pandas==2.0.0
scipy==1.10.0
# Этот пакет требует numpy<1.23, но у нас 1.24.0
tensorflow==2.13.0
# Этого пакета вообще не существует
ml-ai-data-science-pro==2024.1
# Версия не существует
transformers==999.999.999
# Зависимость с git+https (часто ломается)
git+https://github.com/psf/black.git@main
# Пакет, который требует старый Python (<3.8)
legacy-library==0.1.0
# Пакет с приватного репозитория (no auth)
git+https://github.com/mycompany/private-package.git
# Пакет, который несовместим с этой ОС
pywin32==305
# Альфа-версия с багами
torch==2.0.0alpha
# Конфликтующие транспорты
requests[socks]==2.31.0
PySocks==1.7.1
EOF
# Создаём setup.py с проблемами
cat > setup.py << 'EOF'
from setuptools import setup, find_packages
setup(
name="realistic-broken-project",
version="0.1.0",
packages=find_packages(),
install_requires=[
"numpy==1.24.0",
"pandas==2.0.0",
"tensorflow==2.13.0",
"this-does-not-exist>=1.0.0", # Несуществующий пакет
"scikit-learn@git+https://github.com/scikit-learn/scikit-learn.git@broken-branch", # Ветка не существует
],
extras_require={
"dev": [
"pytest>=7.0.0",
"black==23.0.0",
"flake8", # без версии - может сломаться
],
"gpu": [
"torch==2.0.0+cu118", # Неправильный формат для pip
]
}
)
EOF
# Создаём pyproject.toml с конфликтами
cat > pyproject.toml << 'EOF'
[build-system]
requires = [
"setuptools>=999.999.999", # Несуществующая версия
"wheel>=0.40.0",
"old-custom-build-tool==0.0.1", # Архивный пакет
]
build-backend = "setuptools.build_meta"
[project]
name = "realistic-broken-project"
version = "0.1.0"
dependencies = [
"numpy==1.24.0; python_version<'3.10'", # Маркер сломается на 3.11
"pandas==2.0.0; platform_system=='Windows'", # Мы на Linux!
]
EOF
- name: Upgrade pip
run: |
python -m pip install --upgrade pip==23.0 # Старая версия pip
pip --version
- name: Try to install dependencies (THIS WILL FAIL SPECTACULARLY)
id: pip_install
continue-on-error: true # Ловим ошибку для отладки
run: |
pip install -r requirements.txt 2>&1 | tee pip_errors.log
- name: Install with pipenv (another failure mode)
if: steps.pip_install.outcome == 'failure'
run: |
pip install pipenv==2023.0.0
pipenv install --skip-lock || true # Тоже упадёт, но по-другому
- name: Debug - Show pip errors
if: always()
run: |
echo "=== PIP ERROR LOG ==="
cat pip_errors.log 2>/dev/null || echo "No pip error log"
echo "=== ENVIRONMENT ==="
python --version
pip --version
pip list --outdated
echo "=== DISK SPACE ==="
df -h
echo "=== MEMORY ==="
free -h
- name: Upload failure artifacts
if: failure()
uses: actions/upload-artifact@v4
with:
name: pip-failure-logs-${{ matrix.python-version }}
path: |
pip_errors.log
requirements.txt
setup.py
pyproject.toml
~/.cache/pip/pip.log
retention-days: 7
- name: Notify about catastrophic failure
if: failure()
run: |
echo "::error::💥 Dependency installation failed catastrophically!"
echo "::warning::🔍 Check pip_errors.log for resolution hints"
echo "::notice::📦 Python ${{ matrix.python-version }} on Ubuntu"
dependency-audit:
needs: install-deps
if: always()
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Download failure artifacts
uses: actions/download-artifact@v4
with:
path: artifacts
- name: Run dependency audit
run: |
echo "::group::Dependency Conflict Analysis"
echo "🔴 Found 7 dependency conflicts:"
echo " - tensorflow 2.13.0 requires numpy<1.23, but numpy 1.24.0 is installed"
echo " - ml-ai-data-science-pro==2024.1 does not exist on PyPI"
echo " - transformers==999.999.999 version not found"
echo " - private-package.git requires authentication"
echo " - legacy-library requires Python<3.8 (current: ${{ matrix.python-version }})"
echo " - pywin32 is Windows-only"
echo " - setuptools>=999.999.999 version constraint impossible"
echo "::endgroup::"
python-version-compatibility:
needs: install-deps
if: always()
runs-on: ubuntu-latest
steps:
- name: Check Python version compatibility
run: |
echo "::warning::🐍 Python 3.11 detected - legacy-library==0.1.0 requires Python < 3.8"
echo "::notice::📊 Python 3.9 is the most compatible version for this dependency set"