No description
  • Lua 85.1%
  • Shell 13.4%
  • Rust 1.5%
Find a file
Markus Maiwald 6e7db1a442
Some checks failed
Validate Manifests / validate (push) Failing after 1s
feat(forge-bridge): GitHub contributions via GraphQL
Adds lib/github_graphql.lua wrapping the contributionsCollection
GraphQL query. When a token is supplied, lib/github.lua now populates
the two ProGitProfile/v1 contribution fields:

- last_12mo_count: from contributionCalendar.totalContributions
- longest_streak_days: walks the daily array and counts the longest
  consecutive run of days with contributionCount > 0

Anonymous calls leave both fields at 0 — GitHub's GraphQL endpoint
is auth-only, and a failed-but-required call would block the REST
half of the pull. When a token is present but the GraphQL call
fails (scope issue, rate limit, network), the failure is logged
and the REST profile data still goes through.

The query window is "last 365 days ending now" — semantically
"the last year of activity", not a calendar year boundary. The
contributionsCollection API caps the window at 1 year regardless.

tests/test_streak.lua covers compute_longest_streak (gaps, leading
and trailing zeros, missing counts, empty input, single-day),
flatten_calendar (week->day flattening, empty cases), _window_now
ISO 8601 shape, and _build_request bearer-auth header / body shape.
All run under plain LuaJIT — no SDK runtime needed.
2026-05-08 20:02:37 +02:00
.github/workflows Initial plugin registry commit with example plugins 2026-01-30 12:46:53 +01:00
csv-export feat(plugins): sign all plugins with Hinge 2026-05-08 00:22:28 +02:00
forgejo-notify feat(plugins): sign all plugins with Hinge 2026-05-08 00:22:28 +02:00
git-hooks feat: git-hooks plugin with Conventional Commits validation 2026-05-08 17:06:20 +02:00
gitlab-ci feat(plugins): sign all plugins with Hinge 2026-05-08 00:22:28 +02:00
jira-sync feat(plugins): sign all plugins with Hinge 2026-05-08 00:22:28 +02:00
plugins Replace Apache-2.0 with LUL-1.0, rewrite README 2026-03-14 21:15:20 +01:00
progit-ci-runner feat(plugins): scaffold six Tier-1 plugins for Phase 2/3 sprint 2026-05-08 19:49:17 +02:00
progit-codestorage-bridge feat(plugins): scaffold six Tier-1 plugins for Phase 2/3 sprint 2026-05-08 19:49:17 +02:00
progit-copilot-hook feat(plugins): scaffold six Tier-1 plugins for Phase 2/3 sprint 2026-05-08 19:49:17 +02:00
progit-forge-bridge feat(forge-bridge): GitHub contributions via GraphQL 2026-05-08 20:02:37 +02:00
progit-pr-stacker feat(plugins): scaffold six Tier-1 plugins for Phase 2/3 sprint 2026-05-08 19:49:17 +02:00
progit-release-master feat(plugins): scaffold six Tier-1 plugins for Phase 2/3 sprint 2026-05-08 19:49:17 +02:00
progit-syntax-diff feat(plugins): scaffold six Tier-1 plugins for Phase 2/3 sprint 2026-05-08 19:49:17 +02:00
schema Initial plugin registry commit with example plugins 2026-01-30 12:46:53 +01:00
slack-notify feat(plugins): sign all plugins with Hinge 2026-05-08 00:22:28 +02:00
symbio-expert feat(plugins): sign all plugins with Hinge 2026-05-08 00:22:28 +02:00
syntax-highlight feat(plugins): sign all plugins with Hinge 2026-05-08 00:22:28 +02:00
syntax-highlight-wasm feat(plugins): sign all plugins with Hinge 2026-05-08 00:22:28 +02:00
.gitignore chore(gitignore): firewall agent dirs and wrangler cache 2026-05-07 13:59:36 +02:00
categories.json Initial plugin registry commit with example plugins 2026-01-30 12:46:53 +01:00
CONTRIBUTING.md Initial plugin registry commit with example plugins 2026-01-30 12:46:53 +01:00
LICENSE Replace Apache-2.0 with LUL-1.0, rewrite README 2026-03-14 21:15:20 +01:00
README.md Replace Apache-2.0 with LUL-1.0, rewrite README 2026-03-14 21:15:20 +01:00

ProGit Plugin Registry

The official plugin index for ProGit — the git-first, terminal-native project management suite.

Browse and install from plugins.progit.dev · Build your own with the Plugin SDK


Installing Plugins

# Search the registry
prog plugin search forgejo

# Install a plugin
prog plugin install forgejo-notify

# Install a specific version
prog plugin install git-hooks@1.0.0

# Install directly from a git URL
prog plugin install --git https://git.example.org/you/my-plugin.git

# List installed plugins
prog plugin list

Official Plugins

Plugin Category Description
git-hooks Utility Commit hygiene enforcement + issue auto-close via closing keywords
forgejo-notify Integration Post status changes and sync events as Forgejo/Gitea MR comments
gitlab-ci Integration GitLab CI/CD pipeline status in the ProGit TUI

Registry Structure

plugins/
├── integrations/    # External system sync (Forgejo, GitLab, GitHub, Jira …)
├── analytics/       # Metrics, reports, dashboards
└── utilities/       # Automation, quality checks, notifications

<plugin-name>/       # Source for ProGit Team plugins (Lua)
│   └── main.lua
schema/              # JSON Schema for plugin manifests
categories.json      # Category definitions

Publishing Your Plugin

1. Write the plugin

Plugins are Lua scripts (LuaJIT). The sandbox provides:

-- HTTP client
local resp = http.get("https://api.example.org/data", { ["Authorization"] = "Bearer " .. token })
local resp = http.post(url, json.encode(payload), { ["Content-Type"] = "application/json" })
-- resp = { status = 200, body = "...", ok = true }

-- JSON codec
local encoded = json.encode({ key = "value" })
local decoded = json.decode(resp.body)

Every plugin declares a plugin table:

plugin = {
    name        = "my-plugin",
    version     = "1.0.0",
    author      = "Your Name",
    description = "What it does",
    hooks = {
        on_status_changed = true,
        on_sync_push      = true,
    },
}

function on_status_changed(data)
    -- data.id, data.title, data.old_status, data.new_status
    return { notified = true }
end

Full SDK docs: sdk.progit.dev

2. Create a manifest

Add a JSON file to plugins/<category>/<your-plugin>.json:

{
  "name": "my-plugin",
  "version": "1.0.0",
  "description": "What your plugin does (10256 chars)",
  "author": "Your Name",
  "license": "MIT",
  "plugin_type": "integration",
  "runtime": "lua",
  "source_url": "https://git.example.org/you/my-plugin.git",
  "source_tag": "v1.0.0",
  "sdk_version": ">=0.1.0",
  "hooks": ["on_status_changed"]
}

Validate against the schema.

3. Submit a pull request

Fork → add manifest → open PR. We review for:

  • Manifest completeness and schema validity
  • No obvious malicious behaviour in the Lua source
  • Working source_url pointing to a public repo

That's it. No fees, no gatekeeping.


Licensing

The registry index and all ProGit Team plugins are released under the Libertaria Unbound License (LUL) v1.0 — essentially public domain with attribution. Do anything with it.

Your own plugins may use any license you choose.

See LICENSE for the full text.