{"id":20179188,"url":"https://github.com/janpreet/kado-proxy","last_synced_at":"2026-04-22T23:33:42.564Z","repository":{"id":252872039,"uuid":"841748119","full_name":"janpreet/kado-proxy","owner":"janpreet","description":"A lightweight Go proxy for managing GitHub API rate limits. Part of the kado ecosystem, it sits between your tools and GitHub's API, ensuring smooth interactions and preventing rate limit issues.","archived":false,"fork":false,"pushed_at":"2024-08-13T02:55:23.000Z","size":42,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-03T05:41:55.438Z","etag":null,"topics":["api","atlantis","github","go","proxy","rate-limiting"],"latest_commit_sha":null,"homepage":"https://janpreet.com/kado-proxy","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/janpreet.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-08-13T01:05:48.000Z","updated_at":"2024-08-13T03:27:40.000Z","dependencies_parsed_at":"2024-08-13T03:11:18.975Z","dependency_job_id":"200516cf-98bb-4cae-8771-6db354ce0675","html_url":"https://github.com/janpreet/kado-proxy","commit_stats":null,"previous_names":["janpreet/kado-proxy"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/janpreet/kado-proxy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/janpreet%2Fkado-proxy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/janpreet%2Fkado-proxy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/janpreet%2Fkado-proxy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/janpreet%2Fkado-proxy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/janpreet","download_url":"https://codeload.github.com/janpreet/kado-proxy/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/janpreet%2Fkado-proxy/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263376127,"owners_count":23457333,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["api","atlantis","github","go","proxy","rate-limiting"],"created_at":"2024-11-14T02:25:31.822Z","updated_at":"2026-04-22T23:33:37.529Z","avatar_url":"https://github.com/janpreet.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![kado-proxy CI/CD](https://github.com/janpreet/kado-proxy/actions/workflows/kado-proxy.yaml/badge.svg)](https://github.com/janpreet/kado-proxy/actions/workflows/kado-proxy.yaml)\n[![codecov](https://codecov.io/github/janpreet/kado-proxy/graph/badge.svg?token=5MBY4JIT88)](https://codecov.io/github/janpreet/kado-proxy)\n[![Go Report Card](https://goreportcard.com/badge/github.com/janpreet/kado-proxy)](https://goreportcard.com/report/github.com/janpreet/kado-proxy)\n# kado-proxy\n\nkado-proxy is a lightweight, Go-based proxy designed to sit between your tools and the GitHub API. It helps manage API rate limits and handles authentication, ensuring your applications can interact with GitHub more reliably and securely.\n\n## Features\n\n- Manages GitHub API rate limits\n- Supports both Personal Access Token and GitHub App authentication\n- Implements HTTPS for secure communication\n- Easy to deploy using Docker or Kubernetes\n- Can be integrated with various tools that interact with GitHub\n\n## Installation\n\n### Using Go\n\n```bash\ngo get github.com/janpreet/kado-proxy\n```\n\n### Using Docker\n\n```bash\ndocker pull ghcr.io/janpreet/kado-proxy:latest\n```\n\n## Usage\n\n### Running kado-proxy\n\n#### Using Go\n\n```bash\nkado-proxy -cert=/path/to/cert.pem -key=/path/to/key.pem -port=8443\n```\n\n#### Using Docker\n\n```bash\ndocker run -d -p 8443:8443 \\\n  -v /path/to/cert.pem:/etc/kado-proxy/cert.pem \\\n  -v /path/to/key.pem:/etc/kado-proxy/key.pem \\\n  ghcr.io/janpreet/kado-proxy:latest \\\n  -cert=/etc/kado-proxy/cert.pem \\\n  -key=/etc/kado-proxy/key.pem \\\n  -port=8443\n```\n\n### Integrating with Your Project\n\nTo use kado-proxy in your project, set your GitHub API base URL to `https://localhost:8443` (or wherever you're hosting kado-proxy) instead of `https://api.github.com`.\n\n## Authentication\n\nkado-proxy supports two methods of authentication with GitHub: Personal Access Tokens (PAT) and GitHub Apps.\n\n### Personal Access Tokens\n\nIf you're using a Personal Access Token (PAT), configure your tool to use the token as usual. kado-proxy will forward the Authorization header containing the token to GitHub.\n\n### GitHub Apps\n\nTo use GitHub App authentication:\n\n1. Set the following environment variables when running kado-proxy:\n   - `GITHUB_APP_ID`: Your GitHub App's ID\n   - `GITHUB_APP_PRIVATE_KEY`: Your GitHub App's private key\n   - `GITHUB_INSTALLATION_ID`: The installation ID for your GitHub App\n\n2. kado-proxy will automatically handle JWT generation and token exchange.\n\n## Certificate Setup\n\n### Self-Signed Certificates (for testing)\n\n1. Generate a self-signed certificate:\n   ```bash\n   openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes\n   ```\n\n2. Use these files with the `-cert` and `-key` flags when running kado-proxy.\n\n### Let's Encrypt (for production)\n\n1. Install certbot:\n   ```bash\n   sudo apt-get update\n   sudo apt-get install certbot\n   ```\n\n2. Obtain a certificate:\n   ```bash\n   sudo certbot certonly --standalone -d your-domain.com\n   ```\n\n3. Use the generated certificates with kado-proxy:\n   ```bash\n   kado-proxy -cert=/etc/letsencrypt/live/your-domain.com/fullchain.pem \\\n              -key=/etc/letsencrypt/live/your-domain.com/privkey.pem\n   ```\n\n### Kubernetes with cert-manager\n\n1. Install cert-manager in your cluster.\n\n2. Create an Issuer or ClusterIssuer.\n\n3. Create a Certificate resource:\n   ```yaml\n   apiVersion: cert-manager.io/v1\n   kind: Certificate\n   metadata:\n     name: kado-proxy-cert\n     namespace: your-namespace\n   spec:\n     secretName: kado-proxy-tls\n     issuerRef:\n       name: your-issuer\n       kind: Issuer\n     commonName: kado-proxy.your-domain.com\n     dnsNames:\n     - kado-proxy.your-domain.com\n   ```\n\n4. Update your kado-proxy Deployment to use this secret.\n\n### Cloud-Managed Certificates\n\n#### Google Cloud (GKE)\n\n1. Create a managed certificate:\n   ```yaml\n   apiVersion: networking.gke.io/v1\n   kind: ManagedCertificate\n   metadata:\n     name: kado-proxy-cert\n   spec:\n     domains:\n       - kado-proxy.your-domain.com\n   ```\n\n2. Annotate your Ingress to use this certificate.\n\n#### AWS (EKS)\n\n1. Request a certificate in AWS Certificate Manager.\n\n2. Use the ARN of this certificate in your Ingress or ALB Ingress Controller configuration.\n\n## Example: Using kado-proxy with Atlantis in Kubernetes\n\n1. Deploy kado-proxy:\n\n```yaml\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: kado-proxy\nspec:\n  replicas: 1\n  selector:\n    matchLabels:\n      app: kado-proxy\n  template:\n    metadata:\n      labels:\n        app: kado-proxy\n    spec:\n      containers:\n      - name: kado-proxy\n        image: ghcr.io/janpreet/kado-proxy:latest\n        args:\n        - \"-cert=/etc/kado-proxy-tls/tls.crt\"\n        - \"-key=/etc/kado-proxy-tls/tls.key\"\n        - \"-port=8443\"\n        ports:\n        - containerPort: 8443\n        volumeMounts:\n        - name: kado-proxy-tls\n          mountPath: \"/etc/kado-proxy-tls\"\n          readOnly: true\n        env:\n        - name: GITHUB_APP_ID\n          valueFrom:\n            secretKeyRef:\n              name: github-app-credentials\n              key: app-id\n        - name: GITHUB_APP_PRIVATE_KEY\n          valueFrom:\n            secretKeyRef:\n              name: github-app-credentials\n              key: private-key\n        - name: GITHUB_INSTALLATION_ID\n          valueFrom:\n            secretKeyRef:\n              name: github-app-credentials\n              key: installation-id\n      volumes:\n      - name: kado-proxy-tls\n        secret:\n          secretName: kado-proxy-tls\n---\napiVersion: v1\nkind: Service\nmetadata:\n  name: kado-proxy\nspec:\n  selector:\n    app: kado-proxy\n  ports:\n    - protocol: TCP\n      port: 443\n      targetPort: 8443\n```\n\n2. Configure Atlantis:\n\n```yaml\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: atlantis\nspec:\n  template:\n    spec:\n      containers:\n      - name: atlantis\n        env:\n        - name: ATLANTIS_GH_HOSTNAME\n          value: \"kado-proxy\"\n        - name: ATLANTIS_GH_URL\n          value: \"https://kado-proxy\"\n```\n\n## Security Considerations\n\n- Always use HTTPS in production environments.\n- Ensure that certificates and private keys are stored securely.\n- Regularly rotate GitHub App private keys and Personal Access Tokens.\n- Implement network policies in Kubernetes to restrict access to kado-proxy.\n\n## Contributing\n\nContributions to kado-proxy are welcome! Please feel free to submit a Pull Request.\n\n## License\n\nThis project is licensed under the MIT License.\n\n## Support\n\nIf you encounter any issues or have questions, please file an issue on the GitHub repository.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjanpreet%2Fkado-proxy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjanpreet%2Fkado-proxy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjanpreet%2Fkado-proxy/lists"}