Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 0 additions & 5 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,19 +17,14 @@ grep -r "pattern" src/ rtk grep -r "pattern" src/

**rtk meta-commands** (always use these directly, no prefix needed):
```bash
rtk gain # Show token savings analytics
rtk gain --history # Full command history with per-command savings
rtk discover # Scan session history for missed rtk opportunities
rtk proxy <cmd> # Run a command raw (no filtering) but still track it
```

**Verify rtk is installed before starting:**
```bash
rtk --version # Should print: rtk X.Y.Z
rtk gain # Should show a dashboard (not "command not found")
```

> Name collision: `rtk gain` failing means you have `reachingforthejack/rtk` (Rust Type Kit) installed instead. Run `which rtk` to check.

## Build, Test & Lint

Expand Down
18 changes: 6 additions & 12 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -1,19 +1,13 @@
version: 2
updates:
- package-ecosystem: "cargo"
target-branch: "develop"
- package-ecosystem: cargo
directory: "/"
schedule:
interval: "weekly"
labels:
- "dependencies"
open-pull-requests-limit: 5
interval: weekly
open-pull-requests-limit: 10

- package-ecosystem: "github-actions"
target-branch: "develop"
- package-ecosystem: github-actions
directory: "/"
schedule:
interval: "weekly"
labels:
- "dependencies"
- "area:ci"
interval: weekly
open-pull-requests-limit: 10
57 changes: 0 additions & 57 deletions .github/docs-pipeline-contract.md

This file was deleted.

17 changes: 17 additions & 0 deletions .github/workflows/dependency-review.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
name: Dependency Review

on:
pull_request:

permissions:
contents: read

jobs:
dependency-review:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Dependency Review
uses: actions/dependency-review-action@v4
21 changes: 21 additions & 0 deletions .github/workflows/dependency-submission.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
name: Dependency Submission

on:
push:
branches: [master]
schedule:
- cron: "0 8 * * 1"
workflow_dispatch:

permissions:
contents: write

jobs:
submit:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Generate and submit dependency snapshot
uses: advanced-security/cargo-lock-submission@v1
159 changes: 1 addition & 158 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -81,9 +81,6 @@ jobs:

- name: Build
run: cargo build --release --target ${{ matrix.target }}
env:
RTK_TELEMETRY_URL: ${{ vars.RTK_TELEMETRY_URL }}
RTK_TELEMETRY_TOKEN: ${{ secrets.RTK_TELEMETRY_TOKEN }}

- name: Package (Unix)
if: matrix.os != 'windows-latest'
Expand Down Expand Up @@ -120,9 +117,6 @@ jobs:

- name: Build DEB
run: cargo deb
env:
RTK_TELEMETRY_URL: ${{ vars.RTK_TELEMETRY_URL }}
RTK_TELEMETRY_TOKEN: ${{ secrets.RTK_TELEMETRY_TOKEN }}

- name: Upload DEB
uses: actions/upload-artifact@v4
Expand All @@ -147,9 +141,6 @@ jobs:

- name: Build release
run: cargo build --release
env:
RTK_TELEMETRY_URL: ${{ vars.RTK_TELEMETRY_URL }}
RTK_TELEMETRY_TOKEN: ${{ secrets.RTK_TELEMETRY_TOKEN }}

- name: Generate RPM
run: cargo generate-rpm
Expand All @@ -165,13 +156,6 @@ jobs:
needs: [build, build-deb, build-rpm]
runs-on: ubuntu-latest
steps:
- uses: actions/create-github-app-token@v3
id: app-token
with:
client-id: ${{ secrets.APP_CLIENT_ID }}
private-key: ${{ secrets.APP_PRIVATE_KEY }}
permission-contents: write

- name: Checkout
uses: actions/checkout@v4

