{"id":35145220,"url":"https://github.com/denchenko/gg","last_synced_at":"2026-03-27T02:35:13.021Z","repository":{"id":331096800,"uuid":"1111557094","full_name":"denchenko/gg","owner":"denchenko","description":"Custom git(lab) CLI","archived":false,"fork":false,"pushed_at":"2025-12-30T17:13:27.000Z","size":89,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-03T02:55:23.462Z","etag":null,"topics":["cli","git","gitlab","hook","roulette"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/denchenko.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-07T07:14:24.000Z","updated_at":"2025-12-30T17:13:31.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/denchenko/gg","commit_stats":null,"previous_names":["denchenko/gg"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/denchenko/gg","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/denchenko%2Fgg","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/denchenko%2Fgg/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/denchenko%2Fgg/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/denchenko%2Fgg/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/denchenko","download_url":"https://codeload.github.com/denchenko/gg/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/denchenko%2Fgg/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31010579,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-27T02:33:22.146Z","status":"ssl_error","status_checked_at":"2026-03-27T02:33:21.763Z","response_time":164,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","git","gitlab","hook","roulette"],"created_at":"2025-12-28T13:40:54.262Z","updated_at":"2026-03-27T02:35:13.012Z","avatar_url":"https://github.com/denchenko.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# gg\n\n[![Go Report Card](https://goreportcard.com/badge/github.com/denchenko/gg)](https://goreportcard.com/report/github.com/denchenko/gg)\n[![GoDoc](https://godoc.org/github.com/denchenko/gg?status.svg)](https://godoc.org/github.com/denchenko/gg)\n\nA CLI tool for managing GitLab merge requests with intelligent workload analysis and automatic assignment suggestions.\n\n```\n∙ gg my mr\nFetching your merge requests... [done]\n4 total, 1 ready-to-merge, 2 stalled\n┌─ denchenko/example-repository-1 ──────────────────────────────────────────────────┐\n│\n│ ISSUE-1 | mvp\n│   URL: https://gitlab.com/denchenko/example-repository-1/-/merge_requests/65\n│   Assignee: bob\n│   Reviewers: None\n│   Approvals: None\n│   Created: 2025-12-04 12:36:17\n│   Updated: 2025-12-05 15:02:32\n│\n│ [ready-to-merge] ISSUE-2 | fixes\n│   URL: https://gitlab.com/denchenko/example-repository-1/-/merge_requests/66\n│   Assignee: alice\n│   Reviewers: None\n│   Approvals: alice\n│   Created: 2025-12-05 10:52:28\n│   Updated: 2025-12-05 10:52:32\n│\n│ [stalled] ISSUE-3 | test\n│   URL: https://gitlab.com/denchenko/example-repository-1/-/merge_requests/67\n│   Assignee: alice\n│   Reviewers: None\n│   Approvals: None\n│   Created: 2025-11-13 14:40:04\n│   Updated: 2025-11-14 09:23:22\n│\n└───────────────────────────────────────────────────────────────────────────────────┘\n┌─ denchenko/example-repository-2 ──────────────────────────────────────────────────┐\n│\n│ [stalled] Draft: ISSUE-4 | new feature\n│   URL: https://gitlab.com/denchenko/example-repository-2/-/merge_requests/68\n│   Assignee: bob\n│   Reviewers: None\n│   Approvals: None\n│   Created: 2025-08-26 15:31:28\n│   Updated: 2025-08-27 16:31:52\n│\n└───────────────────────────────────────────────────────────────────────────────────┘\n```\n\n## Configuration\n\nEnvironment:\n- `GG_TOKEN` (required) - Your GitLab personal access token with `api` scope\n- `GG_TEAM` (required) - Comma-separated list of team member usernames (e.g., `user1,user2,user3`)\n- `GG_BASE_URL` (optional) - GitLab instance URL (defaults to `https://gitlab.com`)\n- `GG_WEBHOOK_ADDRESS` (optional) - Web Hook listen address (defaults to `:8080`)\n- `GG_ISSUE_URL_TEMPLATE` (optional) - Template for generating issue URLs. Must contain `{{.Issue}}` placeholder (e.g., `https://jira.com/browse/{{.Issue}}`)\n\nThe current project, branch, and merge request can be infered from the Git repository you run it in, so most commands work without manually passing these identifiers.\n\n## Usage\n\n### CLI\n\n**Install:**\n```bash\ngo install github.com/denchenko/gg/cmd/gg@latest\n```\n\nThe CLI provides commands for managing merge requests and analyzing team workload:\n\n- `gg my mr` - Show your personal merge requests with status information\n- `gg my review` - Display your review workload (MRs assigned to you or requiring your review)\n- `gg my activity` - Show your activity events (pushes, comments, MR actions, etc.). Defaults to events from the last working day\n- `gg team review` - Show team-wide workload overview with active MR counts per member\n- `gg mr roulette` - Analyze team workload and suggest optimal assignee and reviewer for a merge request\n- `gg mr status` - Show detailed status information for a merge request\n- `gg mr browse` - Open the merge request for the current git branch in your default browser\n- `gg issue browse` - Open the issue linked to the current branch's merge request in your default browser\n\n### Webhook Server\n\n**Install:**\n```bash\ngo install github.com/denchenko/gg/cmd/hook@latest\n```\n\nThe webhook server automatically assigns assignees and reviewers to merge requests when they are opened (excluding draft MRs and those already assigned).\n\nThe server will start on port `8080` by default and listen for webhooks at `/gitlab/hook`.\n\n**GitLab Webhook Configuration:**\n\n1. Go to your GitLab project → Settings → Webhooks\n2. Add a new webhook with URL: `http://your-server:8080/gitlab/hook`\n3. Select \"Merge request events\" trigger\n4. Save the webhook\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdenchenko%2Fgg","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdenchenko%2Fgg","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdenchenko%2Fgg/lists"}