Files
wehub-resource-sync a06f331eb8
CI / benchmark (push) Has been skipped
install-script / posix-syntax (push) Successful in 6m1s
CI / build-onnx (push) Failing after 6m43s
init-smoke / dry-run (push) Failing after 15m57s
security / govulncheck (push) Has been cancelled
security / trivy-fs (push) Has been cancelled
CI / test (1.26, ubuntu-latest) (push) Has been cancelled
Scorecard supply-chain security / Scorecard analysis (push) Has been cancelled
CI / test (1.26, macos-latest) (push) Has been cancelled
CI / build-windows (push) Has been cancelled
CI / lint (push) Has been cancelled
install-script / powershell-syntax (push) Has been cancelled
install-script / install (macos-14) (push) Has been cancelled
install-script / install (ubuntu-latest) (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:33:42 +08:00

110 lines
3.8 KiB
Go

package main
import (
"context"
"fmt"
"os"
"path/filepath"
"github.com/spf13/cobra"
"go.uber.org/zap"
"github.com/zzet/gortex/internal/eval/parity"
)
var (
parityCacheDir string
parityUpdate bool
parityLang string
parityEpsilon float64
)
var evalParityCmd = &cobra.Command{
Use: "parity",
Short: "Measure per-language cross-file coverage on benchmark repos and check it against the committed baseline",
Long: `Clone (and cache) the per-language benchmark corpus, index each repo, and
measure the share of symbol-bearing source files that have at least one resolved
cross-file dependent.
Default (assert) mode compares the measured coverage against the committed
baseline (internal/eval/parity/baseline.json) and exits non-zero if any language
regressed. --update prints the measured coverage as a baseline document instead;
redirect it into baseline.json and commit to capture or refresh the baseline.
gortex eval parity # assert against the committed baseline
gortex eval parity --lang go # one language only
gortex eval parity --update > internal/eval/parity/baseline.json
`,
RunE: runEvalParity,
}
func init() {
evalParityCmd.Flags().StringVar(&parityCacheDir, "cache-dir", "", "where benchmark repos are cloned/cached (default: a parity-cache dir under the OS temp dir)")
evalParityCmd.Flags().BoolVar(&parityUpdate, "update", false, "print measured coverage as a baseline JSON document instead of asserting")
evalParityCmd.Flags().StringVar(&parityLang, "lang", "", "only run the benchmark repo for this language")
evalParityCmd.Flags().Float64Var(&parityEpsilon, "epsilon", 0.005, "tolerance below baseline before a language counts as a regression")
evalCmd.AddCommand(evalParityCmd)
}
func runEvalParity(cmd *cobra.Command, args []string) error {
cacheDir := parityCacheDir
if cacheDir == "" {
cacheDir = filepath.Join(os.TempDir(), "gortex-parity-cache")
}
ctx := context.Background()
var measured []parity.LanguageCoverage
for _, repo := range parity.BenchRepos() {
if parityLang != "" && repo.Language != parityLang {
continue
}
fmt.Fprintf(cmd.ErrOrStderr(), "[gortex eval parity] %-10s %s\n", repo.Language, repo.URL)
dir, err := parity.EnsureRepo(cacheDir, repo)
if err != nil {
fmt.Fprintf(cmd.ErrOrStderr(), " clone failed: %v — skipping\n", err)
continue
}
g, cleanup, err := indexRepoForInit(ctx, dir, zap.NewNop())
if err != nil {
fmt.Fprintf(cmd.ErrOrStderr(), " index failed: %v — skipping\n", err)
continue
}
covs := parity.CoverageOf(g)
cleanup() // release the temp store before the next repo
for _, c := range covs {
if c.Language != repo.Language {
continue // a Go repo may carry a few yaml/json files; measure its own language
}
measured = append(measured, c)
fmt.Fprintf(cmd.ErrOrStderr(), " coverage %.1f%% (%d/%d files)\n", c.Coverage*100, c.CoveredFiles, c.SymbolFiles)
}
}
if parityUpdate {
out, err := parity.MarshalBaseline(measured)
if err != nil {
return err
}
fmt.Fprintln(cmd.OutOrStdout(), string(out))
return nil
}
baseline, err := parity.LoadBaseline()
if err != nil {
return err
}
if len(baseline) == 0 {
fmt.Fprintln(cmd.ErrOrStderr(), "[gortex eval parity] no committed baseline yet — run with --update and commit the output to internal/eval/parity/baseline.json")
return nil
}
regs := baseline.Check(measured, parityEpsilon)
for _, r := range regs {
fmt.Fprintf(cmd.ErrOrStderr(), "[gortex eval parity] REGRESSION %s: %.1f%% < baseline %.1f%%\n", r.Language, r.Measured*100, r.Baseline*100)
}
if len(regs) > 0 {
return fmt.Errorf("%d language(s) regressed below the parity baseline", len(regs))
}
fmt.Fprintln(cmd.ErrOrStderr(), "[gortex eval parity] all measured languages hold or beat the baseline")
return nil
}