mirror of
https://github.com/rmdes/indiekit-endpoint-github.git
synced 2026-09-22 06:37:56 +00:00
custom plugin to fetch data from Github for Indiekit
- JavaScript 85.3%
- Nunjucks 10.6%
- CSS 4.1%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
GitHub's public events feed carries a minimal pull_request object - id, number, url, base, head - with no title and no html_url. Every contribution built from it rendered as a bare "repo #944" with an empty title and a dead link. Worse, the entry was non-empty, so the "no contributions" branch never ran and the Search API fallback stayed unreachable. For this account the events feed holds a single action=opened entry while the Search API returns 95 pull requests with real titles, which is the gap that was on display. extractContributions now drops entries it could not fill. All three callers already fall back on an empty result, so they reach the Search API by themselves. Also bounds the dashboard's featured-repo fetch, which had the same unbounded Promise.all that featured.js carried. |
||
| assets | ||
| includes | ||
| lib | ||
| locales | ||
| tests | ||
| views | ||
| .gitignore | ||
| CLAUDE.md | ||
| index.js | ||
| package.json | ||
| README.md | ||
| renovate.json | ||
@rmdes/indiekit-endpoint-github
A GitHub activity endpoint plugin for Indiekit. Display your GitHub commits, stars, contributions, and featured repositories in your Indiekit admin dashboard, with a public JSON API for use in your static site.
Features
- Featured Projects: Showcase specific repositories with recent commits
- Recent Commits: Display your latest commits across repositories
- Starred Repositories: Show repos you've recently starred
- PRs & Issues: Track your open source contributions
- Public API: JSON endpoints for integrating with static site generators
Installation
npm install @rmdes/indiekit-endpoint-github
Configuration
Add the plugin to your Indiekit configuration:
export default {
plugins: [
"@rmdes/indiekit-endpoint-github",
// ... other plugins
],
"@rmdes/indiekit-endpoint-github": {
// Required: Your GitHub username
username: "your-username",
// Optional: GitHub personal access token for higher rate limits
// and access to private repos (set via GITHUB_TOKEN env var)
token: process.env.GITHUB_TOKEN,
// Optional: Mount path for the endpoint (default: "/github")
mountPath: "/github-api",
// Optional: Cache duration in milliseconds (default: 15 minutes)
cacheTtl: 900_000,
// Optional: Limits for each section
limits: {
commits: 10,
stars: 20,
contributions: 10,
repos: 10,
},
// Optional: Featured repositories to showcase with commits
featuredRepos: [
"owner/repo-name",
"owner/another-repo",
],
},
};
Endpoints
Protected (require authentication)
GET /github-api/- Dashboard view with all sectionsGET /github-api/commits- Recent commits pageGET /github-api/stars- Starred repositories pageGET /github-api/contributions- PRs & Issues pageGET /github-api/activity- Activity feed page
Public API (no authentication)
GET /github-api/api/commits- JSON: Recent commitsGET /github-api/api/stars- JSON: Starred repositoriesGET /github-api/api/activity- JSON: Activity feedGET /github-api/api/featured- JSON: Featured repositories with commits
Using the Public API
The public API endpoints return JSON and can be used by your static site generator (Eleventy, Hugo, etc.) to display GitHub activity on your public site.
Example Eleventy data file:
import EleventyFetch from "@11ty/eleventy-fetch";
export default async function() {
const url = "https://your-site.com/github-api/api/featured";
const data = await EleventyFetch(url, {
duration: "15m",
type: "json",
});
return data.featured || [];
}
Environment Variables
GITHUB_TOKEN- Optional GitHub personal access token for:- Higher API rate limits (5000/hour vs 60/hour)
- Access to private repository information
License
MIT