Kılavuzlar
CI'da çalıştırma
CI'da kapı denetimi sürüm politikasını ve her çıkış kodunun ne anlama geldiğini anlatır. Bu sayfa ise bir CI işinin içinde olan kısımdır: Oloproof'un orada nasıl kurulacağı, iş çalışırken kanıtın nerede durduğu, bir sonucun tablo ayrıştırmadan nasıl okunacağı ve bir pull request'in hedeflediği dala karşı nasıl karşılaştırılacağı.
Çıkış kodu kapının kendisidir
oloproof run kapısına göre çıkar. Onu çalıştıran bir CI adımı, kapı engellediğinde başarısız olur; genellikle istenen de budur ve ek bir bağlantı gerektirmez:
| Kod | Bir CI adımı şunu yapmalı |
|---|---|
| 0 | geçmeli |
| 1 | başarısız olmalı: bir kural başarısız oldu |
| 2 | bozuk derleme olarak başarısız olmalı: yapılandırma hatalıydı ve hiçbir şey ölçülmedi |
| 3 | başarısız olmalı ya da uyarmalı: paket karar veremedi |
| 4 | başarısız olmalı ve bir kişiye yönlendirilmeli |
| 5 | bozuk derleme olarak başarısız olmalı: çalıştırma tamamlanmadı |
Ekiplerin üzerinde tartıştığı kod 3'tür. Varsayılan politika bu kodda engeller, çünkü karar veremeyecek kadar küçük bir paket, değişikliğin güvenli olduğunu göstermemiştir. Paketini büyütürken işin yeşil yanmasını isteyen bir ekip bunu çıkış kodunu yok sayarak değil, politikada belirterek yapabilir:
version: 1
block_on: [FAIL, MANUAL_REVIEW]
warn_on: [INSUFFICIENT_EVIDENCE]
rules:
- id: exact-label-floor
metric: exact_label
min: 0.70examples/support_bot/ klasörünün, kendi politikası altında 3 ile engelleyen aynı kayıtlı çalıştırması, bu politika altında:
oloproof gate RUN_ID --policy advisory.yamlexact-label-floor: INSUFFICIENT_EVIDENCE (interval_overlaps_threshold)
about 1614 more cases would decide it, if the observed rate holds (1632 in total)0 ile çıkar. Karar değişmedi. Yalnızca sürüm eylemi değişti ve incelemeden geçen bir dosya öyle söylediği için değişti.
Sonucu veri olarak okumak
--json, standart çıktıya satır başına bir JSON olayı, standart hataya ise insan için tabloları yazar; böylece CI günlüğü tabloları tutar, bir betik de olayları okur. run.ndjson dosyasına kaydedildiğinde çalıştırmanın kimliği her satırdadır ve son satır çıkış kodunu taşır:
jq -r 'select(.type == "run_started") | .run_id' run.ndjson
jq -c 'select(.type == "run_finished")' run.ndjsonrun_01M3C3WS0SBTFAG55M7ECM1EZ4
{"run_id":"run_01M3C3WS0SBTFAG55M7ECM1EZ4","timestamp":"2026-09-25T11:06:03.646415Z","type":"run_finished","status":"DECIDED","completeness":"COMPLETE","exit_code":3}İlerleme ve eşzamanlılık her olay türünü listeler.
Kanıtın durduğu yer
Bir çalıştırma, çalıştırıldığı oloproof.yaml dosyasının yanındaki .oloproof/store.sqlite içinde saklanır ve oloproof init, .oloproof/ klasörünü .gitignore dosyasına ekler. Bir CI işi boş bir depoyla başlar; bu yüzden her iş her vakayı yeniden yürütür ve bir işten hiçbir şey sonrakine görünmez.
Bu en çok karşılaştırma için önemlidir, çünkü karşılaştırma iki çalıştırmanın da tek bir depoda olmasını gerektirir. Bir projenin iki ayrı checkout'u her biri kendi deposunu alır; dolayısıyla birinden yapılan temel çalıştırma diğerinden bulunamaz:
Configuration error: unknown run 'run_01M3C3XSX9KY5T8VFZXA1CVBES'OLOPROOF_HOME, oloproof.yaml dosyası nerede olursa olsun her komutu tek bir depoya yönlendirir. Gösterdiği dizin .oloproof/store.sqlite dosyasını barındırır.
Oloproof'u bir işte kurmak
Oloproof bir paket dizinine yayımlanmamıştır; bu yüzden onu adıyla getiren bir pip install satırı yoktur. Bir iş onu, bir geliştiricinin yaptığı gibi, Oloproof deposunun bir checkout'undan kurar: repository: alanı ekibinizin o depo kopyası nerede duruyorsa onu gösteren actions/checkout ve depo özelse onu okuyabilen bir token:. Deponun kökü paketi derler ve paket oloproof komutunu sağlar.
Bir pull request'i tabanıyla karşılaştırmak
Taban dalı ve pull request'i yan yana checkout edin, ikisini de aynı depoya çalıştırın ve karşılaştırın:
name: oloproof
on: pull_request
jobs:
evaluate:
runs-on: ubuntu-latest
env:
OLOPROOF_HOME: ${{ github.workspace }}/evidence
steps:
- uses: actions/checkout@v4
with:
path: pr
- uses: actions/checkout@v4
with:
ref: ${{ github.base_ref }}
path: main
- uses: actions/checkout@v4
with:
repository: YOUR_ORG/Oloproof
token: ${{ secrets.OLOPROOF_REPO_TOKEN }}
path: oloproof-src
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- run: python -m pip install ./oloproof-src
- run: mkdir -p "$OLOPROOF_HOME"
- run: oloproof run --config main/oloproof.yaml --json > base.ndjson || true
- run: oloproof run --config pr/oloproof.yaml --json > cand.ndjson || true
- name: compare
run: |
candidate=$(jq -r 'select(.type == "run_started") | .run_id' cand.ndjson)
baseline=$(jq -r 'select(.type == "run_started") | .run_id' base.ndjson)
oloproof compare "$candidate" "$baseline" --config pr/oloproof.yaml --policy pr/compare.yamlYOUR_ORG/Oloproof ve OLOPROOF_REPO_TOKEN, deponun sizdeki kopyası ve onu okuyabilen bir gizli değer için yer tutuculardır. İki çalıştırma || true taşır, çünkü burada soru onların kendi kapıları değil; karşılaştırmanın çıkış kodudur.
Aynı adımlar bir dizüstü bilgisayarda, iskeleti oluşturulmuş proje iki kez checkout edilmiş hâlde:
Comparison sha256:31ac104779bda1726ba55b661107cbe256fae5f1d831c79b1283a07651b58cbf of run_01M3C3XX4TM0WSZW8K81PHRGAW against run_01M3C3XW7X64B0Z0ACZV27WSW6 · 30 paired cases
exact_label: +0.0 points [-16.5, +16.5] · 30 paired · 0 missing · 0 excluded
Decisions
no-regression exact_label non-inferiority, margin 5.0 points INSUFFICIENT_EVIDENCE interval_overlaps_margin
Gate: BLOCK (exit 3)İki çalıştırma da aynı paket üzerinde olmalıdır. Bir vakayı düzenleyen bir pull request paketin özetini (digest) değiştirir ve karşılaştırma, artık aynı vaka olmayan vakaları eşleştirmek yerine reddeder:
Configuration error: runs 'run_01M3C3XXVZ1X0J2PR1ZW1WVGVZ' and 'run_01M3C3XW7X64B0Z0ACZV27WSW6' used different suites (sha256:baff4f101901d9a37cd440f99b9a70032f9488891b4f590f18a81017c26ba794 and sha256:2011286a7ec00c8c31560bb6d037b54a501a15f6251ac7c2d578d0c40e226d72); comparisons pair scenario by scenario over one suiteTamamlanmamış bir çalıştırmanın karşılaştırması, böyle bir çalıştırma üzerindeki kapıyla aynı şekilde 5 ile çıkar: karar verilecek eşleştirilmiş bir sonuç yoktur.
Sonraki adımlar
- CI'da kapı denetimi politikayı ve çıkış kodlarının hangi sırayla bildirildiğini anlatır.
- Karşılaştırma kuralları bir karşılaştırma politikasının neler isteyebileceğini anlatır.