@hasna/terminal 2.0.5 → 2.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +52 -21
- package/package.json +1 -1
- package/src/ai.ts +77 -130
- package/src/cli.tsx +51 -21
- package/src/command-validator.ts +11 -0
- package/src/context-hints.ts +291 -0
- package/src/discover.ts +238 -0
- package/src/economy.ts +53 -0
- package/src/output-processor.ts +7 -18
- package/src/output-store.ts +65 -0
- package/src/providers/base.ts +3 -1
- package/src/providers/groq.ts +108 -0
- package/src/providers/index.ts +26 -2
- package/src/providers/providers.test.ts +4 -2
- package/src/providers/xai.ts +108 -0
- package/src/sessions-db.ts +81 -0
- package/temp/rtk/.claude/agents/code-reviewer.md +221 -0
- package/temp/rtk/.claude/agents/debugger.md +519 -0
- package/temp/rtk/.claude/agents/rtk-testing-specialist.md +461 -0
- package/temp/rtk/.claude/agents/rust-rtk.md +511 -0
- package/temp/rtk/.claude/agents/technical-writer.md +355 -0
- package/temp/rtk/.claude/commands/diagnose.md +352 -0
- package/temp/rtk/.claude/commands/test-routing.md +362 -0
- package/temp/rtk/.claude/hooks/bash/pre-commit-format.sh +16 -0
- package/temp/rtk/.claude/hooks/rtk-rewrite.sh +70 -0
- package/temp/rtk/.claude/hooks/rtk-suggest.sh +152 -0
- package/temp/rtk/.claude/rules/cli-testing.md +526 -0
- package/temp/rtk/.claude/skills/issue-triage/SKILL.md +348 -0
- package/temp/rtk/.claude/skills/issue-triage/templates/issue-comment.md +134 -0
- package/temp/rtk/.claude/skills/performance.md +435 -0
- package/temp/rtk/.claude/skills/pr-triage/SKILL.md +315 -0
- package/temp/rtk/.claude/skills/pr-triage/templates/review-comment.md +71 -0
- package/temp/rtk/.claude/skills/repo-recap.md +206 -0
- package/temp/rtk/.claude/skills/rtk-tdd/SKILL.md +78 -0
- package/temp/rtk/.claude/skills/rtk-tdd/references/testing-patterns.md +124 -0
- package/temp/rtk/.claude/skills/security-guardian.md +503 -0
- package/temp/rtk/.claude/skills/ship.md +404 -0
- package/temp/rtk/.github/workflows/benchmark.yml +34 -0
- package/temp/rtk/.github/workflows/dco-check.yaml +12 -0
- package/temp/rtk/.github/workflows/release-please.yml +51 -0
- package/temp/rtk/.github/workflows/release.yml +343 -0
- package/temp/rtk/.github/workflows/security-check.yml +135 -0
- package/temp/rtk/.github/workflows/validate-docs.yml +78 -0
- package/temp/rtk/.release-please-manifest.json +3 -0
- package/temp/rtk/ARCHITECTURE.md +1491 -0
- package/temp/rtk/CHANGELOG.md +640 -0
- package/temp/rtk/CLAUDE.md +605 -0
- package/temp/rtk/CONTRIBUTING.md +199 -0
- package/temp/rtk/Cargo.lock +1668 -0
- package/temp/rtk/Cargo.toml +64 -0
- package/temp/rtk/Formula/rtk.rb +43 -0
- package/temp/rtk/INSTALL.md +390 -0
- package/temp/rtk/LICENSE +21 -0
- package/temp/rtk/README.md +386 -0
- package/temp/rtk/README_es.md +159 -0
- package/temp/rtk/README_fr.md +197 -0
- package/temp/rtk/README_ja.md +159 -0
- package/temp/rtk/README_ko.md +159 -0
- package/temp/rtk/README_zh.md +167 -0
- package/temp/rtk/ROADMAP.md +15 -0
- package/temp/rtk/SECURITY.md +217 -0
- package/temp/rtk/TEST_EXEC_TIME.md +102 -0
- package/temp/rtk/build.rs +57 -0
- package/temp/rtk/docs/AUDIT_GUIDE.md +432 -0
- package/temp/rtk/docs/FEATURES.md +1410 -0
- package/temp/rtk/docs/TROUBLESHOOTING.md +309 -0
- package/temp/rtk/docs/filter-workflow.md +102 -0
- package/temp/rtk/docs/images/gain-dashboard.jpg +0 -0
- package/temp/rtk/docs/tracking.md +583 -0
- package/temp/rtk/hooks/opencode-rtk.ts +39 -0
- package/temp/rtk/hooks/rtk-awareness.md +29 -0
- package/temp/rtk/hooks/rtk-rewrite.sh +61 -0
- package/temp/rtk/hooks/test-rtk-rewrite.sh +442 -0
- package/temp/rtk/install.sh +124 -0
- package/temp/rtk/release-please-config.json +10 -0
- package/temp/rtk/scripts/benchmark.sh +592 -0
- package/temp/rtk/scripts/check-installation.sh +162 -0
- package/temp/rtk/scripts/install-local.sh +37 -0
- package/temp/rtk/scripts/rtk-economics.sh +137 -0
- package/temp/rtk/scripts/test-all.sh +561 -0
- package/temp/rtk/scripts/test-aristote.sh +227 -0
- package/temp/rtk/scripts/test-tracking.sh +79 -0
- package/temp/rtk/scripts/update-readme-metrics.sh +32 -0
- package/temp/rtk/scripts/validate-docs.sh +73 -0
- package/temp/rtk/src/aws_cmd.rs +880 -0
- package/temp/rtk/src/binlog.rs +1645 -0
- package/temp/rtk/src/cargo_cmd.rs +1727 -0
- package/temp/rtk/src/cc_economics.rs +1157 -0
- package/temp/rtk/src/ccusage.rs +340 -0
- package/temp/rtk/src/config.rs +187 -0
- package/temp/rtk/src/container.rs +855 -0
- package/temp/rtk/src/curl_cmd.rs +134 -0
- package/temp/rtk/src/deps.rs +268 -0
- package/temp/rtk/src/diff_cmd.rs +367 -0
- package/temp/rtk/src/discover/mod.rs +274 -0
- package/temp/rtk/src/discover/provider.rs +388 -0
- package/temp/rtk/src/discover/registry.rs +2022 -0
- package/temp/rtk/src/discover/report.rs +202 -0
- package/temp/rtk/src/discover/rules.rs +667 -0
- package/temp/rtk/src/display_helpers.rs +402 -0
- package/temp/rtk/src/dotnet_cmd.rs +1771 -0
- package/temp/rtk/src/dotnet_format_report.rs +133 -0
- package/temp/rtk/src/dotnet_trx.rs +593 -0
- package/temp/rtk/src/env_cmd.rs +204 -0
- package/temp/rtk/src/filter.rs +462 -0
- package/temp/rtk/src/filters/README.md +52 -0
- package/temp/rtk/src/filters/ansible-playbook.toml +34 -0
- package/temp/rtk/src/filters/basedpyright.toml +47 -0
- package/temp/rtk/src/filters/biome.toml +45 -0
- package/temp/rtk/src/filters/brew-install.toml +37 -0
- package/temp/rtk/src/filters/composer-install.toml +40 -0
- package/temp/rtk/src/filters/df.toml +16 -0
- package/temp/rtk/src/filters/dotnet-build.toml +64 -0
- package/temp/rtk/src/filters/du.toml +16 -0
- package/temp/rtk/src/filters/fail2ban-client.toml +15 -0
- package/temp/rtk/src/filters/gcc.toml +49 -0
- package/temp/rtk/src/filters/gcloud.toml +22 -0
- package/temp/rtk/src/filters/hadolint.toml +24 -0
- package/temp/rtk/src/filters/helm.toml +29 -0
- package/temp/rtk/src/filters/iptables.toml +27 -0
- package/temp/rtk/src/filters/jj.toml +28 -0
- package/temp/rtk/src/filters/jq.toml +24 -0
- package/temp/rtk/src/filters/make.toml +41 -0
- package/temp/rtk/src/filters/markdownlint.toml +24 -0
- package/temp/rtk/src/filters/mix-compile.toml +27 -0
- package/temp/rtk/src/filters/mix-format.toml +15 -0
- package/temp/rtk/src/filters/mvn-build.toml +44 -0
- package/temp/rtk/src/filters/oxlint.toml +43 -0
- package/temp/rtk/src/filters/ping.toml +63 -0
- package/temp/rtk/src/filters/pio-run.toml +40 -0
- package/temp/rtk/src/filters/poetry-install.toml +50 -0
- package/temp/rtk/src/filters/pre-commit.toml +35 -0
- package/temp/rtk/src/filters/ps.toml +16 -0
- package/temp/rtk/src/filters/quarto-render.toml +41 -0
- package/temp/rtk/src/filters/rsync.toml +48 -0
- package/temp/rtk/src/filters/shellcheck.toml +27 -0
- package/temp/rtk/src/filters/shopify-theme.toml +29 -0
- package/temp/rtk/src/filters/skopeo.toml +45 -0
- package/temp/rtk/src/filters/sops.toml +16 -0
- package/temp/rtk/src/filters/ssh.toml +44 -0
- package/temp/rtk/src/filters/stat.toml +34 -0
- package/temp/rtk/src/filters/swift-build.toml +41 -0
- package/temp/rtk/src/filters/systemctl-status.toml +33 -0
- package/temp/rtk/src/filters/terraform-plan.toml +35 -0
- package/temp/rtk/src/filters/tofu-fmt.toml +16 -0
- package/temp/rtk/src/filters/tofu-init.toml +38 -0
- package/temp/rtk/src/filters/tofu-plan.toml +35 -0
- package/temp/rtk/src/filters/tofu-validate.toml +17 -0
- package/temp/rtk/src/filters/trunk-build.toml +39 -0
- package/temp/rtk/src/filters/ty.toml +50 -0
- package/temp/rtk/src/filters/uv-sync.toml +37 -0
- package/temp/rtk/src/filters/xcodebuild.toml +99 -0
- package/temp/rtk/src/filters/yamllint.toml +25 -0
- package/temp/rtk/src/find_cmd.rs +598 -0
- package/temp/rtk/src/format_cmd.rs +386 -0
- package/temp/rtk/src/gain.rs +723 -0
- package/temp/rtk/src/gh_cmd.rs +1651 -0
- package/temp/rtk/src/git.rs +2012 -0
- package/temp/rtk/src/go_cmd.rs +592 -0
- package/temp/rtk/src/golangci_cmd.rs +254 -0
- package/temp/rtk/src/grep_cmd.rs +288 -0
- package/temp/rtk/src/gt_cmd.rs +810 -0
- package/temp/rtk/src/hook_audit_cmd.rs +283 -0
- package/temp/rtk/src/hook_check.rs +171 -0
- package/temp/rtk/src/init.rs +1859 -0
- package/temp/rtk/src/integrity.rs +537 -0
- package/temp/rtk/src/json_cmd.rs +231 -0
- package/temp/rtk/src/learn/detector.rs +628 -0
- package/temp/rtk/src/learn/mod.rs +119 -0
- package/temp/rtk/src/learn/report.rs +184 -0
- package/temp/rtk/src/lint_cmd.rs +694 -0
- package/temp/rtk/src/local_llm.rs +316 -0
- package/temp/rtk/src/log_cmd.rs +248 -0
- package/temp/rtk/src/ls.rs +324 -0
- package/temp/rtk/src/main.rs +2482 -0
- package/temp/rtk/src/mypy_cmd.rs +389 -0
- package/temp/rtk/src/next_cmd.rs +241 -0
- package/temp/rtk/src/npm_cmd.rs +236 -0
- package/temp/rtk/src/parser/README.md +267 -0
- package/temp/rtk/src/parser/error.rs +46 -0
- package/temp/rtk/src/parser/formatter.rs +336 -0
- package/temp/rtk/src/parser/mod.rs +311 -0
- package/temp/rtk/src/parser/types.rs +119 -0
- package/temp/rtk/src/pip_cmd.rs +302 -0
- package/temp/rtk/src/playwright_cmd.rs +479 -0
- package/temp/rtk/src/pnpm_cmd.rs +573 -0
- package/temp/rtk/src/prettier_cmd.rs +221 -0
- package/temp/rtk/src/prisma_cmd.rs +482 -0
- package/temp/rtk/src/psql_cmd.rs +382 -0
- package/temp/rtk/src/pytest_cmd.rs +384 -0
- package/temp/rtk/src/read.rs +217 -0
- package/temp/rtk/src/rewrite_cmd.rs +50 -0
- package/temp/rtk/src/ruff_cmd.rs +402 -0
- package/temp/rtk/src/runner.rs +271 -0
- package/temp/rtk/src/summary.rs +297 -0
- package/temp/rtk/src/tee.rs +405 -0
- package/temp/rtk/src/telemetry.rs +248 -0
- package/temp/rtk/src/toml_filter.rs +1655 -0
- package/temp/rtk/src/tracking.rs +1416 -0
- package/temp/rtk/src/tree.rs +209 -0
- package/temp/rtk/src/tsc_cmd.rs +259 -0
- package/temp/rtk/src/utils.rs +432 -0
- package/temp/rtk/src/verify_cmd.rs +47 -0
- package/temp/rtk/src/vitest_cmd.rs +385 -0
- package/temp/rtk/src/wc_cmd.rs +401 -0
- package/temp/rtk/src/wget_cmd.rs +260 -0
- package/temp/rtk/tests/fixtures/dotnet/build_failed.txt +11 -0
- package/temp/rtk/tests/fixtures/dotnet/format_changes.json +31 -0
- package/temp/rtk/tests/fixtures/dotnet/format_empty.json +1 -0
- package/temp/rtk/tests/fixtures/dotnet/format_success.json +12 -0
- package/temp/rtk/tests/fixtures/dotnet/test_failed.txt +18 -0
- package/dist/App.js +0 -404
- package/dist/Browse.js +0 -79
- package/dist/FuzzyPicker.js +0 -47
- package/dist/Onboarding.js +0 -51
- package/dist/Spinner.js +0 -12
- package/dist/StatusBar.js +0 -49
- package/dist/ai.js +0 -368
- package/dist/cache.js +0 -41
- package/dist/command-rewriter.js +0 -64
- package/dist/command-validator.js +0 -77
- package/dist/compression.js +0 -107
- package/dist/diff-cache.js +0 -107
- package/dist/economy.js +0 -79
- package/dist/expand-store.js +0 -38
- package/dist/file-cache.js +0 -72
- package/dist/file-index.js +0 -62
- package/dist/history.js +0 -62
- package/dist/lazy-executor.js +0 -54
- package/dist/line-dedup.js +0 -59
- package/dist/loop-detector.js +0 -75
- package/dist/mcp/install.js +0 -98
- package/dist/mcp/server.js +0 -569
- package/dist/noise-filter.js +0 -86
- package/dist/output-processor.js +0 -136
- package/dist/output-router.js +0 -41
- package/dist/parsers/base.js +0 -2
- package/dist/parsers/build.js +0 -64
- package/dist/parsers/errors.js +0 -101
- package/dist/parsers/files.js +0 -78
- package/dist/parsers/git.js +0 -99
- package/dist/parsers/index.js +0 -48
- package/dist/parsers/tests.js +0 -89
- package/dist/providers/anthropic.js +0 -39
- package/dist/providers/base.js +0 -4
- package/dist/providers/cerebras.js +0 -95
- package/dist/providers/index.js +0 -49
- package/dist/recipes/model.js +0 -20
- package/dist/recipes/storage.js +0 -136
- package/dist/search/content-search.js +0 -68
- package/dist/search/file-search.js +0 -61
- package/dist/search/filters.js +0 -34
- package/dist/search/index.js +0 -5
- package/dist/search/semantic.js +0 -320
- package/dist/session-boot.js +0 -59
- package/dist/session-context.js +0 -55
- package/dist/sessions-db.js +0 -120
- package/dist/smart-display.js +0 -286
- package/dist/snapshots.js +0 -51
- package/dist/supervisor.js +0 -112
- package/dist/test-watchlist.js +0 -131
- package/dist/tree.js +0 -94
- package/dist/usage-cache.js +0 -65
|
@@ -0,0 +1,592 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
set -e
|
|
3
|
+
|
|
4
|
+
# Use local release build if available, otherwise fall back to installed rtk
|
|
5
|
+
if [ -f "./target/release/rtk" ]; then
|
|
6
|
+
RTK="$(cd "$(dirname ./target/release/rtk)" && pwd)/$(basename ./target/release/rtk)"
|
|
7
|
+
elif command -v rtk &> /dev/null; then
|
|
8
|
+
RTK="$(command -v rtk)"
|
|
9
|
+
else
|
|
10
|
+
echo "Error: rtk not found. Run 'cargo build --release' or install rtk."
|
|
11
|
+
exit 1
|
|
12
|
+
fi
|
|
13
|
+
BENCH_DIR="$(pwd)/scripts/benchmark"
|
|
14
|
+
|
|
15
|
+
# Mode local : générer les fichiers debug
|
|
16
|
+
if [ -z "$CI" ]; then
|
|
17
|
+
rm -rf "$BENCH_DIR"
|
|
18
|
+
mkdir -p "$BENCH_DIR/unix" "$BENCH_DIR/rtk" "$BENCH_DIR/diff"
|
|
19
|
+
fi
|
|
20
|
+
|
|
21
|
+
# Nom de fichier safe
|
|
22
|
+
safe_name() {
|
|
23
|
+
echo "$1" | tr ' /' '_-' | tr -cd 'a-zA-Z0-9_-'
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
# Fonction pour compter les tokens (~4 chars = 1 token)
|
|
27
|
+
count_tokens() {
|
|
28
|
+
local input="$1"
|
|
29
|
+
local len=${#input}
|
|
30
|
+
echo $(( (len + 3) / 4 ))
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
# Compteurs globaux
|
|
34
|
+
TOTAL_UNIX=0
|
|
35
|
+
TOTAL_RTK=0
|
|
36
|
+
TOTAL_TESTS=0
|
|
37
|
+
GOOD_TESTS=0
|
|
38
|
+
FAIL_TESTS=0
|
|
39
|
+
SKIP_TESTS=0
|
|
40
|
+
|
|
41
|
+
# Fonction de benchmark — une ligne par test
|
|
42
|
+
bench() {
|
|
43
|
+
local name="$1"
|
|
44
|
+
local unix_cmd="$2"
|
|
45
|
+
local rtk_cmd="$3"
|
|
46
|
+
|
|
47
|
+
unix_out=$(eval "$unix_cmd" 2>/dev/null || true)
|
|
48
|
+
rtk_out=$(eval "$rtk_cmd" 2>/dev/null || true)
|
|
49
|
+
|
|
50
|
+
unix_tokens=$(count_tokens "$unix_out")
|
|
51
|
+
rtk_tokens=$(count_tokens "$rtk_out")
|
|
52
|
+
|
|
53
|
+
TOTAL_TESTS=$((TOTAL_TESTS + 1))
|
|
54
|
+
|
|
55
|
+
local icon=""
|
|
56
|
+
local tag=""
|
|
57
|
+
|
|
58
|
+
if [ -z "$rtk_out" ]; then
|
|
59
|
+
icon="❌"
|
|
60
|
+
tag="FAIL"
|
|
61
|
+
FAIL_TESTS=$((FAIL_TESTS + 1))
|
|
62
|
+
TOTAL_UNIX=$((TOTAL_UNIX + unix_tokens))
|
|
63
|
+
TOTAL_RTK=$((TOTAL_RTK + unix_tokens))
|
|
64
|
+
elif [ "$rtk_tokens" -ge "$unix_tokens" ] && [ "$unix_tokens" -gt 0 ]; then
|
|
65
|
+
icon="⚠️"
|
|
66
|
+
tag="SKIP"
|
|
67
|
+
SKIP_TESTS=$((SKIP_TESTS + 1))
|
|
68
|
+
TOTAL_UNIX=$((TOTAL_UNIX + unix_tokens))
|
|
69
|
+
TOTAL_RTK=$((TOTAL_RTK + unix_tokens))
|
|
70
|
+
else
|
|
71
|
+
icon="✅"
|
|
72
|
+
tag="GOOD"
|
|
73
|
+
GOOD_TESTS=$((GOOD_TESTS + 1))
|
|
74
|
+
TOTAL_UNIX=$((TOTAL_UNIX + unix_tokens))
|
|
75
|
+
TOTAL_RTK=$((TOTAL_RTK + rtk_tokens))
|
|
76
|
+
fi
|
|
77
|
+
|
|
78
|
+
if [ "$tag" = "FAIL" ]; then
|
|
79
|
+
printf "%s %-24s │ %-40s │ %-40s │ %6d → %6s (--)\n" \
|
|
80
|
+
"$icon" "$name" "$unix_cmd" "$rtk_cmd" "$unix_tokens" "-"
|
|
81
|
+
else
|
|
82
|
+
if [ "$unix_tokens" -gt 0 ]; then
|
|
83
|
+
local pct=$(( (unix_tokens - rtk_tokens) * 100 / unix_tokens ))
|
|
84
|
+
else
|
|
85
|
+
local pct=0
|
|
86
|
+
fi
|
|
87
|
+
printf "%s %-24s │ %-40s │ %-40s │ %6d → %6d (%+d%%)\n" \
|
|
88
|
+
"$icon" "$name" "$unix_cmd" "$rtk_cmd" "$unix_tokens" "$rtk_tokens" "$pct"
|
|
89
|
+
fi
|
|
90
|
+
|
|
91
|
+
# Fichiers debug en local uniquement
|
|
92
|
+
if [ -z "$CI" ]; then
|
|
93
|
+
local filename=$(safe_name "$name")
|
|
94
|
+
local prefix="GOOD"
|
|
95
|
+
[ "$tag" = "FAIL" ] && prefix="FAIL"
|
|
96
|
+
[ "$tag" = "SKIP" ] && prefix="BAD"
|
|
97
|
+
|
|
98
|
+
local ts=$(date "+%d/%m/%Y %H:%M:%S")
|
|
99
|
+
|
|
100
|
+
printf "# %s\n> %s\n\n\`\`\`bash\n$ %s\n\`\`\`\n\n\`\`\`\n%s\n\`\`\`\n" \
|
|
101
|
+
"$name" "$ts" "$unix_cmd" "$unix_out" > "$BENCH_DIR/unix/${filename}.md"
|
|
102
|
+
|
|
103
|
+
printf "# %s\n> %s\n\n\`\`\`bash\n$ %s\n\`\`\`\n\n\`\`\`\n%s\n\`\`\`\n" \
|
|
104
|
+
"$name" "$ts" "$rtk_cmd" "$rtk_out" > "$BENCH_DIR/rtk/${filename}.md"
|
|
105
|
+
|
|
106
|
+
{
|
|
107
|
+
echo "# Diff: $name"
|
|
108
|
+
echo "> $ts"
|
|
109
|
+
echo ""
|
|
110
|
+
echo "| Metric | Unix | RTK |"
|
|
111
|
+
echo "|--------|------|-----|"
|
|
112
|
+
echo "| Tokens | $unix_tokens | $rtk_tokens |"
|
|
113
|
+
echo ""
|
|
114
|
+
echo "## Unix"
|
|
115
|
+
echo "\`\`\`"
|
|
116
|
+
echo "$unix_out"
|
|
117
|
+
echo "\`\`\`"
|
|
118
|
+
echo ""
|
|
119
|
+
echo "## RTK"
|
|
120
|
+
echo "\`\`\`"
|
|
121
|
+
echo "$rtk_out"
|
|
122
|
+
echo "\`\`\`"
|
|
123
|
+
} > "$BENCH_DIR/diff/${prefix}-${filename}.md"
|
|
124
|
+
fi
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
# Section header
|
|
128
|
+
section() {
|
|
129
|
+
echo ""
|
|
130
|
+
echo "── $1 ──"
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
# ═══════════════════════════════════════════
|
|
134
|
+
echo "RTK Benchmark"
|
|
135
|
+
echo "═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════"
|
|
136
|
+
printf " %-24s │ %-40s │ %-40s │ %s\n" "TEST" "SHELL" "RTK" "TOKENS"
|
|
137
|
+
echo "───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────"
|
|
138
|
+
|
|
139
|
+
# ===================
|
|
140
|
+
# ls
|
|
141
|
+
# ===================
|
|
142
|
+
section "ls"
|
|
143
|
+
bench "ls" "ls -la" "$RTK ls"
|
|
144
|
+
bench "ls src/" "ls -la src/" "$RTK ls src/"
|
|
145
|
+
bench "ls -l src/" "ls -l src/" "$RTK ls -l src/"
|
|
146
|
+
bench "ls -la src/" "ls -la src/" "$RTK ls -la src/"
|
|
147
|
+
bench "ls -lh src/" "ls -lh src/" "$RTK ls -lh src/"
|
|
148
|
+
bench "ls src/ -l" "ls -l src/" "$RTK ls src/ -l"
|
|
149
|
+
bench "ls -a" "ls -la" "$RTK ls -a"
|
|
150
|
+
bench "ls multi" "ls -la src/ scripts/" "$RTK ls src/ scripts/"
|
|
151
|
+
|
|
152
|
+
# ===================
|
|
153
|
+
# read
|
|
154
|
+
# ===================
|
|
155
|
+
section "read"
|
|
156
|
+
bench "read" "cat src/main.rs" "$RTK read src/main.rs"
|
|
157
|
+
bench "read -l minimal" "cat src/main.rs" "$RTK read src/main.rs -l minimal"
|
|
158
|
+
bench "read -l aggressive" "cat src/main.rs" "$RTK read src/main.rs -l aggressive"
|
|
159
|
+
bench "read -n" "cat -n src/main.rs" "$RTK read src/main.rs -n"
|
|
160
|
+
|
|
161
|
+
# ===================
|
|
162
|
+
# find
|
|
163
|
+
# ===================
|
|
164
|
+
section "find"
|
|
165
|
+
bench "find *" "find . -type f" "$RTK find '*'"
|
|
166
|
+
bench "find *.rs" "find . -name '*.rs' -type f" "$RTK find '*.rs'"
|
|
167
|
+
bench "find --max 10" "find . -not -path './target/*' -not -path './.git/*' -type f | head -10" "$RTK find '*' --max 10"
|
|
168
|
+
bench "find --max 100" "find . -not -path './target/*' -not -path './.git/*' -type f | head -100" "$RTK find '*' --max 100"
|
|
169
|
+
|
|
170
|
+
# ===================
|
|
171
|
+
# git
|
|
172
|
+
# ===================
|
|
173
|
+
section "git"
|
|
174
|
+
bench "git status" "git status" "$RTK git status"
|
|
175
|
+
bench "git log -n 10" "git log -10" "$RTK git log -n 10"
|
|
176
|
+
bench "git log -n 5" "git log -5" "$RTK git log -n 5"
|
|
177
|
+
bench "git diff" "git diff HEAD~1 2>/dev/null || echo ''" "$RTK git diff HEAD~1"
|
|
178
|
+
|
|
179
|
+
# ===================
|
|
180
|
+
# grep
|
|
181
|
+
# ===================
|
|
182
|
+
section "grep"
|
|
183
|
+
bench "grep fn" "grep -rn 'fn ' src/ || true" "$RTK grep 'fn ' src/"
|
|
184
|
+
bench "grep struct" "grep -rn 'struct ' src/ || true" "$RTK grep 'struct ' src/"
|
|
185
|
+
bench "grep -l 40" "grep -rn 'fn ' src/ || true" "$RTK grep 'fn ' src/ -l 40"
|
|
186
|
+
bench "grep --max 20" "grep -rn 'fn ' src/ | head -20 || true" "$RTK grep 'fn ' src/ --max 20"
|
|
187
|
+
bench "grep -c" "grep -ron 'fn ' src/ || true" "$RTK grep 'fn ' src/ -c"
|
|
188
|
+
|
|
189
|
+
# ===================
|
|
190
|
+
# json
|
|
191
|
+
# ===================
|
|
192
|
+
section "json"
|
|
193
|
+
cat > /tmp/rtk_bench.json << 'JSONEOF'
|
|
194
|
+
{
|
|
195
|
+
"name": "rtk",
|
|
196
|
+
"version": "0.2.1",
|
|
197
|
+
"config": {
|
|
198
|
+
"debug": false,
|
|
199
|
+
"max_depth": 10,
|
|
200
|
+
"filters": ["node_modules", "target", ".git"]
|
|
201
|
+
},
|
|
202
|
+
"dependencies": {
|
|
203
|
+
"serde": "1.0",
|
|
204
|
+
"clap": "4.0",
|
|
205
|
+
"anyhow": "1.0"
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
JSONEOF
|
|
209
|
+
bench "json" "cat /tmp/rtk_bench.json" "$RTK json /tmp/rtk_bench.json"
|
|
210
|
+
bench "json -d 2" "cat /tmp/rtk_bench.json" "$RTK json /tmp/rtk_bench.json -d 2"
|
|
211
|
+
rm -f /tmp/rtk_bench.json
|
|
212
|
+
|
|
213
|
+
# ===================
|
|
214
|
+
# deps
|
|
215
|
+
# ===================
|
|
216
|
+
section "deps"
|
|
217
|
+
bench "deps" "cat Cargo.toml" "$RTK deps"
|
|
218
|
+
|
|
219
|
+
# ===================
|
|
220
|
+
# env
|
|
221
|
+
# ===================
|
|
222
|
+
section "env"
|
|
223
|
+
bench "env" "env" "$RTK env"
|
|
224
|
+
bench "env -f PATH" "env | grep PATH" "$RTK env -f PATH"
|
|
225
|
+
bench "env --show-all" "env" "$RTK env --show-all"
|
|
226
|
+
|
|
227
|
+
# ===================
|
|
228
|
+
# err
|
|
229
|
+
# ===================
|
|
230
|
+
section "err"
|
|
231
|
+
if command -v cargo &>/dev/null; then
|
|
232
|
+
bench "err cargo build" "cargo build 2>&1 || true" "$RTK err cargo build"
|
|
233
|
+
else
|
|
234
|
+
echo "⏭️ err cargo build (cargo not in PATH, skipped)"
|
|
235
|
+
fi
|
|
236
|
+
|
|
237
|
+
# ===================
|
|
238
|
+
# test
|
|
239
|
+
# ===================
|
|
240
|
+
section "test"
|
|
241
|
+
if command -v cargo &>/dev/null; then
|
|
242
|
+
bench "test cargo test" "cargo test 2>&1 || true" "$RTK test cargo test"
|
|
243
|
+
else
|
|
244
|
+
echo "⏭️ test cargo test (cargo not in PATH, skipped)"
|
|
245
|
+
fi
|
|
246
|
+
|
|
247
|
+
# ===================
|
|
248
|
+
# log
|
|
249
|
+
# ===================
|
|
250
|
+
section "log"
|
|
251
|
+
LOG_FILE="/tmp/rtk_bench_sample.log"
|
|
252
|
+
cat > "$LOG_FILE" << 'LOGEOF'
|
|
253
|
+
2024-01-15 10:00:01 INFO Application started
|
|
254
|
+
2024-01-15 10:00:02 INFO Loading configuration
|
|
255
|
+
2024-01-15 10:00:03 ERROR Connection failed: timeout
|
|
256
|
+
2024-01-15 10:00:04 ERROR Connection failed: timeout
|
|
257
|
+
2024-01-15 10:00:05 ERROR Connection failed: timeout
|
|
258
|
+
2024-01-15 10:00:06 ERROR Connection failed: timeout
|
|
259
|
+
2024-01-15 10:00:07 ERROR Connection failed: timeout
|
|
260
|
+
2024-01-15 10:00:08 WARN Retrying connection
|
|
261
|
+
2024-01-15 10:00:09 INFO Connection established
|
|
262
|
+
2024-01-15 10:00:10 INFO Processing request
|
|
263
|
+
2024-01-15 10:00:11 INFO Processing request
|
|
264
|
+
2024-01-15 10:00:12 INFO Processing request
|
|
265
|
+
2024-01-15 10:00:13 INFO Request completed
|
|
266
|
+
LOGEOF
|
|
267
|
+
bench "log" "cat $LOG_FILE" "$RTK log $LOG_FILE"
|
|
268
|
+
rm -f "$LOG_FILE"
|
|
269
|
+
|
|
270
|
+
# ===================
|
|
271
|
+
# summary
|
|
272
|
+
# ===================
|
|
273
|
+
section "summary"
|
|
274
|
+
if command -v cargo &>/dev/null; then
|
|
275
|
+
bench "summary cargo --help" "cargo --help" "$RTK summary cargo --help"
|
|
276
|
+
else
|
|
277
|
+
echo "⏭️ summary cargo --help (cargo not in PATH, skipped)"
|
|
278
|
+
fi
|
|
279
|
+
if command -v rustc &>/dev/null; then
|
|
280
|
+
bench "summary rustc --help" "rustc --help 2>/dev/null || echo 'rustc not found'" "$RTK summary rustc --help"
|
|
281
|
+
else
|
|
282
|
+
echo "⏭️ summary rustc --help (rustc not in PATH, skipped)"
|
|
283
|
+
fi
|
|
284
|
+
|
|
285
|
+
# ===================
|
|
286
|
+
# cargo
|
|
287
|
+
# ===================
|
|
288
|
+
section "cargo"
|
|
289
|
+
if command -v cargo &>/dev/null; then
|
|
290
|
+
bench "cargo build" "cargo build 2>&1 || true" "$RTK cargo build"
|
|
291
|
+
bench "cargo test" "cargo test 2>&1 || true" "$RTK cargo test"
|
|
292
|
+
bench "cargo clippy" "cargo clippy 2>&1 || true" "$RTK cargo clippy"
|
|
293
|
+
bench "cargo check" "cargo check 2>&1 || true" "$RTK cargo check"
|
|
294
|
+
else
|
|
295
|
+
echo "⏭️ cargo build/test/clippy/check (cargo not in PATH, skipped)"
|
|
296
|
+
fi
|
|
297
|
+
|
|
298
|
+
# ===================
|
|
299
|
+
# diff
|
|
300
|
+
# ===================
|
|
301
|
+
section "diff"
|
|
302
|
+
bench "diff" "diff Cargo.toml LICENSE 2>&1 || true" "$RTK diff Cargo.toml LICENSE"
|
|
303
|
+
|
|
304
|
+
# ===================
|
|
305
|
+
# smart
|
|
306
|
+
# ===================
|
|
307
|
+
section "smart"
|
|
308
|
+
bench "smart main.rs" "cat src/main.rs" "$RTK smart src/main.rs"
|
|
309
|
+
|
|
310
|
+
# ===================
|
|
311
|
+
# wc
|
|
312
|
+
# ===================
|
|
313
|
+
section "wc"
|
|
314
|
+
bench "wc" "wc Cargo.toml src/main.rs" "$RTK wc Cargo.toml src/main.rs"
|
|
315
|
+
|
|
316
|
+
# ===================
|
|
317
|
+
# curl
|
|
318
|
+
# ===================
|
|
319
|
+
section "curl"
|
|
320
|
+
if command -v curl &> /dev/null; then
|
|
321
|
+
bench "curl json" "curl -s https://httpbin.org/json" "$RTK curl https://httpbin.org/json"
|
|
322
|
+
bench "curl text" "curl -s https://httpbin.org/robots.txt" "$RTK curl https://httpbin.org/robots.txt"
|
|
323
|
+
fi
|
|
324
|
+
|
|
325
|
+
# ===================
|
|
326
|
+
# wget
|
|
327
|
+
# ===================
|
|
328
|
+
if command -v wget &> /dev/null; then
|
|
329
|
+
section "wget"
|
|
330
|
+
bench "wget" "wget -qO- https://httpbin.org/robots.txt" "$RTK wget https://httpbin.org/robots.txt -O"
|
|
331
|
+
fi
|
|
332
|
+
|
|
333
|
+
# ===================
|
|
334
|
+
# Modern JavaScript Stack (skip si pas de package.json)
|
|
335
|
+
# ===================
|
|
336
|
+
if [ -f "package.json" ]; then
|
|
337
|
+
section "modern JS stack"
|
|
338
|
+
|
|
339
|
+
if command -v tsc &> /dev/null || [ -f "node_modules/.bin/tsc" ]; then
|
|
340
|
+
bench "tsc" "tsc --noEmit 2>&1 || true" "$RTK tsc --noEmit"
|
|
341
|
+
fi
|
|
342
|
+
|
|
343
|
+
if command -v prettier &> /dev/null || [ -f "node_modules/.bin/prettier" ]; then
|
|
344
|
+
bench "prettier --check" "prettier --check . 2>&1 || true" "$RTK prettier --check ."
|
|
345
|
+
fi
|
|
346
|
+
|
|
347
|
+
if command -v eslint &> /dev/null || [ -f "node_modules/.bin/eslint" ]; then
|
|
348
|
+
bench "lint" "eslint . 2>&1 || true" "$RTK lint ."
|
|
349
|
+
fi
|
|
350
|
+
|
|
351
|
+
if [ -f "next.config.js" ] || [ -f "next.config.mjs" ] || [ -f "next.config.ts" ]; then
|
|
352
|
+
if command -v next &> /dev/null || [ -f "node_modules/.bin/next" ]; then
|
|
353
|
+
bench "next build" "next build 2>&1 || true" "$RTK next build"
|
|
354
|
+
fi
|
|
355
|
+
fi
|
|
356
|
+
|
|
357
|
+
if [ -f "playwright.config.ts" ] || [ -f "playwright.config.js" ]; then
|
|
358
|
+
if command -v playwright &> /dev/null || [ -f "node_modules/.bin/playwright" ]; then
|
|
359
|
+
bench "playwright test" "playwright test 2>&1 || true" "$RTK playwright test"
|
|
360
|
+
fi
|
|
361
|
+
fi
|
|
362
|
+
|
|
363
|
+
if [ -f "prisma/schema.prisma" ]; then
|
|
364
|
+
if command -v prisma &> /dev/null || [ -f "node_modules/.bin/prisma" ]; then
|
|
365
|
+
bench "prisma generate" "prisma generate 2>&1 || true" "$RTK prisma generate"
|
|
366
|
+
fi
|
|
367
|
+
fi
|
|
368
|
+
|
|
369
|
+
if command -v vitest &> /dev/null || [ -f "node_modules/.bin/vitest" ]; then
|
|
370
|
+
bench "vitest run" "vitest run --reporter=json 2>&1 || true" "$RTK vitest run"
|
|
371
|
+
fi
|
|
372
|
+
|
|
373
|
+
if command -v pnpm &> /dev/null; then
|
|
374
|
+
bench "pnpm list" "pnpm list --depth 0 2>&1 || true" "$RTK pnpm list --depth 0"
|
|
375
|
+
bench "pnpm outdated" "pnpm outdated 2>&1 || true" "$RTK pnpm outdated"
|
|
376
|
+
fi
|
|
377
|
+
fi
|
|
378
|
+
|
|
379
|
+
# ===================
|
|
380
|
+
# gh (skip si pas dispo ou pas dans un repo)
|
|
381
|
+
# ===================
|
|
382
|
+
if command -v gh &> /dev/null && git rev-parse --git-dir &> /dev/null; then
|
|
383
|
+
section "gh"
|
|
384
|
+
bench "gh pr list" "gh pr list 2>&1 || true" "$RTK gh pr list"
|
|
385
|
+
bench "gh run list" "gh run list 2>&1 || true" "$RTK gh run list"
|
|
386
|
+
fi
|
|
387
|
+
|
|
388
|
+
# ===================
|
|
389
|
+
# docker (skip si pas dispo)
|
|
390
|
+
# ===================
|
|
391
|
+
if command -v docker &> /dev/null; then
|
|
392
|
+
section "docker"
|
|
393
|
+
bench "docker ps" "docker ps 2>/dev/null || true" "$RTK docker ps"
|
|
394
|
+
bench "docker images" "docker images 2>/dev/null || true" "$RTK docker images"
|
|
395
|
+
fi
|
|
396
|
+
|
|
397
|
+
# ===================
|
|
398
|
+
# kubectl (skip si pas dispo)
|
|
399
|
+
# ===================
|
|
400
|
+
if command -v kubectl &> /dev/null; then
|
|
401
|
+
section "kubectl"
|
|
402
|
+
bench "kubectl pods" "kubectl get pods 2>/dev/null || true" "$RTK kubectl pods"
|
|
403
|
+
bench "kubectl services" "kubectl get services 2>/dev/null || true" "$RTK kubectl services"
|
|
404
|
+
fi
|
|
405
|
+
|
|
406
|
+
# ===================
|
|
407
|
+
# Python (avec fixtures temporaires)
|
|
408
|
+
# ===================
|
|
409
|
+
if command -v python3 &> /dev/null && command -v ruff &> /dev/null && command -v pytest &> /dev/null; then
|
|
410
|
+
section "python"
|
|
411
|
+
|
|
412
|
+
PYTHON_FIXTURE=$(mktemp -d)
|
|
413
|
+
cd "$PYTHON_FIXTURE"
|
|
414
|
+
|
|
415
|
+
# pyproject.toml
|
|
416
|
+
cat > pyproject.toml << 'PYEOF'
|
|
417
|
+
[project]
|
|
418
|
+
name = "rtk-bench"
|
|
419
|
+
version = "0.1.0"
|
|
420
|
+
|
|
421
|
+
[tool.ruff]
|
|
422
|
+
line-length = 88
|
|
423
|
+
PYEOF
|
|
424
|
+
|
|
425
|
+
# sample.py avec quelques issues ruff
|
|
426
|
+
cat > sample.py << 'PYEOF'
|
|
427
|
+
import os
|
|
428
|
+
import sys
|
|
429
|
+
import json
|
|
430
|
+
|
|
431
|
+
|
|
432
|
+
def process_data(x):
|
|
433
|
+
if x == None: # E711: comparison to None
|
|
434
|
+
return []
|
|
435
|
+
result = []
|
|
436
|
+
for i in range(len(x)): # C416: unnecessary list comprehension
|
|
437
|
+
result.append(x[i] * 2)
|
|
438
|
+
return result
|
|
439
|
+
|
|
440
|
+
def unused_function(): # F841: local variable assigned but never used
|
|
441
|
+
temp = 42
|
|
442
|
+
return None
|
|
443
|
+
PYEOF
|
|
444
|
+
|
|
445
|
+
# test_sample.py
|
|
446
|
+
cat > test_sample.py << 'PYEOF'
|
|
447
|
+
from sample import process_data
|
|
448
|
+
|
|
449
|
+
def test_process_data():
|
|
450
|
+
assert process_data([1, 2, 3]) == [2, 4, 6]
|
|
451
|
+
|
|
452
|
+
def test_process_data_none():
|
|
453
|
+
assert process_data(None) == []
|
|
454
|
+
PYEOF
|
|
455
|
+
|
|
456
|
+
bench "ruff check" "ruff check . 2>&1 || true" "$RTK ruff check ."
|
|
457
|
+
bench "pytest" "pytest -v 2>&1 || true" "$RTK pytest -v"
|
|
458
|
+
|
|
459
|
+
cd - > /dev/null
|
|
460
|
+
rm -rf "$PYTHON_FIXTURE"
|
|
461
|
+
fi
|
|
462
|
+
|
|
463
|
+
# ===================
|
|
464
|
+
# Go (avec fixtures temporaires)
|
|
465
|
+
# ===================
|
|
466
|
+
if command -v go &> /dev/null && command -v golangci-lint &> /dev/null; then
|
|
467
|
+
section "go"
|
|
468
|
+
|
|
469
|
+
GO_FIXTURE=$(mktemp -d)
|
|
470
|
+
cd "$GO_FIXTURE"
|
|
471
|
+
|
|
472
|
+
# go.mod
|
|
473
|
+
cat > go.mod << 'GOEOF'
|
|
474
|
+
module bench
|
|
475
|
+
|
|
476
|
+
go 1.21
|
|
477
|
+
GOEOF
|
|
478
|
+
|
|
479
|
+
# main.go
|
|
480
|
+
cat > main.go << 'GOEOF'
|
|
481
|
+
package main
|
|
482
|
+
|
|
483
|
+
import "fmt"
|
|
484
|
+
|
|
485
|
+
func Add(a, b int) int {
|
|
486
|
+
return a + b
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
func Multiply(a, b int) int {
|
|
490
|
+
return a * b
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
func main() {
|
|
494
|
+
fmt.Println(Add(2, 3))
|
|
495
|
+
fmt.Println(Multiply(4, 5))
|
|
496
|
+
}
|
|
497
|
+
GOEOF
|
|
498
|
+
|
|
499
|
+
# main_test.go
|
|
500
|
+
cat > main_test.go << 'GOEOF'
|
|
501
|
+
package main
|
|
502
|
+
|
|
503
|
+
import "testing"
|
|
504
|
+
|
|
505
|
+
func TestAdd(t *testing.T) {
|
|
506
|
+
result := Add(2, 3)
|
|
507
|
+
if result != 5 {
|
|
508
|
+
t.Errorf("Add(2, 3) = %d; want 5", result)
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
func TestMultiply(t *testing.T) {
|
|
513
|
+
result := Multiply(4, 5)
|
|
514
|
+
if result != 20 {
|
|
515
|
+
t.Errorf("Multiply(4, 5) = %d; want 20", result)
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
GOEOF
|
|
519
|
+
|
|
520
|
+
bench "golangci-lint" "golangci-lint run 2>&1 || true" "$RTK golangci-lint run"
|
|
521
|
+
bench "go test" "go test -v 2>&1 || true" "$RTK go test -v"
|
|
522
|
+
bench "go build" "go build ./... 2>&1 || true" "$RTK go build ./..."
|
|
523
|
+
bench "go vet" "go vet ./... 2>&1 || true" "$RTK go vet ./..."
|
|
524
|
+
|
|
525
|
+
cd - > /dev/null
|
|
526
|
+
rm -rf "$GO_FIXTURE"
|
|
527
|
+
fi
|
|
528
|
+
|
|
529
|
+
# ===================
|
|
530
|
+
# rewrite (verify rewrite works with and without quotes)
|
|
531
|
+
# ===================
|
|
532
|
+
section "rewrite"
|
|
533
|
+
|
|
534
|
+
# bench_rewrite: verifies rewrite produces expected output (not token comparison)
|
|
535
|
+
bench_rewrite() {
|
|
536
|
+
local name="$1"
|
|
537
|
+
local cmd="$2"
|
|
538
|
+
local expected="$3"
|
|
539
|
+
|
|
540
|
+
result=$(eval "$cmd" 2>&1 || true)
|
|
541
|
+
|
|
542
|
+
TOTAL_TESTS=$((TOTAL_TESTS + 1))
|
|
543
|
+
|
|
544
|
+
if [ "$result" = "$expected" ]; then
|
|
545
|
+
printf "✅ %-24s │ %-40s │ %s\n" "$name" "$cmd" "$result"
|
|
546
|
+
GOOD_TESTS=$((GOOD_TESTS + 1))
|
|
547
|
+
else
|
|
548
|
+
printf "❌ %-24s │ %-40s │ got: %s (expected: %s)\n" "$name" "$cmd" "$result" "$expected"
|
|
549
|
+
FAIL_TESTS=$((FAIL_TESTS + 1))
|
|
550
|
+
fi
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
bench_rewrite "rewrite quoted" "$RTK rewrite 'git status'" "rtk git status"
|
|
554
|
+
bench_rewrite "rewrite unquoted" "$RTK rewrite git status" "rtk git status"
|
|
555
|
+
bench_rewrite "rewrite ls -al" "$RTK rewrite ls -al" "rtk ls -al"
|
|
556
|
+
bench_rewrite "rewrite npm exec" "$RTK rewrite npm exec" "rtk npm exec"
|
|
557
|
+
bench_rewrite "rewrite cargo test" "$RTK rewrite cargo test" "rtk cargo test"
|
|
558
|
+
bench_rewrite "rewrite compound" "$RTK rewrite 'cargo test && git push'" "rtk cargo test && rtk git push"
|
|
559
|
+
|
|
560
|
+
# ===================
|
|
561
|
+
# Résumé global
|
|
562
|
+
# ===================
|
|
563
|
+
echo ""
|
|
564
|
+
echo "═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════"
|
|
565
|
+
|
|
566
|
+
if [ "$TOTAL_TESTS" -gt 0 ]; then
|
|
567
|
+
GOOD_PCT=$((GOOD_TESTS * 100 / TOTAL_TESTS))
|
|
568
|
+
if [ "$TOTAL_UNIX" -gt 0 ]; then
|
|
569
|
+
TOTAL_SAVED=$((TOTAL_UNIX - TOTAL_RTK))
|
|
570
|
+
TOTAL_SAVE_PCT=$((TOTAL_SAVED * 100 / TOTAL_UNIX))
|
|
571
|
+
else
|
|
572
|
+
TOTAL_SAVED=0
|
|
573
|
+
TOTAL_SAVE_PCT=0
|
|
574
|
+
fi
|
|
575
|
+
|
|
576
|
+
echo ""
|
|
577
|
+
echo " ✅ $GOOD_TESTS good ⚠️ $SKIP_TESTS skip ❌ $FAIL_TESTS fail $GOOD_TESTS/$TOTAL_TESTS ($GOOD_PCT%)"
|
|
578
|
+
echo " Tokens: $TOTAL_UNIX → $TOTAL_RTK (-$TOTAL_SAVE_PCT%)"
|
|
579
|
+
echo ""
|
|
580
|
+
|
|
581
|
+
# Fichiers debug en local
|
|
582
|
+
if [ -z "$CI" ]; then
|
|
583
|
+
echo " Debug: $BENCH_DIR/{unix,rtk,diff}/"
|
|
584
|
+
fi
|
|
585
|
+
echo ""
|
|
586
|
+
|
|
587
|
+
# Exit code non-zero si moins de 80% good
|
|
588
|
+
if [ "$GOOD_PCT" -lt 80 ]; then
|
|
589
|
+
echo " BENCHMARK FAILED: $GOOD_PCT% good (minimum 80%)"
|
|
590
|
+
exit 1
|
|
591
|
+
fi
|
|
592
|
+
fi
|