Files
awesome-ai-devtools/get_commit_dates.sh
T
James Murdza acda369d7a Add script to fetch latest commit dates from GitHub repos
- Created get_commit_dates.sh that queries GitHub API for 110 repos
- Outputs CSV with repo name, last commit date, days since commit, status
- Includes summary statistics and top 10 most/least recently updated repos
- Generated repo_commit_dates.csv with results (91 successful, 8 not found, 11 empty)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-05-16 03:40:56 +00:00

220 lines
6.6 KiB
Bash
Executable File

#!/bin/bash
# Script to get the most recent commit date from each GitHub repository
# Uses GitHub API via curl
# Array of GitHub repos (owner/repo format)
repos=(
"stravu/crystal"
"mutableai/monitors4codegen"
"DeepMyst/Mysti"
"onllm-dev/onUI"
"cafeTechne/antigravity-link-extension"
"Pythagora-io/gpt-pilot"
"AntonOsika/gpt-engineer"
"smol-ai/developer"
"kill136/axon"
"arctic-cli/interface"
"JuliusBrussee/blueprint"
"manaflow-ai/cmux"
"modern-tooling/aloc"
"belingud/gptcomet"
"BrodaNoel/cmd-ai"
"baz-scm/baz-cli"
"arimxyer/models"
"Shashwat-Gupta57/Jctx"
"fengshao1227/ccg-workflow"
"yjcho9317/aiignore-cli"
"lasantosr/intelli-shell"
"iwe-org/iwe"
"inevolin/resume-cli"
"Houseofmvps/codesight"
"Lucas2944/prpack"
"oxgeneral/ORCH"
"muvon/octomind"
"stackblitz-labs/bolt.diy"
"kurtnebiev-elvis4/ai-vertical-saas-gen"
"melih-unsal/DemoGPT"
"maroondlabs/sourcebook"
"ashfordeOU/grasp"
"reflex-search/reflex"
"LeonardoCardoso/Poirot"
"btangonan/anima"
"agentfm-ai/agent-fm"
"Moresl/cchub"
"Charlie85270/Dorothy"
"johannesjo/parallel-code"
"im4codes/imcodes"
"larryxiao/openquack"
"qodo-ai/pr-agent"
"Nayjest/Gito"
"tarmojussila/zai-code-review"
"tarmojussila/minimax-code-review"
"indoor47/claude-pr-reviewer"
"Lucas2944/prpack-action"
"codeintegrity-ai/mutahunter"
"AnswerLayer/sniffbench"
"marcus/sidecar"
"pacificstudio/openase"
"mindfold-ai/Trellis"
"0xranx/golembot"
"shep-ai/cli"
"chernistry/bernstein"
"avelikiy/great_cto"
"kagan-sh/kagan"
"LucasDuys/forge"
"swarmclawai/swarmclaw"
"cueapi/cueapi-core"
"samfoy/pi-ralph"
"stacklok/brood-box"
"Th0rgal/openagent"
"metalbear-co/mirrord"
"metalbear-co/skills"
"agenttier/agenttier"
"nedcodes-ok/cursor-doctor"
"YawLabs/ctxlint"
"juyterman1000/entroly"
"rely-ai-org/caliber"
"adhenawer/claude-snapshot"
"mzmmoazam/claude-overlay"
"nicepkg/vsync"
"nedcodes-ok/rule-porter"
"GeiserX/LynxPrompt"
"conduit8/conduit8"
"henu-wang/tokrepo"
"Wolfe-Jam/faf-cli"
"1broseidon/promptext"
"sagarmk/beacon-plugin"
"nedcodes-ok/rule-gen"
"samfoy/pi-steering-hooks"
"dwgoldie/gestalt"
"spartan-stratos/spartan-ai-toolkit"
"nex-crm/nex-as-a-skill"
"koriyoshi2041/agentify"
"fastxyz/skill-optimizer"
"kubestellar/console"
"sisyphusse1-ops/claude-code-pro-pack"
"sisyphusse1-ops/cc-audit"
"Fr-e-d/GAAI-framework"
"junhoyeo/tokscale"
"melagiri/code-insights"
"luoyuctl/agenttrace"
"onllm-dev/onwatch"
"Astro-Han/claude-lens"
"O0000-code/cc-tempo"
"lunacompsia-oss/ai-coding-tools-pricing"
"jeongwookie/WhereMyTokens"
"dwylq/aicost"
"CodeShuX/tokenwise"
"HexmosTech/git-lrc"
"pmusolino/AI-Git-Narrator"
"eli64s/readme-ai"
"johnxie/awesome-code-docs"
"survivorforge/cursor-rules"
"dohko04/awesome-ai-prompts-for-devs"
"jnMetaCode/ai-coding-guide"
"nowork-studio/awesome-ai-startups"
"jamesmurdza/awesome-ai-devtools"
)
# Output file
output_file="/home/daytona/project/repo_commit_dates.csv"
# Write CSV header
echo "Repository,Last Commit Date,Days Since Last Commit,Status" > "$output_file"
echo "Fetching commit dates for ${#repos[@]} repositories..."
echo "This may take a few minutes..."
echo ""
# Counter for progress
count=0
total=${#repos[@]}
for repo in "${repos[@]}"; do
count=$((count + 1))
# Get the latest commit date using GitHub API via curl
response=$(curl -s -H "Accept: application/vnd.github.v3+json" \
"https://api.github.com/repos/$repo/commits?per_page=1" 2>&1)
# Check for rate limiting
if echo "$response" | grep -q "rate limit"; then
echo "$repo,RATE_LIMITED,N/A,Rate limited" >> "$output_file"
echo "[$count/$total] $repo: RATE LIMITED"
sleep 2
continue
fi
# Check for not found
if echo "$response" | grep -q '"message": "Not Found"'; then
echo "$repo,NOT_FOUND,N/A,Repository not found" >> "$output_file"
echo "[$count/$total] $repo: NOT FOUND"
continue
fi
# Check for empty repo
if echo "$response" | grep -q '"message": "Git Repository is empty"'; then
echo "$repo,EMPTY,N/A,Empty repository" >> "$output_file"
echo "[$count/$total] $repo: EMPTY REPO"
continue
fi
# Extract the commit date using jq
commit_date=$(echo "$response" | jq -r '.[0].commit.committer.date // empty' 2>/dev/null)
if [ -n "$commit_date" ] && [ "$commit_date" != "null" ]; then
# Format the date nicely (handle ISO 8601 format)
formatted_date=$(date -d "$commit_date" '+%Y-%m-%d %H:%M:%S' 2>/dev/null || echo "$commit_date")
# Calculate days since last commit
commit_timestamp=$(date -d "$commit_date" '+%s' 2>/dev/null)
current_timestamp=$(date '+%s')
if [ -n "$commit_timestamp" ]; then
days_ago=$(( (current_timestamp - commit_timestamp) / 86400 ))
else
days_ago="N/A"
fi
echo "$repo,$formatted_date,$days_ago,OK" >> "$output_file"
echo "[$count/$total] $repo: $formatted_date ($days_ago days ago)"
else
echo "$repo,NO_COMMITS,N/A,No commits found" >> "$output_file"
echo "[$count/$total] $repo: NO COMMITS"
fi
# Small delay to avoid rate limiting (GitHub allows 60 requests/hour unauthenticated)
sleep 1
done
echo ""
echo "================================================"
echo "Results saved to: $output_file"
echo "================================================"
echo ""
# Print summary statistics
echo "Summary Statistics:"
echo "-------------------"
total_ok=$(grep -c ",OK$" "$output_file" 2>/dev/null || echo "0")
total_not_found=$(grep -c "NOT_FOUND" "$output_file" 2>/dev/null || echo "0")
total_rate_limited=$(grep -c "RATE_LIMITED" "$output_file" 2>/dev/null || echo "0")
echo "Successfully fetched: $total_ok"
echo "Not found: $total_not_found"
echo "Rate limited: $total_rate_limited"
# Show most recently updated repos
echo ""
echo "Top 10 Most Recently Updated Repos:"
echo "------------------------------------"
grep ",OK$" "$output_file" | sort -t',' -k2 -r | head -10 | while IFS=',' read -r repo date days status; do
echo "$date - $repo ($days days ago)"
done
echo ""
echo "Top 10 Least Recently Updated Repos:"
echo "-------------------------------------"
grep ",OK$" "$output_file" | sort -t',' -k3 -n -r | head -10 | while IFS=',' read -r repo date days status; do
echo "$date - $repo ($days days ago)"
done