{"id":29124332,"url":"https://github.com/psf/clabot","last_synced_at":"2025-06-29T20:07:31.650Z","repository":{"id":285921421,"uuid":"959653104","full_name":"psf/clabot","owner":"psf","description":"Python Software Foundation Contributor License Agreement Management Bot","archived":false,"fork":false,"pushed_at":"2025-05-02T08:28:58.000Z","size":110,"stargazers_count":5,"open_issues_count":1,"forks_count":4,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-06-29T00:12:00.391Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://cla.python.org/","language":"Python","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/psf.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}},"created_at":"2025-04-03T06:16:19.000Z","updated_at":"2025-05-02T08:29:03.000Z","dependencies_parsed_at":"2025-04-18T10:29:21.630Z","dependency_job_id":"04e3857b-3d7e-4f84-8a28-d33202c200ff","html_url":"https://github.com/psf/clabot","commit_stats":null,"previous_names":["psf/clabot"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/psf/clabot","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/psf%2Fclabot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/psf%2Fclabot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/psf%2Fclabot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/psf%2Fclabot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/psf","download_url":"https://codeload.github.com/psf/clabot/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/psf%2Fclabot/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262660010,"owners_count":23344441,"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":[],"created_at":"2025-06-29T20:07:29.732Z","updated_at":"2025-06-29T20:07:31.557Z","avatar_url":"https://github.com/psf.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Contributor License Agreement Bot\n\nThis implements a GitHub Application to manage Contributor License Agreement (CLA) signing for repositories it is installed in.\n\n## Concepts\n\n### Agreements\n\nAgreements are managed via Django admin, are formatted in Markdown, and are “write once”. Agreements can be marked as compatible with other agreements so that historic signatures are considered valid when applicable.\n\n### Signatures\n\nUsers can login to view agreements that are awaiting signature, past signatures, and the email addresses provided for past signatures.\n\n### Automation\n\nWhen installed, this application will monitor GitHub Pull Requests for changes and determine if a CLA has been signed for all authors.\n\nIf a new signature is required, a GitHub Commit Status will be created and a comment will be created directing users to the application in order to sign.\n\nIf an acceptable signature exists, a GitHub Commit Status will be created. If a past comment exists from the application it will be updated to indicate that all necessary signatures have been completed.\n\n## Development\n\nThis project is built with Django, django-github-app, and gidgethub.\n\nLocal development uses Docker, Docker Compose, and GNU make.\n\n## Pre-requisites\n\nIn order to manually test the application you will first need to create a GitHub Application and have a way of accepting GitHub webhooks from the public internet, such as ngrok.\n\n```shell\nngrok http 8000 -subdomain my-cla-bot\n```\n\nAdjust the subdomain to make identifiable to you.\n\nCreate a GitHub Application using the following settings:\n\n* GitHub App name: `My CLA Bot` (adjust to make identifiable to you)\n* Homepage URL: `https://my-cla-bot.ngrok.io` (adjust to match your ngrok subdomain)\n* Callback URL: `https://my-cla-bot.ngrok.io/auth/gh/` (adjust to match your ngrok subdomain)\n* Webhook:\n    * \\[x\\] Active\n    * Webhook URL: `https://my-cla-bot.ngrok.io/gh/` (adjust to match your ngrok subdomain)\n    * Secret: `aRandomlyGeneratedSecret` (consider `python3 -c 'import secrets; print(secrets.token_urlsafe())'`)\n* Permissions\n    * Repository Permissions:\n        * Commit statuses: Read and write\n        * Pull requests: Read and write\n    * Organization permissions:\n        * Members: Read-only\n    * Account permissions:\n        * Email addresses: Read-only\n* Subscribe to events:\n    * [x] Pull request\n\n“Generate a new client secret” and store it safely.\n\n“Generate a private key” and store it safely.\n\nA development environment can now be created by writing a `.env` file in the root of the repository with the following contents:\n\n```shell\nDJANGO_ALLOWED_HOSTS=localhost,my-cla-bot.ngrok.io\nDJANGO_CSRF_TRUSTED_ORIGINS=http://localhost:8000,https://my-cla-bot.ngrok.io\nDJANGO_SITE_URL=https://my-cla-bot.ngrok.io/\nGITHUB_APP_ID=\u003cGitHub App ID\u003e\nGITHUB_CLIENT_ID=\u003cGitHub Client ID\u003e\nGITHUB_NAME=\"My CLA Bot\"\nGITHUB_OAUTH_APPLICATION_ID=\u003cGitHub Client ID\u003e\nGITHUB_OAUTH_APPLICATION_SECRET=\u003cClient secret you generated above\u003e\nGITHUB_WEBHOOK_SECRET=\u003cWebhook Secret you generated above\u003e\nGITHUB_PRIVATE_KEY=\"-----BEGIN RSA PRIVATE KEY-----\n\u003cContents of the private key GitHub generated for you\u003e\n\u003cPlease note the formatting must match precisely\u003e\n\u003cNO line break at start, YES line break at end\u003e\n-----END RSA PRIVATE KEY-----\n\"\n```\n\nYou can now start the app by running\n\n```shell\nmake serve\n```\n\nAnd access it at `http://localhost:8000` or `https://my-cla-bot.ngrok.io`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpsf%2Fclabot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpsf%2Fclabot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpsf%2Fclabot/lists"}