Readme #62
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: | |
| branches: [main] | |
| workflow_dispatch: | |
| concurrency: | |
| group: tests-${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| test: | |
| runs-on: ubuntu-latest | |
| strategy: | |
| matrix: | |
| python-version: ["3.14t"] | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v4 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| - name: Cache uv dependencies | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/.cache/uv | |
| key: uv-${{ runner.os }}-${{ hashFiles('uv.lock') }} | |
| restore-keys: | | |
| uv-${{ runner.os }}- | |
| - name: Install dependencies | |
| run: uv sync --group dev | |
| - name: Regenerate fixtures | |
| run: uv run python scripts/generate_fixtures.py --update | |
| - name: Run tests | |
| env: | |
| CI: true | |
| PYTHON_GIL: "0" | |
| run: | | |
| uv run pytest -q --tb=short | |
| - name: Run tests with coverage | |
| if: matrix.python-version == '3.14t' | |
| env: | |
| CI: true | |
| PYTHON_GIL: "0" | |
| run: | | |
| uv run pytest -q --tb=short --cov=rosettes --cov-report=xml | |
| typecheck: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v4 | |
| with: | |
| python-version: "3.14t" | |
| - name: Cache uv dependencies | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/.cache/uv | |
| key: uv-${{ runner.os }}-${{ hashFiles('uv.lock') }} | |
| restore-keys: | | |
| uv-${{ runner.os }}- | |
| - name: Install dependencies | |
| run: uv sync --group dev | |
| - name: Run ty | |
| run: | | |
| uv run ty check src/rosettes | |
| lint: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v4 | |
| with: | |
| python-version: "3.14t" | |
| - name: Cache uv dependencies | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/.cache/uv | |
| key: uv-${{ runner.os }}-${{ hashFiles('uv.lock') }} | |
| restore-keys: | | |
| uv-${{ runner.os }}- | |
| - name: Install dependencies | |
| run: uv sync --group dev | |
| - name: Run ruff check | |
| run: | | |
| uv run ruff check src/rosettes tests/ | |
| - name: Run ruff format check | |
| run: | | |
| uv run ruff format --check src/rosettes tests/ | |
| # Fixture validation | |
| fixtures: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v4 | |
| with: | |
| python-version: "3.14t" | |
| - name: Cache uv dependencies | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/.cache/uv | |
| key: uv-${{ runner.os }}-${{ hashFiles('uv.lock') }} | |
| restore-keys: | | |
| uv-${{ runner.os }}- | |
| - name: Install dependencies | |
| run: uv sync --group dev | |
| - name: Verify fixture coverage | |
| run: | | |
| # Count languages with fixtures | |
| LANG_COUNT=$(find tests/fixtures -type d -mindepth 1 -maxdepth 1 | wc -l | tr -d ' ') | |
| FIXTURE_COUNT=$(find tests/fixtures -name "*.tokens.json" | wc -l | tr -d ' ') | |
| echo "Languages with fixtures: $LANG_COUNT/55" | |
| echo "Total fixture files: $FIXTURE_COUNT" | |
| # Verify tier coverage | |
| TIER1_LANGS="java cpp c ruby swift kotlin" | |
| TIER1_COUNT=0 | |
| for lang in $TIER1_LANGS; do | |
| if [ -d "tests/fixtures/$lang" ]; then | |
| count=$(find "tests/fixtures/$lang" -name "*.tokens.json" | wc -l | tr -d ' ') | |
| if [ "$count" -ge 5 ]; then | |
| TIER1_COUNT=$((TIER1_COUNT + 1)) | |
| fi | |
| fi | |
| done | |
| echo "Tier 1 coverage: $TIER1_COUNT/6 languages with 5+ fixtures" | |
| # Verify all languages have at least 1 fixture | |
| if [ "$LANG_COUNT" -lt 55 ]; then | |
| echo "::warning::Missing fixtures for $((55 - LANG_COUNT)) languages" | |
| fi | |
| # Verify JSON syntax | |
| echo "Validating JSON syntax..." | |
| for json_file in tests/fixtures/**/*.tokens.json; do | |
| python -m json.tool "$json_file" > /dev/null || { | |
| echo "::error::Invalid JSON: $json_file" | |
| exit 1 | |
| } | |
| done | |
| - name: Regenerate fixtures | |
| run: | | |
| uv run python scripts/generate_fixtures.py --update | |
| - name: Run fixture tests | |
| env: | |
| CI: true | |
| PYTHON_GIL: "0" | |
| run: | | |
| uv run pytest tests/lexers/test_fixtures.py -v --tb=short | |
| - name: Verify fixture completeness | |
| run: | | |
| # Check that every .tokens.json has a corresponding source file | |
| for tokens_file in tests/fixtures/**/*.tokens.json; do | |
| base="${tokens_file%.tokens.json}" | |
| found=false | |
| for ext in .py .js .ts .rs .go .java .kt .swift .rb .pl .lua .scala .ex .hs .nim .zig .v .dart .gleam .yaml .json .php .sh .sql .toml .xml .html .css .md .kida .c .cpp .h .hpp .dockerfile .graphql .tf .groovy .r .jl .ini .csv .diff .makefile .nginx .proto .mojo .triton .cu .stan .pkl .cue .clj .jinja .tree .ps1 .txt; do | |
| if [ -f "${base}${ext}" ]; then | |
| found=true | |
| break | |
| fi | |
| done | |
| if [ "$found" = false ]; then | |
| echo "::warning::Missing source file for $tokens_file" | |
| fi | |
| done | |
| # Security tests (ReDoS resistance) | |
| security: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v4 | |
| with: | |
| python-version: "3.14t" | |
| - name: Cache uv dependencies | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/.cache/uv | |
| key: uv-${{ runner.os }}-${{ hashFiles('uv.lock') }} | |
| restore-keys: | | |
| uv-${{ runner.os }}- | |
| - name: Install dependencies | |
| run: uv sync --group dev | |
| - name: Run security tests (ReDoS resistance) | |
| env: | |
| CI: true | |
| PYTHON_GIL: "0" | |
| run: | | |
| uv run pytest tests/security -v --tb=short | |
| # Thread safety tests | |
| thread-safety: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v4 | |
| with: | |
| python-version: "3.14t" | |
| - name: Cache uv dependencies | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/.cache/uv | |
| key: uv-${{ runner.os }}-${{ hashFiles('uv.lock') }} | |
| restore-keys: | | |
| uv-${{ runner.os }}- | |
| - name: Install dependencies | |
| run: uv sync --group dev | |
| - name: Run thread safety tests | |
| env: | |
| CI: true | |
| PYTHON_GIL: "0" | |
| run: | | |
| uv run pytest tests/test_thread_safety.py tests/test_parallel.py -v --tb=short | |