A verb for browser_watch #976
Workflow file for this run
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: tests | |
| on: | |
| push: | |
| branches: [main] | |
| pull_request: | |
| permissions: | |
| contents: read | |
| jobs: | |
| # This repository is public and everything in it is English by rule. The gate | |
| # is a COPY and not a reference to the one in the sibling packages, on purpose: | |
| # it scans the tree it is run from, and running a sibling's copy from here | |
| # silently scans the wrong repository and reports clean. That happened once | |
| # already, which is why each package carries its own. | |
| english: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-python@v5 | |
| with: | |
| python-version: "3.12" | |
| - name: the repository is English | |
| run: | | |
| python scripts/check_english_only.py --selftest | |
| python scripts/check_english_only.py | |
| test: | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: [ubuntu-latest, windows-latest] | |
| python-version: ["3.11", "3.12", "3.13"] | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-python@v5 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| - name: install and test | |
| # The default selection excludes `ui`, which drives a real browser: those | |
| # need an engine download and a machine doing nothing else, and a runner | |
| # is neither. They are run by hand, serially, before a release. | |
| run: | | |
| python -m pip install --upgrade pip | |
| pip install -e ".[test]" | |
| python -m pytest -q | |
| # This package is published, so the thing that must work is the WHEEL, not the | |
| # checkout. An editable install can pass every test while the built artifact is | |
| # missing a module: the tests import from src/ either way, and only a clean | |
| # install from the wheel can tell the difference. | |
| build: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-python@v5 | |
| with: | |
| python-version: "3.12" | |
| - name: the wheel builds, installs clean, and answers | |
| run: | | |
| python -m pip install --upgrade pip | |
| pip install build | |
| python -m build --wheel | |
| python -m venv /tmp/clean | |
| /tmp/clean/bin/pip install dist/*.whl | |
| /tmp/clean/bin/aihawk --help | |
| /tmp/clean/bin/python -c "import aihawk.web, aihawk.brain, aihawk.link, aihawk.cli" | |
| # 2026-09-04: aihawk 0.4.0 went to the index, then main gained two more | |
| # changes while pyproject still said 0.4.0. A release from there would have | |
| # published NOTHING and reported success, because publish.yml treats a version | |
| # already on the index as a deliberate no-op - which is right for a re-pushed | |
| # tag and indistinguishable from somebody forgetting to bump. | |
| # | |
| # Pull requests only: on main straight after a release the version IS the | |
| # published one until somebody bumps, and a gate that is red at rest is a gate | |
| # people learn to skip. The job sets the variable itself, so it cannot silently | |
| # skip the way a local run does. | |
| version: | |
| if: github.event_name == 'pull_request' | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| # The gate diffs the tree against the tag of the published | |
| # version; a shallow clone has no tags and cannot tell. | |
| fetch-depth: 0 | |
| - uses: actions/setup-python@v5 | |
| with: | |
| python-version: "3.12" | |
| - name: the version this change proposes is still free | |
| env: | |
| AIHAWK_CHECK_VERSION: "1" | |
| run: | | |
| python -m pip install --upgrade pip | |
| pip install pytest | |
| python -m pytest -q tests/test_version_is_not_taken.py |