@hasna/terminal 2.2.0 → 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 +29 -12
- package/package.json +1 -1
- package/src/ai.ts +50 -36
- package/src/cli.tsx +29 -12
- package/src/context-hints.ts +89 -0
- package/src/discover.ts +238 -0
- package/src/economy.ts +53 -0
- package/src/output-store.ts +65 -0
- package/src/providers/index.ts +4 -4
- 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
|
@@ -0,0 +1,561 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
#
|
|
3
|
+
# RTK Smoke Test Suite
|
|
4
|
+
# Exercises every command to catch regressions after merge.
|
|
5
|
+
# Exit code: number of failures (0 = all green)
|
|
6
|
+
#
|
|
7
|
+
set -euo pipefail
|
|
8
|
+
|
|
9
|
+
PASS=0
|
|
10
|
+
FAIL=0
|
|
11
|
+
SKIP=0
|
|
12
|
+
FAILURES=()
|
|
13
|
+
|
|
14
|
+
# Colors
|
|
15
|
+
RED='\033[0;31m'
|
|
16
|
+
GREEN='\033[0;32m'
|
|
17
|
+
YELLOW='\033[0;33m'
|
|
18
|
+
CYAN='\033[0;36m'
|
|
19
|
+
BOLD='\033[1m'
|
|
20
|
+
NC='\033[0m'
|
|
21
|
+
|
|
22
|
+
# ── Helpers ──────────────────────────────────────────
|
|
23
|
+
|
|
24
|
+
assert_ok() {
|
|
25
|
+
local name="$1"
|
|
26
|
+
shift
|
|
27
|
+
local output
|
|
28
|
+
if output=$("$@" 2>&1); then
|
|
29
|
+
PASS=$((PASS + 1))
|
|
30
|
+
printf " ${GREEN}PASS${NC} %s\n" "$name"
|
|
31
|
+
else
|
|
32
|
+
FAIL=$((FAIL + 1))
|
|
33
|
+
FAILURES+=("$name")
|
|
34
|
+
printf " ${RED}FAIL${NC} %s\n" "$name"
|
|
35
|
+
printf " cmd: %s\n" "$*"
|
|
36
|
+
printf " out: %s\n" "$(echo "$output" | head -3)"
|
|
37
|
+
fi
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
assert_contains() {
|
|
41
|
+
local name="$1"
|
|
42
|
+
local needle="$2"
|
|
43
|
+
shift 2
|
|
44
|
+
local output
|
|
45
|
+
if output=$("$@" 2>&1) && echo "$output" | grep -q "$needle"; then
|
|
46
|
+
PASS=$((PASS + 1))
|
|
47
|
+
printf " ${GREEN}PASS${NC} %s\n" "$name"
|
|
48
|
+
else
|
|
49
|
+
FAIL=$((FAIL + 1))
|
|
50
|
+
FAILURES+=("$name")
|
|
51
|
+
printf " ${RED}FAIL${NC} %s\n" "$name"
|
|
52
|
+
printf " expected: '%s'\n" "$needle"
|
|
53
|
+
printf " got: %s\n" "$(echo "$output" | head -3)"
|
|
54
|
+
fi
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
assert_exit_ok() {
|
|
58
|
+
local name="$1"
|
|
59
|
+
shift
|
|
60
|
+
if "$@" >/dev/null 2>&1; then
|
|
61
|
+
PASS=$((PASS + 1))
|
|
62
|
+
printf " ${GREEN}PASS${NC} %s\n" "$name"
|
|
63
|
+
else
|
|
64
|
+
FAIL=$((FAIL + 1))
|
|
65
|
+
FAILURES+=("$name")
|
|
66
|
+
printf " ${RED}FAIL${NC} %s\n" "$name"
|
|
67
|
+
printf " cmd: %s\n" "$*"
|
|
68
|
+
fi
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
assert_fails() {
|
|
72
|
+
local name="$1"
|
|
73
|
+
shift
|
|
74
|
+
if "$@" >/dev/null 2>&1; then
|
|
75
|
+
FAIL=$((FAIL + 1))
|
|
76
|
+
FAILURES+=("$name (expected failure, got success)")
|
|
77
|
+
printf " ${RED}FAIL${NC} %s (expected failure)\n" "$name"
|
|
78
|
+
else
|
|
79
|
+
PASS=$((PASS + 1))
|
|
80
|
+
printf " ${GREEN}PASS${NC} %s\n" "$name"
|
|
81
|
+
fi
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
assert_help() {
|
|
85
|
+
local name="$1"
|
|
86
|
+
shift
|
|
87
|
+
assert_contains "$name --help" "Usage:" "$@" --help
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
skip_test() {
|
|
91
|
+
local name="$1"
|
|
92
|
+
local reason="$2"
|
|
93
|
+
SKIP=$((SKIP + 1))
|
|
94
|
+
printf " ${YELLOW}SKIP${NC} %s (%s)\n" "$name" "$reason"
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
section() {
|
|
98
|
+
printf "\n${BOLD}${CYAN}── %s ──${NC}\n" "$1"
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
# ── Preamble ─────────────────────────────────────────
|
|
102
|
+
|
|
103
|
+
RTK=$(command -v rtk || echo "")
|
|
104
|
+
if [[ -z "$RTK" ]]; then
|
|
105
|
+
echo "rtk not found in PATH. Run: cargo install --path ."
|
|
106
|
+
exit 1
|
|
107
|
+
fi
|
|
108
|
+
|
|
109
|
+
printf "${BOLD}RTK Smoke Test Suite${NC}\n"
|
|
110
|
+
printf "Binary: %s\n" "$RTK"
|
|
111
|
+
printf "Version: %s\n" "$(rtk --version)"
|
|
112
|
+
printf "Date: %s\n" "$(date '+%Y-%m-%d %H:%M')"
|
|
113
|
+
|
|
114
|
+
# Need a git repo to test git commands
|
|
115
|
+
if ! git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
|
|
116
|
+
echo "Must run from inside a git repository."
|
|
117
|
+
exit 1
|
|
118
|
+
fi
|
|
119
|
+
|
|
120
|
+
REPO_ROOT=$(git rev-parse --show-toplevel)
|
|
121
|
+
|
|
122
|
+
# ── 1. Version & Help ───────────────────────────────
|
|
123
|
+
|
|
124
|
+
section "Version & Help"
|
|
125
|
+
|
|
126
|
+
assert_contains "rtk --version" "rtk" rtk --version
|
|
127
|
+
assert_contains "rtk --help" "Usage:" rtk --help
|
|
128
|
+
|
|
129
|
+
# ── 2. Ls ────────────────────────────────────────────
|
|
130
|
+
|
|
131
|
+
section "Ls"
|
|
132
|
+
|
|
133
|
+
assert_ok "rtk ls ." rtk ls .
|
|
134
|
+
assert_ok "rtk ls -la ." rtk ls -la .
|
|
135
|
+
assert_ok "rtk ls -lh ." rtk ls -lh .
|
|
136
|
+
assert_ok "rtk ls -l src/" rtk ls -l src/
|
|
137
|
+
assert_ok "rtk ls src/ -l (flag after)" rtk ls src/ -l
|
|
138
|
+
assert_ok "rtk ls multi paths" rtk ls src/ scripts/
|
|
139
|
+
assert_contains "rtk ls -a shows hidden" ".git" rtk ls -a .
|
|
140
|
+
assert_contains "rtk ls shows sizes" "K" rtk ls src/
|
|
141
|
+
assert_contains "rtk ls shows dirs with /" "/" rtk ls .
|
|
142
|
+
|
|
143
|
+
# ── 2b. Tree ─────────────────────────────────────────
|
|
144
|
+
|
|
145
|
+
section "Tree"
|
|
146
|
+
|
|
147
|
+
if command -v tree >/dev/null 2>&1; then
|
|
148
|
+
assert_ok "rtk tree ." rtk tree .
|
|
149
|
+
assert_ok "rtk tree -L 2 ." rtk tree -L 2 .
|
|
150
|
+
assert_ok "rtk tree -d -L 1 ." rtk tree -d -L 1 .
|
|
151
|
+
assert_contains "rtk tree shows src/" "src" rtk tree -L 1 .
|
|
152
|
+
else
|
|
153
|
+
skip_test "rtk tree" "tree not installed"
|
|
154
|
+
fi
|
|
155
|
+
|
|
156
|
+
# ── 3. Read ──────────────────────────────────────────
|
|
157
|
+
|
|
158
|
+
section "Read"
|
|
159
|
+
|
|
160
|
+
assert_ok "rtk read Cargo.toml" rtk read Cargo.toml
|
|
161
|
+
assert_ok "rtk read --level none Cargo.toml" rtk read --level none Cargo.toml
|
|
162
|
+
assert_ok "rtk read --level aggressive Cargo.toml" rtk read --level aggressive Cargo.toml
|
|
163
|
+
assert_ok "rtk read -n Cargo.toml" rtk read -n Cargo.toml
|
|
164
|
+
assert_ok "rtk read --max-lines 5 Cargo.toml" rtk read --max-lines 5 Cargo.toml
|
|
165
|
+
|
|
166
|
+
section "Read (stdin support)"
|
|
167
|
+
|
|
168
|
+
assert_ok "rtk read stdin pipe" bash -c 'echo "fn main() {}" | rtk read -'
|
|
169
|
+
|
|
170
|
+
# ── 4. Git ───────────────────────────────────────────
|
|
171
|
+
|
|
172
|
+
section "Git (existing)"
|
|
173
|
+
|
|
174
|
+
assert_ok "rtk git status" rtk git status
|
|
175
|
+
assert_ok "rtk git status --short" rtk git status --short
|
|
176
|
+
assert_ok "rtk git status -s" rtk git status -s
|
|
177
|
+
assert_ok "rtk git status --porcelain" rtk git status --porcelain
|
|
178
|
+
assert_ok "rtk git log" rtk git log
|
|
179
|
+
assert_ok "rtk git log -5" rtk git log -- -5
|
|
180
|
+
assert_ok "rtk git diff" rtk git diff
|
|
181
|
+
assert_ok "rtk git diff --stat" rtk git diff --stat
|
|
182
|
+
|
|
183
|
+
section "Git (new: branch, fetch, stash, worktree)"
|
|
184
|
+
|
|
185
|
+
assert_ok "rtk git branch" rtk git branch
|
|
186
|
+
assert_ok "rtk git fetch" rtk git fetch
|
|
187
|
+
assert_ok "rtk git stash list" rtk git stash list
|
|
188
|
+
assert_ok "rtk git worktree" rtk git worktree
|
|
189
|
+
|
|
190
|
+
section "Git (passthrough: unsupported subcommands)"
|
|
191
|
+
|
|
192
|
+
assert_ok "rtk git tag --list" rtk git tag --list
|
|
193
|
+
assert_ok "rtk git remote -v" rtk git remote -v
|
|
194
|
+
assert_ok "rtk git rev-parse HEAD" rtk git rev-parse HEAD
|
|
195
|
+
|
|
196
|
+
# ── 5. GitHub CLI ────────────────────────────────────
|
|
197
|
+
|
|
198
|
+
section "GitHub CLI"
|
|
199
|
+
|
|
200
|
+
if command -v gh >/dev/null 2>&1 && gh auth status >/dev/null 2>&1; then
|
|
201
|
+
assert_ok "rtk gh pr list" rtk gh pr list
|
|
202
|
+
assert_ok "rtk gh run list" rtk gh run list
|
|
203
|
+
assert_ok "rtk gh issue list" rtk gh issue list
|
|
204
|
+
# pr create/merge/diff/comment/edit are write ops, test help only
|
|
205
|
+
assert_help "rtk gh" rtk gh
|
|
206
|
+
else
|
|
207
|
+
skip_test "gh commands" "gh not authenticated"
|
|
208
|
+
fi
|
|
209
|
+
|
|
210
|
+
# ── 6. Cargo ─────────────────────────────────────────
|
|
211
|
+
|
|
212
|
+
section "Cargo (new)"
|
|
213
|
+
|
|
214
|
+
assert_ok "rtk cargo build" rtk cargo build
|
|
215
|
+
assert_ok "rtk cargo clippy" rtk cargo clippy
|
|
216
|
+
# cargo test exits non-zero due to pre-existing failures; check output ignoring exit code
|
|
217
|
+
output_cargo_test=$(rtk cargo test 2>&1 || true)
|
|
218
|
+
if echo "$output_cargo_test" | grep -q "FAILURES\|test result:\|passed"; then
|
|
219
|
+
PASS=$((PASS + 1))
|
|
220
|
+
printf " ${GREEN}PASS${NC} %s\n" "rtk cargo test"
|
|
221
|
+
else
|
|
222
|
+
FAIL=$((FAIL + 1))
|
|
223
|
+
FAILURES+=("rtk cargo test")
|
|
224
|
+
printf " ${RED}FAIL${NC} %s\n" "rtk cargo test"
|
|
225
|
+
printf " got: %s\n" "$(echo "$output_cargo_test" | head -3)"
|
|
226
|
+
fi
|
|
227
|
+
assert_help "rtk cargo" rtk cargo
|
|
228
|
+
|
|
229
|
+
# ── 7. Curl ──────────────────────────────────────────
|
|
230
|
+
|
|
231
|
+
section "Curl (new)"
|
|
232
|
+
|
|
233
|
+
assert_contains "rtk curl JSON detect" "string" rtk curl https://httpbin.org/json
|
|
234
|
+
assert_ok "rtk curl plain text" rtk curl https://httpbin.org/robots.txt
|
|
235
|
+
assert_help "rtk curl" rtk curl
|
|
236
|
+
|
|
237
|
+
# ── 8. Npm / Npx ────────────────────────────────────
|
|
238
|
+
|
|
239
|
+
section "Npm / Npx (new)"
|
|
240
|
+
|
|
241
|
+
assert_help "rtk npm" rtk npm
|
|
242
|
+
assert_help "rtk npx" rtk npx
|
|
243
|
+
|
|
244
|
+
# ── 9. Pnpm ─────────────────────────────────────────
|
|
245
|
+
|
|
246
|
+
section "Pnpm"
|
|
247
|
+
|
|
248
|
+
assert_help "rtk pnpm" rtk pnpm
|
|
249
|
+
assert_help "rtk pnpm build" rtk pnpm build
|
|
250
|
+
assert_help "rtk pnpm typecheck" rtk pnpm typecheck
|
|
251
|
+
|
|
252
|
+
if command -v pnpm >/dev/null 2>&1; then
|
|
253
|
+
assert_ok "rtk pnpm help" rtk pnpm help
|
|
254
|
+
fi
|
|
255
|
+
|
|
256
|
+
# ── 10. Grep ─────────────────────────────────────────
|
|
257
|
+
|
|
258
|
+
section "Grep"
|
|
259
|
+
|
|
260
|
+
assert_ok "rtk grep pattern" rtk grep "pub fn" src/
|
|
261
|
+
assert_contains "rtk grep finds results" "pub fn" rtk grep "pub fn" src/
|
|
262
|
+
assert_ok "rtk grep with file type" rtk grep "pub fn" src/ -t rust
|
|
263
|
+
|
|
264
|
+
section "Grep (extra args passthrough)"
|
|
265
|
+
|
|
266
|
+
assert_ok "rtk grep -i case insensitive" rtk grep "fn" src/ -i
|
|
267
|
+
assert_ok "rtk grep -A context lines" rtk grep "fn run" src/ -A 2
|
|
268
|
+
|
|
269
|
+
# ── 11. Find ─────────────────────────────────────────
|
|
270
|
+
|
|
271
|
+
section "Find"
|
|
272
|
+
|
|
273
|
+
assert_ok "rtk find *.rs" rtk find "*.rs" src/
|
|
274
|
+
assert_contains "rtk find shows files" ".rs" rtk find "*.rs" src/
|
|
275
|
+
|
|
276
|
+
# ── 12. Json ─────────────────────────────────────────
|
|
277
|
+
|
|
278
|
+
section "Json"
|
|
279
|
+
|
|
280
|
+
# Create temp JSON file for testing
|
|
281
|
+
TMPJSON=$(mktemp /tmp/rtk-test-XXXXX.json)
|
|
282
|
+
echo '{"name":"test","count":42,"items":[1,2,3]}' > "$TMPJSON"
|
|
283
|
+
|
|
284
|
+
assert_ok "rtk json file" rtk json "$TMPJSON"
|
|
285
|
+
assert_contains "rtk json shows schema" "string" rtk json "$TMPJSON"
|
|
286
|
+
|
|
287
|
+
rm -f "$TMPJSON"
|
|
288
|
+
|
|
289
|
+
# ── 13. Deps ─────────────────────────────────────────
|
|
290
|
+
|
|
291
|
+
section "Deps"
|
|
292
|
+
|
|
293
|
+
assert_ok "rtk deps ." rtk deps .
|
|
294
|
+
assert_contains "rtk deps shows Cargo" "Cargo" rtk deps .
|
|
295
|
+
|
|
296
|
+
# ── 14. Env ──────────────────────────────────────────
|
|
297
|
+
|
|
298
|
+
section "Env"
|
|
299
|
+
|
|
300
|
+
assert_ok "rtk env" rtk env
|
|
301
|
+
assert_ok "rtk env --filter PATH" rtk env --filter PATH
|
|
302
|
+
|
|
303
|
+
# ── 16. Log ──────────────────────────────────────────
|
|
304
|
+
|
|
305
|
+
section "Log"
|
|
306
|
+
|
|
307
|
+
TMPLOG=$(mktemp /tmp/rtk-log-XXXXX.log)
|
|
308
|
+
for i in $(seq 1 20); do
|
|
309
|
+
echo "[2025-01-01 12:00:00] INFO: repeated message" >> "$TMPLOG"
|
|
310
|
+
done
|
|
311
|
+
echo "[2025-01-01 12:00:01] ERROR: something failed" >> "$TMPLOG"
|
|
312
|
+
|
|
313
|
+
assert_ok "rtk log file" rtk log "$TMPLOG"
|
|
314
|
+
|
|
315
|
+
rm -f "$TMPLOG"
|
|
316
|
+
|
|
317
|
+
# ── 17. Summary ──────────────────────────────────────
|
|
318
|
+
|
|
319
|
+
section "Summary"
|
|
320
|
+
|
|
321
|
+
assert_ok "rtk summary echo hello" rtk summary echo hello
|
|
322
|
+
|
|
323
|
+
# ── 18. Err ──────────────────────────────────────────
|
|
324
|
+
|
|
325
|
+
section "Err"
|
|
326
|
+
|
|
327
|
+
assert_ok "rtk err echo ok" rtk err echo ok
|
|
328
|
+
|
|
329
|
+
# ── 19. Test runner ──────────────────────────────────
|
|
330
|
+
|
|
331
|
+
section "Test runner"
|
|
332
|
+
|
|
333
|
+
assert_ok "rtk test echo ok" rtk test echo ok
|
|
334
|
+
|
|
335
|
+
# ── 20. Gain ─────────────────────────────────────────
|
|
336
|
+
|
|
337
|
+
section "Gain"
|
|
338
|
+
|
|
339
|
+
assert_ok "rtk gain" rtk gain
|
|
340
|
+
assert_ok "rtk gain --history" rtk gain --history
|
|
341
|
+
|
|
342
|
+
# ── 21. Config & Init ────────────────────────────────
|
|
343
|
+
|
|
344
|
+
section "Config & Init"
|
|
345
|
+
|
|
346
|
+
assert_ok "rtk config" rtk config
|
|
347
|
+
assert_ok "rtk init --show" rtk init --show
|
|
348
|
+
|
|
349
|
+
# ── 22. Wget ─────────────────────────────────────────
|
|
350
|
+
|
|
351
|
+
section "Wget"
|
|
352
|
+
|
|
353
|
+
if command -v wget >/dev/null 2>&1; then
|
|
354
|
+
assert_ok "rtk wget stdout" rtk wget https://httpbin.org/robots.txt -O
|
|
355
|
+
else
|
|
356
|
+
skip_test "rtk wget" "wget not installed"
|
|
357
|
+
fi
|
|
358
|
+
|
|
359
|
+
# ── 23. Tsc / Lint / Prettier / Next / Playwright ───
|
|
360
|
+
|
|
361
|
+
section "JS Tooling (help only, no project context)"
|
|
362
|
+
|
|
363
|
+
assert_help "rtk tsc" rtk tsc
|
|
364
|
+
assert_help "rtk lint" rtk lint
|
|
365
|
+
assert_help "rtk prettier" rtk prettier
|
|
366
|
+
assert_help "rtk next" rtk next
|
|
367
|
+
assert_help "rtk playwright" rtk playwright
|
|
368
|
+
|
|
369
|
+
# ── 24. Prisma ───────────────────────────────────────
|
|
370
|
+
|
|
371
|
+
section "Prisma (help only)"
|
|
372
|
+
|
|
373
|
+
assert_help "rtk prisma" rtk prisma
|
|
374
|
+
|
|
375
|
+
# ── 25. Vitest ───────────────────────────────────────
|
|
376
|
+
|
|
377
|
+
section "Vitest (help only)"
|
|
378
|
+
|
|
379
|
+
assert_help "rtk vitest" rtk vitest
|
|
380
|
+
|
|
381
|
+
# ── 26. Docker / Kubectl (help only) ────────────────
|
|
382
|
+
|
|
383
|
+
section "Docker / Kubectl (help only)"
|
|
384
|
+
|
|
385
|
+
assert_help "rtk docker" rtk docker
|
|
386
|
+
assert_help "rtk kubectl" rtk kubectl
|
|
387
|
+
|
|
388
|
+
# ── 27. Python (conditional) ────────────────────────
|
|
389
|
+
|
|
390
|
+
section "Python (conditional)"
|
|
391
|
+
|
|
392
|
+
if command -v pytest &>/dev/null; then
|
|
393
|
+
assert_help "rtk pytest" rtk pytest --help
|
|
394
|
+
else
|
|
395
|
+
skip_test "rtk pytest" "pytest not installed"
|
|
396
|
+
fi
|
|
397
|
+
|
|
398
|
+
if command -v ruff &>/dev/null; then
|
|
399
|
+
assert_help "rtk ruff" rtk ruff --help
|
|
400
|
+
else
|
|
401
|
+
skip_test "rtk ruff" "ruff not installed"
|
|
402
|
+
fi
|
|
403
|
+
|
|
404
|
+
if command -v pip &>/dev/null; then
|
|
405
|
+
assert_help "rtk pip" rtk pip --help
|
|
406
|
+
else
|
|
407
|
+
skip_test "rtk pip" "pip not installed"
|
|
408
|
+
fi
|
|
409
|
+
|
|
410
|
+
# ── 28. Go (conditional) ────────────────────────────
|
|
411
|
+
|
|
412
|
+
section "Go (conditional)"
|
|
413
|
+
|
|
414
|
+
if command -v go &>/dev/null; then
|
|
415
|
+
assert_help "rtk go" rtk go --help
|
|
416
|
+
assert_help "rtk go test" rtk go test -h
|
|
417
|
+
assert_help "rtk go build" rtk go build -h
|
|
418
|
+
assert_help "rtk go vet" rtk go vet -h
|
|
419
|
+
else
|
|
420
|
+
skip_test "rtk go" "go not installed"
|
|
421
|
+
fi
|
|
422
|
+
|
|
423
|
+
if command -v golangci-lint &>/dev/null; then
|
|
424
|
+
assert_help "rtk golangci-lint" rtk golangci-lint --help
|
|
425
|
+
else
|
|
426
|
+
skip_test "rtk golangci-lint" "golangci-lint not installed"
|
|
427
|
+
fi
|
|
428
|
+
|
|
429
|
+
# ── 29. Graphite (conditional) ─────────────────────
|
|
430
|
+
|
|
431
|
+
section "Graphite (conditional)"
|
|
432
|
+
|
|
433
|
+
if command -v gt &>/dev/null; then
|
|
434
|
+
assert_help "rtk gt" rtk gt --help
|
|
435
|
+
assert_ok "rtk gt log short" rtk gt log short
|
|
436
|
+
else
|
|
437
|
+
skip "gt not installed"
|
|
438
|
+
fi
|
|
439
|
+
|
|
440
|
+
# ── 30. Global flags ────────────────────────────────
|
|
441
|
+
|
|
442
|
+
section "Global flags"
|
|
443
|
+
|
|
444
|
+
assert_ok "rtk -u ls ." rtk -u ls .
|
|
445
|
+
assert_ok "rtk --skip-env npm --help" rtk --skip-env npm --help
|
|
446
|
+
|
|
447
|
+
# ── 31. CcEconomics ─────────────────────────────────
|
|
448
|
+
|
|
449
|
+
section "CcEconomics"
|
|
450
|
+
|
|
451
|
+
assert_ok "rtk cc-economics" rtk cc-economics
|
|
452
|
+
|
|
453
|
+
# ── 32. Learn ───────────────────────────────────────
|
|
454
|
+
|
|
455
|
+
section "Learn"
|
|
456
|
+
|
|
457
|
+
assert_ok "rtk learn --help" rtk learn --help
|
|
458
|
+
assert_ok "rtk learn (no sessions)" rtk learn --since 0 2>&1 || true
|
|
459
|
+
|
|
460
|
+
# ── 32. Rewrite ───────────────────────────────────────
|
|
461
|
+
|
|
462
|
+
section "Rewrite"
|
|
463
|
+
|
|
464
|
+
assert_contains "rewrite git status" "rtk git status" rtk rewrite "git status"
|
|
465
|
+
assert_contains "rewrite cargo test" "rtk cargo test" rtk rewrite "cargo test"
|
|
466
|
+
assert_contains "rewrite compound &&" "rtk git status" rtk rewrite "git status && cargo test"
|
|
467
|
+
assert_contains "rewrite pipe preserves" "| head" rtk rewrite "git log | head"
|
|
468
|
+
|
|
469
|
+
section "Rewrite (#345: RTK_DISABLED skip)"
|
|
470
|
+
|
|
471
|
+
assert_fails "rewrite RTK_DISABLED=1 skip" rtk rewrite "RTK_DISABLED=1 git status"
|
|
472
|
+
assert_fails "rewrite env RTK_DISABLED skip" rtk rewrite "FOO=1 RTK_DISABLED=1 cargo test"
|
|
473
|
+
|
|
474
|
+
section "Rewrite (#346: 2>&1 preserved)"
|
|
475
|
+
|
|
476
|
+
assert_contains "rewrite 2>&1 preserved" "2>&1" rtk rewrite "cargo test 2>&1 | head"
|
|
477
|
+
|
|
478
|
+
section "Rewrite (#196: gh --json skip)"
|
|
479
|
+
|
|
480
|
+
assert_fails "rewrite gh --json skip" rtk rewrite "gh pr list --json number"
|
|
481
|
+
assert_fails "rewrite gh --jq skip" rtk rewrite "gh api /repos --jq .name"
|
|
482
|
+
assert_fails "rewrite gh --template skip" rtk rewrite "gh pr view 1 --template '{{.title}}'"
|
|
483
|
+
assert_contains "rewrite gh normal works" "rtk gh pr list" rtk rewrite "gh pr list"
|
|
484
|
+
|
|
485
|
+
# ── 33. Verify ────────────────────────────────────────
|
|
486
|
+
|
|
487
|
+
section "Verify"
|
|
488
|
+
|
|
489
|
+
assert_ok "rtk verify" rtk verify
|
|
490
|
+
|
|
491
|
+
# ── 34. Proxy ─────────────────────────────────────────
|
|
492
|
+
|
|
493
|
+
section "Proxy"
|
|
494
|
+
|
|
495
|
+
assert_ok "rtk proxy echo hello" rtk proxy echo hello
|
|
496
|
+
assert_contains "rtk proxy passthrough" "hello" rtk proxy echo hello
|
|
497
|
+
|
|
498
|
+
# ── 35. Discover ──────────────────────────────────────
|
|
499
|
+
|
|
500
|
+
section "Discover"
|
|
501
|
+
|
|
502
|
+
assert_ok "rtk discover" rtk discover
|
|
503
|
+
|
|
504
|
+
# ── 36. Diff ──────────────────────────────────────────
|
|
505
|
+
|
|
506
|
+
section "Diff"
|
|
507
|
+
|
|
508
|
+
assert_ok "rtk diff two files" rtk diff Cargo.toml LICENSE
|
|
509
|
+
|
|
510
|
+
# ── 37. Wc ────────────────────────────────────────────
|
|
511
|
+
|
|
512
|
+
section "Wc"
|
|
513
|
+
|
|
514
|
+
assert_ok "rtk wc Cargo.toml" rtk wc Cargo.toml
|
|
515
|
+
|
|
516
|
+
# ── 38. Smart ─────────────────────────────────────────
|
|
517
|
+
|
|
518
|
+
section "Smart"
|
|
519
|
+
|
|
520
|
+
assert_ok "rtk smart src/main.rs" rtk smart src/main.rs
|
|
521
|
+
|
|
522
|
+
# ── 39. Json edge cases ──────────────────────────────
|
|
523
|
+
|
|
524
|
+
section "Json (edge cases)"
|
|
525
|
+
|
|
526
|
+
assert_fails "rtk json on TOML (#347)" rtk json Cargo.toml
|
|
527
|
+
|
|
528
|
+
# ── 40. Docker (conditional) ─────────────────────────
|
|
529
|
+
|
|
530
|
+
section "Docker (conditional)"
|
|
531
|
+
|
|
532
|
+
if command -v docker >/dev/null 2>&1 && docker info >/dev/null 2>&1; then
|
|
533
|
+
assert_ok "rtk docker ps" rtk docker ps
|
|
534
|
+
assert_ok "rtk docker images" rtk docker images
|
|
535
|
+
else
|
|
536
|
+
skip_test "rtk docker" "docker not running"
|
|
537
|
+
fi
|
|
538
|
+
|
|
539
|
+
# ── 41. Hook check ───────────────────────────────────
|
|
540
|
+
|
|
541
|
+
section "Hook check (#344)"
|
|
542
|
+
|
|
543
|
+
assert_contains "rtk init --show hook version" "version" rtk init --show
|
|
544
|
+
|
|
545
|
+
# ══════════════════════════════════════════════════════
|
|
546
|
+
# Report
|
|
547
|
+
# ══════════════════════════════════════════════════════
|
|
548
|
+
|
|
549
|
+
printf "\n${BOLD}══════════════════════════════════════${NC}\n"
|
|
550
|
+
printf "${BOLD}Results: ${GREEN}%d passed${NC}, ${RED}%d failed${NC}, ${YELLOW}%d skipped${NC}\n" "$PASS" "$FAIL" "$SKIP"
|
|
551
|
+
|
|
552
|
+
if [[ ${#FAILURES[@]} -gt 0 ]]; then
|
|
553
|
+
printf "\n${RED}Failures:${NC}\n"
|
|
554
|
+
for f in "${FAILURES[@]}"; do
|
|
555
|
+
printf " - %s\n" "$f"
|
|
556
|
+
done
|
|
557
|
+
fi
|
|
558
|
+
|
|
559
|
+
printf "${BOLD}══════════════════════════════════════${NC}\n"
|
|
560
|
+
|
|
561
|
+
exit "$FAIL"
|