From c5c36a23eaeb1d5c87756b9fe82566aa85999725 Mon Sep 17 00:00:00 2001 From: catlog22 Date: Fri, 3 Oct 2025 13:00:06 +0800 Subject: [PATCH] fix: Optimize version command API calls and data extraction MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Change API endpoint from /branches/main to /commits/main for reliable commit info - Add 30-second timeout to all network calls for slow connections - Extract release name and published date from latest release - Extract commit message (first line only) using improved parsing - Add commit date extraction from main branch - Update documentation with API endpoints and timeout configuration - Fix commit message extraction to handle JSON escape sequences 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- .claude/commands/version.md | 71 +++++++++++++++++++++++++++++++------ 1 file changed, 60 insertions(+), 11 deletions(-) diff --git a/.claude/commands/version.md b/.claude/commands/version.md index 307a3adc..3e5d0f73 100644 --- a/.claude/commands/version.md +++ b/.claude/commands/version.md @@ -76,36 +76,60 @@ Installed: 2025-10-03T12:00:00Z ## Step 3: Fetch Latest Stable Release -### Call GitHub API for latest release +### Call GitHub API for latest release (with timeout) ```bash -bash(curl -fsSL "https://api.github.com/repos/catlog22/Claude-Code-Workflow/releases/latest" 2>/dev/null) +bash(curl -fsSL "https://api.github.com/repos/catlog22/Claude-Code-Workflow/releases/latest" 2>/dev/null, timeout: 30000) ``` ### Extract tag name (version) ```bash -bash(curl -fsSL "https://api.github.com/repos/catlog22/Claude-Code-Workflow/releases/latest" 2>/dev/null | grep -o '"tag_name": *"[^"]*"' | head -1 | cut -d'"' -f4) +bash(curl -fsSL "https://api.github.com/repos/catlog22/Claude-Code-Workflow/releases/latest" 2>/dev/null | grep -o '"tag_name": *"[^"]*"' | head -1 | cut -d'"' -f4, timeout: 30000) +``` + +### Extract release name +```bash +bash(curl -fsSL "https://api.github.com/repos/catlog22/Claude-Code-Workflow/releases/latest" 2>/dev/null | grep -o '"name": *"[^"]*"' | head -1 | cut -d'"' -f4, timeout: 30000) +``` + +### Extract published date +```bash +bash(curl -fsSL "https://api.github.com/repos/catlog22/Claude-Code-Workflow/releases/latest" 2>/dev/null | grep -o '"published_at": *"[^"]*"' | cut -d'"' -f4, timeout: 30000) ``` **Output Format**: ``` Latest Stable: v3.2.2 +Release: v3.2.2: Independent Test-Gen Workflow with Cross-Session Context +Published: 2025-10-03T04:10:08Z ``` ## Step 4: Fetch Latest Main Branch -### Call GitHub API for main branch +### Call GitHub API for latest commit on main (with timeout) ```bash -bash(curl -fsSL "https://api.github.com/repos/catlog22/Claude-Code-Workflow/branches/main" 2>/dev/null) +bash(curl -fsSL "https://api.github.com/repos/catlog22/Claude-Code-Workflow/commits/main" 2>/dev/null, timeout: 30000) ``` ### Extract commit SHA (short) ```bash -bash(curl -fsSL "https://api.github.com/repos/catlog22/Claude-Code-Workflow/branches/main" 2>/dev/null | grep -o '"sha": *"[^"]*"' | head -1 | cut -d'"' -f4 | cut -c1-7) +bash(curl -fsSL "https://api.github.com/repos/catlog22/Claude-Code-Workflow/commits/main" 2>/dev/null | grep -o '"sha": *"[^"]*"' | head -1 | cut -d'"' -f4 | cut -c1-7, timeout: 30000) +``` + +### Extract commit message (first line only) +```bash +bash(curl -fsSL "https://api.github.com/repos/catlog22/Claude-Code-Workflow/commits/main" 2>/dev/null | grep '"message":' | cut -d'"' -f4 | cut -d'\' -f1, timeout: 30000) +``` + +### Extract commit date +```bash +bash(curl -fsSL "https://api.github.com/repos/catlog22/Claude-Code-Workflow/commits/main" 2>/dev/null | grep -o '"date": *"[^"]*"' | head -1 | cut -d'"' -f4, timeout: 30000) ``` **Output Format**: ``` -Latest Dev: a1b2c3d +Latest Dev: a03415b +Message: feat: Add version tracking and upgrade check system +Date: 2025-10-03T04:46:44Z ``` ## Step 5: Compare Versions and Suggest Upgrade @@ -166,11 +190,23 @@ bash(cat version.json | grep -o '"version": *"[^"]*"' | cut -d'"' -f4) # Extract date from JSON bash(cat version.json | grep -o '"installation_date_utc": *"[^"]*"' | cut -d'"' -f4) -# Fetch latest release -bash(curl -fsSL "https://api.github.com/repos/catlog22/Claude-Code-Workflow/releases/latest") +# Fetch latest release (with timeout) +bash(curl -fsSL "https://api.github.com/repos/catlog22/Claude-Code-Workflow/releases/latest" 2>/dev/null, timeout: 30000) # Extract tag name -bash(curl -s https://api.github.com/repos/catlog22/Claude-Code-Workflow/releases/latest | grep -o '"tag_name": *"[^"]*"' | cut -d'"' -f4) +bash(curl -fsSL "https://api.github.com/repos/catlog22/Claude-Code-Workflow/releases/latest" 2>/dev/null | grep -o '"tag_name": *"[^"]*"' | cut -d'"' -f4, timeout: 30000) + +# Extract release name +bash(curl -fsSL "https://api.github.com/repos/catlog22/Claude-Code-Workflow/releases/latest" 2>/dev/null | grep -o '"name": *"[^"]*"' | head -1 | cut -d'"' -f4, timeout: 30000) + +# Fetch latest commit (with timeout) +bash(curl -fsSL "https://api.github.com/repos/catlog22/Claude-Code-Workflow/commits/main" 2>/dev/null, timeout: 30000) + +# Extract commit SHA +bash(curl -fsSL "https://api.github.com/repos/catlog22/Claude-Code-Workflow/commits/main" 2>/dev/null | grep -o '"sha": *"[^"]*"' | head -1 | cut -d'"' -f4 | cut -c1-7, timeout: 30000) + +# Extract commit message (first line) +bash(curl -fsSL "https://api.github.com/repos/catlog22/Claude-Code-Workflow/commits/main" 2>/dev/null | grep '"message":' | cut -d'"' -f4 | cut -d'\' -f1, timeout: 30000) # Compare versions bash(printf "%s\n%s" "3.2.1" "3.2.2" | sort -V | tail -n 1) @@ -204,8 +240,21 @@ ERROR: version.json is invalid or corrupted - Uses simple, direct bash commands instead of complex functions - Each step is independent and can be executed separately - Fallback to grep/sed for JSON parsing (no jq dependency required) -- Network calls use curl with error suppression +- Network calls use curl with error suppression and 30-second timeout - Version comparison uses `sort -V` for accurate semantic versioning +- Use `/commits/main` API instead of `/branches/main` for more reliable commit info +- Extract first line of commit message using `cut -d'\' -f1` to handle JSON escape sequences + +## API Endpoints + +### GitHub API Used +- **Latest Release**: `https://api.github.com/repos/catlog22/Claude-Code-Workflow/releases/latest` + - Fields: `tag_name`, `name`, `published_at` +- **Latest Commit**: `https://api.github.com/repos/catlog22/Claude-Code-Workflow/commits/main` + - Fields: `sha`, `commit.message`, `commit.author.date` + +### Timeout Configuration +All network calls should use `timeout: 30000` (30 seconds) to handle slow connections. ## Related Commands - `/cli:cli-init` - Initialize CLI configurations