skill+docs: structured-results reference; mark roadmap Goals 2/4 ship… #81
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: test | |
| on: | |
| push: | |
| branches: [main] | |
| pull_request: | |
| branches: [main] | |
| # Cancel an older run on the same branch when a new commit lands. | |
| concurrency: | |
| group: test-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| test: | |
| name: pytest (Python ${{ matrix.python-version }}) | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| python-version: ["3.10", "3.11", "3.12", "3.13"] | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - name: Set up Python ${{ matrix.python-version }} | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| cache: pip | |
| - name: Install package + dev/mcp/kernel extras | |
| run: | | |
| python -m pip install --upgrade pip | |
| pip install -e ".[dev,mcp,kernel]" | |
| - name: Run no-Stata tests | |
| # CI runners don't have Stata installed. Skip the stata_required | |
| # marker explicitly so we don't pay the per-test skip cost on every | |
| # integration test, and so failures remain easy to read. Run the | |
| # full suite locally with plain `pytest`. | |
| run: pytest -v -m "not stata_required" | |
| - name: Verify release version literals are aligned | |
| run: python scripts/check_versions.py | |
| - name: Verify JSON Schema artifact is in sync | |
| run: python scripts/export_schema.py --check | |
| lint: | |
| name: ruff + mypy | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - uses: actions/setup-python@v6 | |
| with: | |
| python-version: "3.12" | |
| cache: pip | |
| - name: Install package + dev extras | |
| run: | | |
| python -m pip install --upgrade pip | |
| pip install -e ".[dev,mcp,kernel]" | |
| - name: ruff check | |
| run: ruff check stata_code tests scripts | |
| - name: mypy core | |
| run: mypy stata_code/core | |
| - name: mypy MCP + kernel frontends | |
| # Frontends are checked with their optional deps installed so the | |
| # `Server`, `Tool`, `Kernel` symbols are resolvable. Splitting them | |
| # into a separate step makes it easy to see which side broke when | |
| # CI fails. | |
| run: mypy stata_code/mcp stata_code/kernel | |
| - name: check GitHub Actions pins | |
| run: python scripts/check_github_actions.py | |
| vscode: | |
| name: VS Code extension | |
| runs-on: ubuntu-latest | |
| defaults: | |
| run: | |
| working-directory: vscode | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - uses: actions/setup-node@v6 | |
| with: | |
| node-version: "24" | |
| cache: npm | |
| cache-dependency-path: vscode/package-lock.json | |
| - name: Install dependencies | |
| run: npm ci | |
| - name: Compile and run tests | |
| run: npm test | |
| - name: Package VSIX smoke test | |
| run: npm run package:vsix -- --out /tmp/stata-code-vscode-ci.vsix | |
| build: | |
| name: build wheel | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - uses: actions/setup-python@v6 | |
| with: | |
| python-version: "3.12" | |
| cache: pip | |
| - name: Build sdist + wheel | |
| run: | | |
| python -m pip install --upgrade pip build twine | |
| python -m build | |
| - name: twine check (catches PyPI metadata breakage on every PR) | |
| run: python -m twine check dist/* | |
| - name: Upload artifacts | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: dist | |
| path: dist/* |