{"id":25874655,"url":"https://github.com/lyft/osscla","last_synced_at":"2025-03-02T09:28:39.696Z","repository":{"id":23541276,"uuid":"99288833","full_name":"lyft/osscla","owner":"lyft","description":"Open Source Contributor License Agreement service","archived":false,"fork":false,"pushed_at":"2023-09-06T18:58:11.000Z","size":98,"stargazers_count":4,"open_issues_count":1,"forks_count":6,"subscribers_count":339,"default_branch":"master","last_synced_at":"2023-09-06T20:01:49.460Z","etag":null,"topics":["lyft"],"latest_commit_sha":null,"homepage":"","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/lyft.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":null,"support":null}},"created_at":"2017-08-04T01:13:31.000Z","updated_at":"2023-05-30T19:16:44.000Z","dependencies_parsed_at":"2023-01-13T23:27:53.032Z","dependency_job_id":null,"html_url":"https://github.com/lyft/osscla","commit_stats":null,"previous_names":[],"tags_count":0,"template":null,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lyft%2Fosscla","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lyft%2Fosscla/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lyft%2Fosscla/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lyft%2Fosscla/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lyft","download_url":"https://codeload.github.com/lyft/osscla/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241485250,"owners_count":19970450,"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":["lyft"],"created_at":"2025-03-02T09:28:39.078Z","updated_at":"2025-03-02T09:28:39.671Z","avatar_url":"https://github.com/lyft.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# osscla\n\nAngularJS and Flask service for a click-through CLA, with GitHub auth.\n\n## Installation\n\n### Docker installation\n\nIt's necessary to export your configuration variables before running osscla.\nYou can either specify them as multiple -e options, or you can put them into an\nan environment file and use --env-file.\n\n```bash\ndocker pull lyft/osscla\ndocker run --env-file my_config -t lyft/osscla\n```\n\n### Manual installation\n\nAssumptions:\n\n1. Using Ubuntu or Debian (please help with non-Ubuntu/Debian install\n   instructions!)\n1. Using gunicorn as the wsgi server\n1. Installation location: /srv/osscla/venv\n1. venv location: /srv/osscla/venv\n1. node\\_modules location: /srv/osscla/node\\_modules\n\nMake a virtualenv and install pip requirements:\n\n```bash\ncd /srv\ngit clone https://github.com/lyft/osscla\ncd osscla\nvirtualenv venv\nsource venv/bin/activate\nsudo apt-get install build-essential libssl-dev libffi-dev python-dev\npip install -r requirements.txt\ndeactivate\n```\n\n## Build the frontend\n\n```bash\ncd /srv/osscla\nsudo apt-get install -y ruby-full npm nodejs nodejs-legacy git git-core\nsudo gem install compass\nnpm install bower grunt-cli --no-progress\nnpm install . --no-progress\nnode_modules/grunt-cli/bin/grunt build\n```\n\n## Configuration\n\nSee [the settings file](https://github.com/lyft/osscla/blob/master/osscla/settings.py)\nfor specific configuration options.\n\nExcluding the CLA HTML and admin list, all configuration options are passed in through the\nenvironment.\n\n### Docker vs bash\n\nNote that below the format of the configuration is given in bash format for\ndefining and exporting environment variables. Docker environment files have a\nslightly different format than bash. Here's an example of the difference:\n\nIn bash format:\n\n```bash\nexport MY_VARIABLE='MY_VALUE'\n```\n\nIn docker env file format, you don't export the variable, and the value\nshouldn't be quoted, since everything after the equal sign is considered part\nof the value. So, in a docker environment file, you'd define the same variable\nand value like this:\n\nIn docker format:\n\n```\nMY_VARIABLE=MY_VALUE\n```\n\n### Github auth setup\n\nYou'll need to create a github applicaton through your settings, then you'll\nneed to set the client id, consumer secret and user agent in osscla:\n\n```bash\nexport CREDENTIALS_GITHUB_OAUTH_CLIENT_ID='...'\nexport CREDENTIALS_GITHUB_OAUTH_CONSUMER_SECRET='...'\nexport GITHUB_OAUTH_USER_AGENT='My unique user agent (this really should be specific to your app)'\nexport AUTHOMATIC_SALT='some_long_random_string_that_is_used_to_salt_the_oauth_flow'\n```\n\n### CSRF protection\n\nYou'll need to set a random string that can be used as a secret for CSRF token\ngeneration:\n\n```bash\nexport CREDENTIALS_SESSION_SECRET='some_long_random_string_that_is_used_to_generate_csrf_tokens'\n```\n\n### DynamoDB setup\n\nosscla uses DynamoDB. You'll need to update your service's IAM role to allow\nosscla to use (and optionally create) its DynamoDB table. You'll need to pass\nin configuration telling osscla its table name, its region, and whether or not\nto create its table.\n\n```bash\nexport DYNAMODB_TABLE=osscla-production-useast1\nexport DYNAMODB_CREATE_TABLE=true\nexport AWS_DEFAULT_REGION=us-east-1\n```\n\n### Admin access\n\nosscla can allow a list of admins to view a list of CLAs that have been signed.\nProvide osscla with a list of admins (as github usernames) in a YAML file.\n\n```bash\nexport ADMINS_FILE='/etc/osscla/admins.yaml'\n```\n\n### CLA settings\n\nosscla lets you set a current CLA version, and to provide a location with CLAs,\nin html form (as version.html i.e.: 1.0.html, 1.1.html, etc.). When an end-user\nvisits osscla, it'll tell them if their CLA is out of date. It'll display the\ncurrent version of the CLA in the form.\n\n```bash\nexport CURRENT_CLA_VERSION='1.0'\nexport CLA_DIRECTORY='/mnt/osscla/clas'\n```\n\n### SSL settings\n\nosscla enforces SSL by default. If you are developing locally and want to\ndisable this functionality this can be achieved with the following command.\n\n```bash\nexport SSLIFY=False\n```\n\n### GitHub Webhooks\n\nIf you are integrating osscla with GitHub the following steps will\nensure events are delivered correctly.\n\n1. Set up your webhook to deliver payloads to\n`{host}/{ROUTE_PREFIX}/v1/github/notification`.\n1. Ensure the content type is `application/json`.\n1. If you are using a webhook secret (`GITHUB_WEBHOOK_SECRET`)\nenter the value into the `Secret` field.\n1. While events sent from GitHub can be configured, it's easiest to select\n`Send me *everything*` as osscla already filters events/actions.\n\n## Run osscla\n\nIn the following we assume _my\\_config_ is a bash file with exports for all of\nthe necessary settings discussed in the configuration section.\n\n```bash\nsource my_config\ncd /srv/osscla\nsource venv/bin/activate\ngunicorn wsgi:app --workers=2 -k gevent\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flyft%2Fosscla","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flyft%2Fosscla","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flyft%2Fosscla/lists"}