Validácia znalostí v CI
Pre-commit hook kontroluje, čo každý commitne. CI job zachytí všetko ostatné: commity s --no-verify, stroje bez kontextu, tímy, ktoré commitujú cez jj (to nespúšťa git hooky), záznamy, ktorých paths po refaktoringu prestali niečomu zodpovedať, a záznamy, ktoré zmena nechala za sebou.
kontext ci
kontext ci [--base <rev>] [--format text|markdown] [--strict]Spustí dve kontroly:
kontext checknad všetkými záznamami: chýbajúce titulky, neznáme druhy, duplicitné ID, zlé dátumyreview_byčichecked, tajné údaje s vysokou istotou (chyby) a varovania, napríklad vzor vpaths, ktorému nezodpovedá žiadny súbor;- drift nad commitnutým rozsahom
base..HEAD: aktívne záznamy, ktorýchpathspokrývajú súbory zmenené v rozsahu, kým ich vlastný súbor sa v ňom neupravil, nevyradil ani nepotvrdil.
--base je predvolene merge base HEAD s predvolenou vetvou remote (origin/HEAD, inak origin/main, inak origin/master). V pull requeste je to miesto, kde vetva začala. Job potrebuje túto históriu: checkout s fetch-depth: 0. V plytkom klone sa base vráti na HEAD (base_source: fallback-none), rozsah je prázdny, správa to povie a --strict skončí kódom 3.
| Stav | Kedy |
|---|---|
| 1 | check našiel chyby |
| 2 | --strict a drift vypísal nejaký záznam |
| 0 | inak; bez --strict je drift len varovanie |
--format markdown zapíše správu pre súhrn jobu na GitHube alebo komentár k pull requestu: súhrn kontroly, jej zistenia a tabuľku záznamov s driftom so zmenenými súbormi a commitmi.
GitHub Actions
# .github/workflows/knowledge.yml
name: knowledge
on:
pull_request:
jobs:
kontext:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0 # drift needs the default branch's history
- name: Install kontext
run: curl -fsSL https://raw.githubusercontent.com/SemanS/kontext/main/scripts/install.sh | KONTEXT_VERSION=v0.4.0 sh
- name: Check knowledge and list drift
run: ~/.local/bin/kontext ci --base "origin/${{ github.base_ref }}" --format markdown | tee -a "$GITHUB_STEP_SUMMARY"
shell: bash # pipefail: the job fails when kontext ci doesSúhrn sa zobrazí na stránke behu. Pridaj --strict, aby drift zhodil job, keď si tím zvykne záznamy potvrdzovať: reviewer potom v tom istom pull requeste vidí každý vypísaný záznam potvrdený (jednoriadková zmena checked), upravený, nahradený alebo vyradený.
Ak chceš správu ako komentár k pull requestu, zapíš ju do súboru (kontext ci --format markdown > kontext.md) a odovzdaj ju akcii na komentovanie podľa vlastného výberu.
Iné CI systémy
Funguje akýkoľvek runner s gitom:
curl -fsSL https://raw.githubusercontent.com/SemanS/kontext/main/scripts/install.sh | KONTEXT_VERSION=v0.4.0 sh
~/.local/bin/kontext ci --base origin/mainAk chceš len validáciu bez driftu, stačí samotný kontext check (pri chybách stav 1). Štruktúrovaný výsledok dá kontext drift --base <rev> --head HEAD --json, teda výsledok entries.drift.
Čo kontroluje inštalátor
scripts/install.sh preloží latest na najnovší tag vydania, stiahne archív pre platformu a overí ho voči SHA256SUMS vydania (staršie vydania: binárku voči sha256 v manifeste). Pred inštaláciou spustí kontext --version. Každé zlyhanie zastaví skript s príčinou a nič nenainštaluje:
- sťahovanie zlyhalo (sieť, rate limit): skús znova; nič sa nebuilduje z nevydanej vetvy;
- vydanie nemá archív pre túto platformu alebo checksum, voči ktorému by ho overil;
- checksum nesedí;
- binárka tu nebeží, zvyčajne pre glibc staršiu, než proti ktorej bola zostavená (súhrn vydania vypíše glibc floor každej linuxovej binárky).
--from-source (alebo KONTEXT_FROM_SOURCE=1) namiesto toho zostaví ten istý tag cez cargo:
curl -fsSL https://raw.githubusercontent.com/SemanS/kontext/main/scripts/install.sh | KONTEXT_VERSION=v0.9.1 sh -s -- --from-sourceAko kontext kontroluje sám seba
Repozitár kontextu spúšťa brány, ktoré tento návod odporúča, v .github/workflows/ci.yml:
| Job | Čo |
|---|---|
| test | cargo test --locked na Linuxe a macOS; jj smoke test beží tam, kde je jj nainštalované |
| msrv, fmt and clippy | prečíta rust-version z Cargo.toml a na tom toolchaine spustí cargo check --locked --all-targets, cargo fmt --check a clippy -D warnings |
| clippy (latest stable) | tie isté linty na najnovšom stable; včasné varovanie, ktoré neblokuje |
| windows | cargo test --locked --no-run |
| evaluation set | cargo test --test eval; správa je súhrn jobu a artefakt |
| kontext ci on .ai | pull requesty: kontext ci nad vlastnými znalosťami projektu, s fetch-depth: 0 |
| docs build, docs en/sk parity | pull requesty: npm run docs:build bez deployu; docs/en a docs/sk majú rovnaké súbory |
| cargo deny | licencie, bany a zdroje blokujú; advisories sa len hlásia |
Akcie sú pinované na SHA commitu. Tag vydania sa musí rovnať verzii v Cargo.toml; testy bežia znova pred zostavením akejkoľvek binárky a vydanie smie zapisovať len publish job.
Pred tagovaním scripts/release-check.sh zostaví kandidáta a ukáže, čo mení pre tých, čo ho čítajú:
PEER_DIR=~/src/peer KONTEXT_PREV=~/.local/bin/kontext KONTEXT_STORES=~/src/shop:~/src/lib scripts/release-check.shS PEER_DIR spustí tri integračné suity Peeru proti kandidátovi (bez neho ich preskočí). Pre každý store v KONTEXT_STORES prečíta každý záznam cez entries.list a entries.get predchádzajúcou binárkou aj kandidátom a pri každom zázname vypíše, v čom sa líši stav, verification.kind, verification.verified, since.commits a riadené cesty, so súčtami.
Užitočné doplnky
kontext log --jsonvytvorí strojovo čitateľnú časovú os rozhodnutí, napr. pre dokumentačný web.kontext checkskenuje znalosti aj na tajné údaje; lokálne nastavsecrets.scan = "staged", ak chceš, aby hook skenoval každý stagnutý súbor.