feat(v0.6): content-freshness badges on every built page (#57) (#69) #15
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: CI | |
| on: | |
| push: | |
| branches: [master, main] | |
| pull_request: | |
| branches: [master, main] | |
| permissions: | |
| contents: read | |
| jobs: | |
| lint-and-test: | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| python-version: ["3.9", "3.12"] | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Python ${{ matrix.python-version }} | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| - name: Install required deps | |
| run: | | |
| python -m pip install --upgrade pip | |
| python -m pip install markdown pygments | |
| python -m pip install ruff pytest | |
| - name: Ruff lint | |
| run: | | |
| ruff check llmwiki tests || true | |
| # Don't fail the build on warnings in v0.1 | |
| - name: CLI smoke tests | |
| run: | | |
| python -m llmwiki --version | |
| python -m llmwiki adapters | |
| python -m llmwiki init | |
| - name: Build smoke test with fixtures | |
| run: | | |
| python -m llmwiki build --out ./ci-site || true | |
| test -f ./ci-site/style.css || echo "build produced no output (no fixtures yet — this is ok in v0.1)" | |
| - name: Run pytest | |
| run: | | |
| if [ -d tests ] && [ -n "$(find tests -name 'test_*.py' 2>/dev/null)" ]; then | |
| python -m pytest tests/ -q | |
| else | |
| echo "no tests yet — skipping" | |
| fi | |
| - name: Privacy grep (should return zero hits) | |
| run: | | |
| # Never commit the real username; the test fixtures use USER as placeholder | |
| if grep -rn "deepshikhasingh" --include="*.md" --include="*.py" --exclude-dir=".temp" --exclude-dir=".framework" --exclude-dir=".git" .; then | |
| echo "ERROR: real username leaked into committed files" >&2 | |
| exit 1 | |
| fi | |
| performance-budget: | |
| runs-on: ubuntu-latest | |
| needs: lint-and-test | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Python 3.12 | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: "3.12" | |
| - name: Install deps | |
| run: python -m pip install markdown pygments | |
| - name: Build against fixtures (when present) | |
| run: | | |
| python -m llmwiki init | |
| if [ -d tests/fixtures/demo ]; then | |
| # Stage demo fixtures as if they'd been produced by `llmwiki sync`. | |
| cp -a tests/fixtures/demo/. raw/sessions/ | |
| time python -m llmwiki build --out ./perf-site | |
| if [ ! -d ./perf-site ]; then | |
| echo "ERROR: build produced no output directory" >&2 | |
| exit 1 | |
| fi | |
| # Budget: build under 15 seconds, site under 50 MB | |
| SIZE=$(du -sb ./perf-site | cut -f1) | |
| MB=$((SIZE / 1024 / 1024)) | |
| echo "site size: ${MB} MB" | |
| if [ "$MB" -gt 50 ]; then | |
| echo "ERROR: site size ${MB} MB exceeds 50 MB budget" >&2 | |
| exit 1 | |
| fi | |
| else | |
| echo "no demo fixtures yet — skipping perf budget check" | |
| fi |