Expand Down Expand Up @@ -215,147 +199,6 @@ jobs:
tag_name: ${{ steps.version.outputs.version }}
files: release/*
prerelease: ${{ inputs.prerelease }}
token: ${{ steps.app-token.outputs.token }}

notify-discord:
name: Notify Discord
needs: [release]
if: ${{ !inputs.prerelease }}
runs-on: ubuntu-latest
steps:
- name: Get version
id: version
run: |
TAG="${{ inputs.tag }}"
if [ -z "$TAG" ]; then
TAG="${{ github.event.release.tag_name }}"
fi
echo "tag=$TAG" >> $GITHUB_OUTPUT

- name: Send Discord notification
env:
DISCORD_WEBHOOK: ${{ secrets.RTK_DISCORD_RELEASE }}
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
TAG="${{ steps.version.outputs.tag }}"
RELEASE_URL="https://github.com/rtk-ai/rtk/releases/tag/${TAG}"

# Fetch release notes from GitHub API
NOTES=$(gh api "repos/rtk-ai/rtk/releases/tags/${TAG}" --jq '.body' 2>/dev/null | head -c 1800 || echo "")
DESC=$(echo "${NOTES:-No release notes}" | jq -Rs .)
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

jq -n \
--arg title "RTK ${TAG} released" \
--arg url "$RELEASE_URL" \
--argjson desc "$DESC" \
'{embeds: [{title: $title, url: $url, description: $desc, color: 5814783, footer: {text: "Rust Token Killer"}}]}' \
| curl -sf -H "Content-Type: application/json" -d @- "$DISCORD_WEBHOOK"

homebrew:
name: Update Homebrew formula
needs: [release]
if: ${{ !inputs.prerelease }}
runs-on: ubuntu-latest
steps:
- name: Get version
id: version
run: |
TAG="${{ inputs.tag }}"
if [ -z "$TAG" ]; then
TAG="${{ github.event.release.tag_name }}"
fi
VERSION="${TAG#v}"
echo "tag=$TAG" >> $GITHUB_OUTPUT
echo "version=$VERSION" >> $GITHUB_OUTPUT

- name: Download checksums
run: |
gh release download "${{ steps.version.outputs.tag }}" \
--repo rtk-ai/rtk \
--pattern checksums.txt
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Parse checksums
id: sha
run: |
echo "mac_arm=$(grep aarch64-apple-darwin.tar.gz checksums.txt | head -1 | awk '{print $1}')" >> $GITHUB_OUTPUT
echo "mac_intel=$(grep x86_64-apple-darwin.tar.gz checksums.txt | head -1 | awk '{print $1}')" >> $GITHUB_OUTPUT
echo "linux_arm=$(grep aarch64-unknown-linux-gnu.tar.gz checksums.txt | head -1 | awk '{print $1}')" >> $GITHUB_OUTPUT
echo "linux_intel=$(grep x86_64-unknown-linux-musl.tar.gz checksums.txt | head -1 | awk '{print $1}')" >> $GITHUB_OUTPUT

- name: Generate formula
run: |
cat > rtk.rb << 'FORMULA'
class Rtk < Formula
desc "Rust Token Killer - High-performance CLI proxy to minimize LLM token consumption"
homepage "https://www.rtk-ai.app"
version "VERSION_PLACEHOLDER"
license "MIT"

if OS.mac? && Hardware::CPU.arm?
url "https://github.com/rtk-ai/rtk/releases/download/TAG_PLACEHOLDER/rtk-aarch64-apple-darwin.tar.gz"
sha256 "SHA_MAC_ARM_PLACEHOLDER"
elsif OS.mac? && Hardware::CPU.intel?
url "https://github.com/rtk-ai/rtk/releases/download/TAG_PLACEHOLDER/rtk-x86_64-apple-darwin.tar.gz"
sha256 "SHA_MAC_INTEL_PLACEHOLDER"
elsif OS.linux? && Hardware::CPU.arm?
url "https://github.com/rtk-ai/rtk/releases/download/TAG_PLACEHOLDER/rtk-aarch64-unknown-linux-gnu.tar.gz"
sha256 "SHA_LINUX_ARM_PLACEHOLDER"
elsif OS.linux? && Hardware::CPU.intel?
url "https://github.com/rtk-ai/rtk/releases/download/TAG_PLACEHOLDER/rtk-x86_64-unknown-linux-musl.tar.gz"
sha256 "SHA_LINUX_INTEL_PLACEHOLDER"
end

def install
bin.install "rtk"
end

def caveats
<<~EOS
rtk is installed! Get started:

# Initialize for Claude Code
rtk init -g # Global hook-first setup (recommended)
rtk init # Add to ./CLAUDE.md (this project only)

# See all commands
rtk --help

# Measure your token savings
rtk gain

Full documentation: https://www.rtk-ai.app
EOS
end

test do
system "#{bin}/rtk", "--version"
end
end
FORMULA
sed -i "s/VERSION_PLACEHOLDER/${{ steps.version.outputs.version }}/g" rtk.rb
sed -i "s/TAG_PLACEHOLDER/${{ steps.version.outputs.tag }}/g" rtk.rb
sed -i "s/SHA_MAC_ARM_PLACEHOLDER/${{ steps.sha.outputs.mac_arm }}/g" rtk.rb
sed -i "s/SHA_MAC_INTEL_PLACEHOLDER/${{ steps.sha.outputs.mac_intel }}/g" rtk.rb
sed -i "s/SHA_LINUX_ARM_PLACEHOLDER/${{ steps.sha.outputs.linux_arm }}/g" rtk.rb
sed -i "s/SHA_LINUX_INTEL_PLACEHOLDER/${{ steps.sha.outputs.linux_intel }}/g" rtk.rb
# Remove leading spaces from heredoc
sed -i 's/^ //' rtk.rb

- name: Push to homebrew-tap
run: |
CONTENT=$(base64 -w 0 rtk.rb)
SHA=$(gh api repos/rtk-ai/homebrew-tap/contents/Formula/rtk.rb --jq '.sha' 2>/dev/null || echo "")
if [ -n "$SHA" ]; then
gh api -X PUT repos/rtk-ai/homebrew-tap/contents/Formula/rtk.rb \
-f message="rtk ${{ steps.version.outputs.version }}" \
-f content="$CONTENT" \
-f sha="$SHA"
else
gh api -X PUT repos/rtk-ai/homebrew-tap/contents/Formula/rtk.rb \
-f message="rtk ${{ steps.version.outputs.version }}" \
-f content="$CONTENT"
fi
env:
GH_TOKEN: ${{ secrets.HOMEBREW_TAP_TOKEN }}
Loading
Loading