Loading...
Loading...
Pick a random contributor from a GitHub repository using the GitHub API or repository pages (no auth required for public repos).
npx skill4agent add besoeasy/open-skills random-contributorcurljqREPO_OWNER=besoeasy
REPO_NAME=open-skills
# Fetch contributor list (public API). Uses optional GH_TOKEN env for higher rate limit.
AUTH_HEADER=""
if [ -n "${GH_TOKEN:-}" ]; then
AUTH_HEADER="-H \"Authorization: token ${GH_TOKEN}\""
fi
# Get contributors (first page); for large repos you'd page. Here we do simple pagination loop.
contributors=()
page=1
while true; do
out=$(eval "curl -fsS ${AUTH_HEADER} \"https://api.github.com/repos/${REPO_OWNER}/${REPO_NAME}/contributors?per_page=100&page=${page}\"")
count=$(echo "$out" | jq 'length')
if [ "$count" -eq 0 ]; then break; fi
logins=$(echo "$out" | jq -r '.[].login')
while read -r l; do contributors+=("$l"); done <<< "$logins"
if [ "$count" -lt 100 ]; then break; fi
page=$((page+1))
done
# Pick random
idx=$((RANDOM % ${#contributors[@]}))
selected=${contributors[$idx]}
echo "$selected"async function getRandomContributor(owner, repo, token) {
const headers = {};
if (token) headers['Authorization'] = `token ${token}`;
let page = 1;
const per = 100;
const all = [];
while (true) {
const url = `https://api.github.com/repos/${owner}/${repo}/contributors?per_page=${per}&page=${page}`;
const res = await fetch(url, { headers });
if (!res.ok) break;
const data = await res.json();
if (!Array.isArray(data) || data.length === 0) break;
all.push(...data);
if (data.length < per) break;
page++;
}
if (!all.length) return null;
const pick = all[Math.floor(Math.random() * all.length)];
return {
login: pick.login,
avatar: pick.avatar_url,
profile: pick.html_url,
contributions: pick.contributions
};
}
// Usage:
// getRandomContributor('besoeasy','open-skills', process.env.GH_TOKEN).then(console.log)