diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f0d097f..ea2d8d8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,35 +1,40 @@ -name: CI +name: ci on: - push: - branches: [main, feat/**, fix/**, chore/**] - pull_request: - branches: [main] + push: { branches: [main] } + pull_request: { branches: [main] } + workflow_dispatch: + +permissions: + contents: read + jobs: test: runs-on: ubuntu-latest strategy: matrix: - python-version: ["3.12"] + python-version: ["3.12"] # se ajusta abajo si el proyecto permite 3.11 steps: - uses: actions/checkout@v4 - - name: Setup Python - uses: actions/setup-python@v5 + - uses: actions/setup-python@v5 + with: { python-version: ${{ matrix.python-version }} } + - uses: snok/install-poetry@v1 with: - python-version: ${{ matrix.python-version }} - - name: Install Poetry - run: | - pip install --upgrade pip - pip install poetry==2.1.4 + version: 1.8.3 + virtualenvs-create: true + virtualenvs-in-project: true + installer-parallel: true - name: Install deps run: poetry install --no-interaction - name: Lint run: | - poetry run ruff check . --fix - poetry run ruff format . - poetry run black . - - name: Test - env: - PYTHONPATH: src - run: poetry run pytest -q - - name: Smoke CLI - run: poetry run pybuglint src + poetry run ruff check . --output-format=github + poetry run black --check . + - name: Tests + env: { PYTHONPATH: src } + run: poetry run pytest -q --disable-warnings + - name: Build + run: poetry build + - name: Smoke install + CLI + run: | + python -m pip install --no-deps dist/*.whl + ( command -v pybuglint && pybuglint --help ) || python -c "import pybuglint; print('pybuglint import OK')" diff --git a/scripts/smoke.sh b/scripts/smoke.sh new file mode 100755 index 0000000..fc89e4f --- /dev/null +++ b/scripts/smoke.sh @@ -0,0 +1,44 @@ +#!/usr/bin/env bash +# Smoke tests locales para pybuglint +# No cierra la terminal; sólo devuelve códigos de salida + +set -euo pipefail + +LOG_DIR="_local_logs/\$(date +%Y%m%d-%H%M%S)" +mkdir -p "\$LOG_DIR" + +TMPDIR="\$(mktemp -d)" +trap 'rm -rf "\$TMPDIR"' EXIT + +# Archivos de prueba +cat > "\$TMPDIR/good.py" <<'PY' +def ok(a:int,b:int)->int: + return a+b +PY + +cat > "\$TMPDIR/bad.py" <<'PY' +def f(a=[]): + print(a) + try: + 1/0 + except: + pass +x=None +if x==None: + pass +list=3 +PY + +{ + echo "### poetry run pybuglint good.py" + poetry run pybuglint "\$TMPDIR/good.py" || true + echo + echo "### poetry run pybuglint bad.py" + poetry run pybuglint "\$TMPDIR/bad.py" || true +} | tee "\$LOG_DIR/smoke_poetry.txt" + +# Asserts básicos +grep -q "Sin hallazgos" "\$LOG_DIR/smoke_poetry.txt" +grep -qi "mutable" "\$LOG_DIR/smoke_poetry.txt" + +echo "✓ Smoke OK, logs en \$LOG_DIR"