{"id":19541595,"url":"https://github.com/brigadecore/badgr","last_synced_at":"2026-06-13T08:31:41.114Z","repository":{"id":37100948,"uuid":"405188426","full_name":"brigadecore/badgr","owner":"brigadecore","description":"Serves badges based on the status of GitHub check suites","archived":false,"fork":false,"pushed_at":"2023-02-25T03:38:58.000Z","size":119,"stargazers_count":1,"open_issues_count":2,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-02-26T05:19:22.239Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/brigadecore.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-09-10T19:13:43.000Z","updated_at":"2022-03-21T17:41:46.000Z","dependencies_parsed_at":"2024-06-19T19:03:25.808Z","dependency_job_id":"9b408eff-6d44-45f0-ac5e-5cfa6c1df055","html_url":"https://github.com/brigadecore/badgr","commit_stats":{"total_commits":44,"total_committers":3,"mean_commits":"14.666666666666666","dds":"0.38636363636363635","last_synced_commit":"06532c652d8f8530e331b076b99a1decff2c2606"},"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/brigadecore/badgr","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brigadecore%2Fbadgr","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brigadecore%2Fbadgr/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brigadecore%2Fbadgr/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brigadecore%2Fbadgr/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/brigadecore","download_url":"https://codeload.github.com/brigadecore/badgr/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brigadecore%2Fbadgr/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34278153,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-13T02:00:06.617Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":[],"created_at":"2024-11-11T03:11:12.004Z","updated_at":"2026-06-13T08:31:41.093Z","avatar_url":"https://github.com/brigadecore.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Badgr\n\n![badgr](https://badgr.brigade2.io/v1/github/checks/brigadecore/badgr/badge.svg?appID=99005)\n[![codecov](https://codecov.io/gh/brigadecore/badgr/branch/main/graph/badge.svg?token=N1SQx2TZt0)](https://codecov.io/gh/brigadecore/badgr)\n[![Go Report Card](https://goreportcard.com/badge/github.com/brigadecore/badgr)](https://goreportcard.com/report/github.com/brigadecore/badgr)\n[![slack](https://img.shields.io/badge/slack-brigade-brightgreen.svg?logo=slack)](https://kubernetes.slack.com/messages/C87MF1RFD)\n\nBadgr's creators love using [shields.io](https://shields.io/), for displaying\nvarious project statuses in our READMEs, but it doesn't support something we\nwanted badly-- the ability to generate a badge based on the results of a GitHub\ncheck suite associated with a specific GitHub App.\n\nGiven a repo owner, repo name, and optional branch name, Badgr queries for\nGitHub check suite results, consolidates them into a single status (by selecting\nthe \"most severe\"\u003csup\u003e*\u003c/sup\u003e among the results), then delegates to\n[shields.io](https://shields.io/) to serve the corresponding badge. If a GitHub\nApp ID is also specified, the badge will reflect _only_ the results of check\nsuites associates with that App.\n\n\u003csup\u003e*\u003c/sup\u003eHere is how Badgr evaluates check suite severity, from least severe\nto most:\n\n* __Passed:__ Check suite has run to completion and succeeded.\n* __In Progress:__ One or more checks in the check suite have progressed past\n  the queued state, but not all checks are complete.\n* __Queued:__ No check in the check suite is either complete or in progress.\n* __Neutral:__ Check suite has run to completion and neither failed nor\n  succeeded.\n* __Canceled:__ Check suite has been voluntarily terminated by a user or some\n  other process.\n* __Action Required:__ Check suite has run to completion but some action is\n  required from a user.\n* __Timed Out:__ Check suite has timed out.\n* __Failed:__ Check suite has run to completion and failed.\n* __Unknown:__ Badgr has been unable to determine the check suite's status.\n\nBadgr also uses Redis to cache results to avoid getting rate limited by the\nGitHub Checks API. The cache is composed of warm and cold layers. The warm layer\ncaches results short term to balance the need for up-to-date results against the\ndesire to not be rate limited. The cold layer caches results longer term to\nreturn a _relatively_ recent result in the event of a communication failure with\nGitHub.\n\n## Installation\n\nPrerequisites:\n\n* A Kubernetes cluster for which you have the `admin` cluster role\n\n* `kubectl` and `helm` (commands below require Helm 3.7.0+)\n\n### 1. Install Badgr\n\nFor now, we're using the [GitHub Container Registry](https://ghcr.io) (which is\nan [OCI registry](https://helm.sh/docs/topics/registries/)) to host our Helm\nchart. Helm 3.7 has _experimental_ support for OCI registries. In the event that\nthe Helm 3.7 dependency proves troublesome for users, or in the event that this\nexperimental feature goes away, or isn't working like we'd hope, we will revisit\nthis choice before going GA.\n\nFirst, be sure you are using\n[Helm 3.7.0](https://github.com/helm/helm/releases/tag/v3.7.0) or greater and\nenable experimental OCI support:\n\n```shell\n$ export HELM_EXPERIMENTAL_OCI=1\n```\n\nSince this chart requires some slight bit of custom configuration, we'll need to\ncreate a chart values file with said config.\n\nUse the following command to extract the full set of configuration options into\na file you can modify:\n\n```shell\n$ helm inspect values oci://ghcr.io/brigadecore/badgr \\\n    --version v1.1.1 \u003e ~/badgr-values.yaml\n```\n\nEdit `~/badgr-values.yaml`, making the following changes:\n\n* `host`: Set this to the host name where you'd like Badgr to be accessible.\n\n* `service.type`: If you plan to enable ingress (advanced), you can leave this\n  as its default -- `ClusterIP`. If you do not plan to enable ingress, you\n  probably will want to change this value to `LoadBalancer`.\n\nSave your changes to `~/badgr-values.yaml` and use the following command to\ninstall the gateway using the above customizations:\n\n```shell\n$ helm install badgr oci://ghcr.io/brigadecore/badgr \\\n    --version v1.1.1 \\\n    --create-namespace \\\n    --namespace badgr \\\n    --values ~/badgr-values.yaml \\\n    --wait \\\n    --timeout 300s\n```\n\n### 2. (RECOMMENDED) Create a DNS Entry\n\nIf you overrode defaults and set `service.type` to `LoadBalancer`, use this\ncommand to find the gateway's public IP address:\n\n```shell\n$ kubectl get svc badgr \\\n  --namespace badgr \\\n  --output jsonpath='{.status.loadBalancer.ingress[0].ip}'\n```\n\nIf you overrode defaults and enabled support for an ingress controller, you\nprobably know what you're doing well enough to track down the correct IP without\nour help. 😉\n\nWith this public IP in hand, edit your name servers and add an `A` record\npointing your domain to the public IP.\n\n## Usage\n\nTo use, add the following markdown (with appropriate substitutions where you\nsee angled brackets) to your `README.md` or any other markdown doc needing such\na badge:\n\n```markdown\n![badgr](https://\u003chost name\u003e/v1/github/checks/\u003cuser or org name\u003e/\u003crepo name\u003e/badge.svg?branch=\u003coptional branch name\u003e\u0026appID=\u003coptional GitHub App ID\u003e)\n```\n\n## Contributing\n\nBadgr is part of the Brigade project and accepts contributions via GitHub pull\nrequests. The [Contributing](CONTRIBUTING.md) document outlines the process to\nhelp get your contribution accepted.\n\n## Support \u0026 Feedback\n\nWe have a slack channel!\n[Kubernetes/#brigade](https://kubernetes.slack.com/messages/C87MF1RFD) Feel free\nto join for any support questions or feedback, we are happy to help. To report\nan issue or to request a feature open an issue\n[here](https://github.com/brigadecore/badgr/issues)\n\n## Code of Conduct\n\nParticipation in the Brigade project is governed by the\n[CNCF Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrigadecore%2Fbadgr","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbrigadecore%2Fbadgr","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrigadecore%2Fbadgr/lists"}