Configurable CLI exit behavior for API errors (#211) #158
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: Unit Tests | |
| env: | |
| PYTHON_VERSION: "3.12" | |
| on: | |
| push: | |
| branches: [main] | |
| paths: | |
| - "socketsecurity/**/*.py" | |
| - "tests/unit/**/*.py" | |
| - "tests/core/**/*.py" | |
| - "pyproject.toml" | |
| - "uv.lock" | |
| - ".github/workflows/python-tests.yml" | |
| pull_request: | |
| paths: | |
| - "socketsecurity/**/*.py" | |
| - "tests/unit/**/*.py" | |
| - "tests/core/**/*.py" | |
| - "pyproject.toml" | |
| - "uv.lock" | |
| - ".github/workflows/python-tests.yml" | |
| workflow_dispatch: | |
| permissions: | |
| contents: read | |
| concurrency: | |
| group: python-tests-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| python-tests: | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 20 | |
| steps: | |
| - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 | |
| with: | |
| fetch-depth: 1 | |
| persist-credentials: false | |
| - name: π setup python | |
| uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3 | |
| with: | |
| python-version: ${{ env.PYTHON_VERSION }} | |
| - name: π οΈ install deps | |
| run: | | |
| python -m pip install --upgrade pip | |
| pip install uv | |
| uv sync --extra test | |
| - name: π verify uv.lock is in sync with pyproject.toml | |
| run: uv lock --locked | |
| - name: π§ͺ run tests | |
| run: uv run pytest -q tests/unit/ tests/core/ | |
| - name: π¨ import smoke (catches API-removal breaks from upgraded deps) | |
| run: | | |
| uv run python -c " | |
| from socketsecurity.socketcli import cli | |
| from socketsecurity.core import Core | |
| from socketsecurity.core.exceptions import APIFailure, APIResourceNotFound | |
| from socketsecurity.core.git_interface import Git | |
| from socketsecurity.config import CliConfig | |
| print('import smoke OK') | |
| " | |
| - name: π‘οΈ pip-audit (known CVEs in the locked deps) | |
| run: | | |
| uv export --no-hashes --no-emit-project --format requirements-txt > /tmp/req-audit.txt | |
| uvx pip-audit --strict --progress-spinner off --disable-pip --no-deps -r /tmp/req-audit.txt | |
| unsupported-python-install: | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 10 | |
| steps: | |
| - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 | |
| with: | |
| fetch-depth: 1 | |
| persist-credentials: false | |
| - name: π setup python | |
| uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3 | |
| with: | |
| python-version: "3.10" | |
| - name: π« verify install is rejected on unsupported python | |
| run: | | |
| python -m pip install --upgrade pip | |
| if pip install .; then | |
| echo "Expected pip install . to fail on Python 3.10" | |
| exit 1 | |
| fi |