{"id":20894,"name":"Climate Action Plans","description":"A simple, open database of local government climate action plan documents and emissions data.","url":"https://github.com/mysociety/caps","last_synced_at":"2026-04-17T07:30:44.574Z","repository":{"id":37682228,"uuid":"289357345","full_name":"mysociety/caps","owner":"mysociety","description":"A simple, open database of local government climate action plan documents and emissions data. ","archived":false,"fork":false,"pushed_at":"2026-03-26T17:27:35.000Z","size":334006,"stargazers_count":11,"open_issues_count":79,"forks_count":2,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-03-27T06:29:50.574Z","etag":null,"topics":["citizen-participation","climate","climate-change","docker","local-government","mapit","vagrant"],"latest_commit_sha":null,"homepage":"https://cape.mysociety.org","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mysociety.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","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":"2020-08-21T20:17:51.000Z","updated_at":"2026-03-26T17:27:39.000Z","dependencies_parsed_at":"2023-09-21T19:28:18.265Z","dependency_job_id":"5dce72e0-2cd4-4db9-897b-23bb9b9639ee","html_url":"https://github.com/mysociety/caps","commit_stats":{"total_commits":1381,"total_committers":8,"mean_commits":172.625,"dds":0.6502534395365678,"last_synced_commit":"ff93a0476dee90a5d149baf2480d5477aa2fa3e1"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/mysociety/caps","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mysociety%2Fcaps","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mysociety%2Fcaps/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mysociety%2Fcaps/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mysociety%2Fcaps/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mysociety","download_url":"https://codeload.github.com/mysociety/caps/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mysociety%2Fcaps/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31213707,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-30T15:24:02.938Z","status":"ssl_error","status_checked_at":"2026-03-30T15:23:44.804Z","response_time":138,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5: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"}},"owner":{"login":"mysociety","name":"mySociety","uuid":"141338","kind":"organization","description":"We help people be active citizens","email":null,"website":"https://www.mysociety.org/","location":"UK","twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/141338?v=4","repositories_count":353,"last_synced_at":"2024-04-08T08:59:16.389Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/mysociety","funding_links":[],"total_stars":2350,"followers":77,"following":0,"created_at":"2022-11-02T19:35:07.528Z","updated_at":"2024-04-08T09:01:08.936Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mysociety","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mysociety/repositories"},"packages":[],"commits":{"id":1254657,"full_name":"mysociety/caps","default_branch":"master","total_commits":1670,"total_committers":8,"total_bot_commits":50,"total_bot_committers":1,"mean_commits":208.75,"dds":0.6215568862275449,"past_year_total_commits":255,"past_year_total_committers":5,"past_year_total_bot_commits":5,"past_year_total_bot_committers":1,"past_year_mean_commits":51.0,"past_year_dds":0.4392156862745098,"last_synced_at":"2026-03-30T23:17:40.479Z","last_synced_commit":"29968bb7f79d21e2699f6d4832cba4cfb4376d3c","created_at":"2023-03-27T11:50:32.372Z","updated_at":"2026-03-30T23:17:39.662Z","committers":[{"name":"Struan Donald","email":"struan@exo.org.uk","login":"struan","count":632},{"name":"Lucas","email":"hello@lucascm.dev","login":"lucascumsille","count":389},{"name":"Zarino Zappia","email":"mail@zarino.co.uk","login":"zarino","count":308},{"name":"Alex Parsons","email":"alex.parsons@mysociety.org","login":"ajparsons","count":124},{"name":"Louise Crow","email":"louise.crow@gmail.com","login":"crowbot","count":109},{"name":"Sam Pearson","email":"sam@sgp.me.uk","login":"sagepe","count":57},{"name":"dependabot[bot]","email":"49699333+dependabot[bot]","login":"dependabot[bot]","count":50},{"name":"M Somerville","email":"matthew-github@dracos.co.uk","login":"dracos","count":1}],"past_year_committers":[{"name":"Struan Donald","email":"struan@exo.org.uk","login":"struan","count":143},{"name":"Lucas","email":"hello@lucascm.dev","login":"lucascumsille","count":60},{"name":"Zarino Zappia","email":"mail@zarino.co.uk","login":"zarino","count":39},{"name":"Sam Pearson","email":"sam@sgp.me.uk","login":"sagepe","count":8},{"name":"dependabot[bot]","email":"49699333+dependabot[bot]","login":"dependabot[bot]","count":5}],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/mysociety%2Fcaps/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-04-08T00:00:24.542Z","repositories_count":6211929,"commits_count":917679705,"contributors_count":35524686,"owners_count":1142900,"icon_url":"https://github.com/github.png","host_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories"}},"issues_stats":{"full_name":"mysociety/caps","html_url":"https://github.com/mysociety/caps","last_synced_at":"2026-03-29T06:00:15.961Z","status":null,"issues_count":338,"pull_requests_count":493,"avg_time_to_close_issue":8792532.282157676,"avg_time_to_close_pull_request":1314792.486140725,"issues_closed_count":241,"pull_requests_closed_count":469,"pull_request_authors_count":8,"issue_authors_count":17,"avg_comments_per_issue":1.3372781065088757,"avg_comments_per_pull_request":1.024340770791075,"merged_pull_requests_count":391,"bot_issues_count":0,"bot_pull_requests_count":93,"past_year_issues_count":18,"past_year_pull_requests_count":35,"past_year_avg_time_to_close_issue":1828486.5714285714,"past_year_avg_time_to_close_pull_request":631894.28,"past_year_issues_closed_count":7,"past_year_pull_requests_closed_count":25,"past_year_pull_request_authors_count":5,"past_year_issue_authors_count":3,"past_year_avg_comments_per_issue":0.3333333333333333,"past_year_avg_comments_per_pull_request":0.5714285714285714,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":12,"past_year_merged_pull_requests_count":18,"created_at":"2023-05-09T10:39:01.734Z","updated_at":"2026-03-29T06:00:15.962Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/mysociety%2Fcaps","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/mysociety%2Fcaps/issues","issue_labels_count":{"project:scorecards":95,"project:cape":61,"bug":42,"design":16,"tech debt":7,"deeper integrations":3},"pull_request_labels_count":{"dependencies":93,"python":12,"design":1,"blocked":1},"issue_author_associations_count":{"MEMBER":268,"CONTRIBUTOR":61,"NONE":9},"pull_request_author_associations_count":{"MEMBER":251,"CONTRIBUTOR":242},"issue_authors":{"zarino":131,"struan":77,"crowbot":46,"ajparsons":37,"lucascumsille":24,"JenMysoc":6,"MyfanwyNixon":4,"sequencefree":3,"pmackay":2,"RichardTaylor":1,"sagepe":1,"davea":1,"alexander-griffen":1,"mrchrisadams":1,"emilyk383":1,"dracos":1,"markcridge":1},"pull_request_authors":{"struan":131,"lucascumsille":103,"dependabot[bot]":93,"zarino":86,"ajparsons":46,"crowbot":21,"sagepe":12,"dracos":1},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-03-30T00:00:07.548Z","repositories_count":14008109,"issues_count":34544552,"pull_requests_count":112962240,"authors_count":11212515,"icon_url":"https://github.com/github.png","host_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories","owners_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/owners","authors_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors"},"past_year_issue_labels_count":{"project:scorecards":3,"design":1},"past_year_pull_request_labels_count":{"dependencies":12,"python":12},"past_year_issue_author_associations_count":{"MEMBER":15,"CONTRIBUTOR":3},"past_year_pull_request_author_associations_count":{"CONTRIBUTOR":25,"MEMBER":10},"past_year_issue_authors":{"struan":11,"zarino":4,"lucascumsille":3},"past_year_pull_request_authors":{"lucascumsille":13,"dependabot[bot]":12,"zarino":8,"sagepe":1,"struan":1},"maintainers":[{"login":"zarino","count":217,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/zarino"},{"login":"struan","count":208,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/struan"},{"login":"crowbot","count":67,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/crowbot"},{"login":"sagepe","count":13,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/sagepe"},{"login":"JenMysoc","count":6,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/JenMysoc"},{"login":"MyfanwyNixon","count":4,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/MyfanwyNixon"},{"login":"dracos","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/dracos"},{"login":"davea","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/davea"},{"login":"RichardTaylor","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/RichardTaylor"}],"active_maintainers":[{"login":"struan","count":12,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/struan"},{"login":"zarino","count":12,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/zarino"},{"login":"sagepe","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/sagepe"}]},"events":{"total":{"DeleteEvent":11,"PullRequestEvent":74,"IssuesEvent":68,"WatchEvent":1,"IssueCommentEvent":69,"PushEvent":391,"PullRequestReviewCommentEvent":12,"PullRequestReviewEvent":24,"CreateEvent":42},"last_year":{"DeleteEvent":7,"PullRequestEvent":44,"IssuesEvent":36,"IssueCommentEvent":31,"PushEvent":167,"PullRequestReviewCommentEvent":2,"PullRequestReviewEvent":11,"CreateEvent":22}},"keywords":["citizen-participation","climate","climate-change","docker","local-government","mapit","vagrant"],"dependencies":[{"ecosystem":"pypi","filepath":"requirements.dev.txt","sha":null,"kind":"manifest","created_at":"2022-08-08T21:15:50.467Z","updated_at":"2022-08-08T21:15:50.467Z","repository_link":"https://github.com/mysociety/caps/blob/master/requirements.dev.txt","dependencies":[{"id":695514038,"package_name":"pylint","ecosystem":"pypi","requirements":"==2.12.2","direct":true,"kind":"development","optional":false},{"id":695514039,"package_name":"black","ecosystem":"pypi","requirements":"==21.12b0","direct":true,"kind":"development","optional":false}]},{"ecosystem":"pypi","filepath":"requirements.txt","sha":null,"kind":"manifest","created_at":"2022-08-08T21:15:50.534Z","updated_at":"2022-08-08T21:15:50.534Z","repository_link":"https://github.com/mysociety/caps/blob/master/requirements.txt","dependencies":[{"id":695515319,"package_name":"asgiref","ecosystem":"pypi","requirements":"==3.3.2","direct":true,"kind":"runtime","optional":false},{"id":695515320,"package_name":"beautifulsoup4","ecosystem":"pypi","requirements":"==4.9.3","direct":true,"kind":"runtime","optional":false},{"id":695515321,"package_name":"certifi","ecosystem":"pypi","requirements":"==2020.6.20","direct":true,"kind":"runtime","optional":false},{"id":695515322,"package_name":"chardet","ecosystem":"pypi","requirements":"==3.0.4","direct":true,"kind":"runtime","optional":false},{"id":695515323,"package_name":"csscompressor","ecosystem":"pypi","requirements":"==0.9.4","direct":true,"kind":"runtime","optional":false},{"id":695515324,"package_name":"defusedxml","ecosystem":"pypi","requirements":"==0.6.0","direct":true,"kind":"runtime","optional":false},{"id":695515325,"package_name":"diff-match-patch","ecosystem":"pypi","requirements":"==20200713","direct":true,"kind":"runtime","optional":false},{"id":695515326,"package_name":"Django","ecosystem":"pypi","requirements":"==3.2.14","direct":true,"kind":"runtime","optional":false},{"id":695515327,"package_name":"django-autoslug","ecosystem":"pypi","requirements":"==1.9.7","direct":true,"kind":"runtime","optional":false},{"id":695515328,"package_name":"django-bootstrap4","ecosystem":"pypi","requirements":"==1.1.1","direct":true,"kind":"runtime","optional":false},{"id":695515329,"package_name":"django-filter","ecosystem":"pypi","requirements":"==2.4.0","direct":true,"kind":"runtime","optional":false},{"id":695515330,"package_name":"django-haystack","ecosystem":"pypi","requirements":"==3.0","direct":true,"kind":"runtime","optional":false},{"id":695515331,"package_name":"django-htmlmin","ecosystem":"pypi","requirements":"==0.11.0","direct":true,"kind":"runtime","optional":false},{"id":695515332,"package_name":"django-import-export","ecosystem":"pypi","requirements":"==2.0.2","direct":true,"kind":"runtime","optional":false},{"id":695515333,"package_name":"django-markitup","ecosystem":"pypi","requirements":"==4.0.0","direct":true,"kind":"runtime","optional":false},{"id":695515334,"package_name":"djangorestframework","ecosystem":"pypi","requirements":"==3.12.4","direct":true,"kind":"runtime","optional":false},{"id":695515335,"package_name":"django-simple-history","ecosystem":"pypi","requirements":"==3.0.0","direct":true,"kind":"runtime","optional":false},{"id":695515336,"package_name":"django-debug-toolbar","ecosystem":"pypi","requirements":"==3.2.2","direct":true,"kind":"runtime","optional":false},{"id":695515337,"package_name":"django_hosts","ecosystem":"pypi","requirements":"55634e5dd5cce33619dcb641c5e3c6a9c85e7caa","direct":true,"kind":"runtime","optional":false},{"id":695515338,"package_name":"et-xmlfile","ecosystem":"pypi","requirements":"==1.0.1","direct":true,"kind":"runtime","optional":false},{"id":695515339,"package_name":"feedparser","ecosystem":"pypi","requirements":"==5.2.1","direct":true,"kind":"runtime","optional":false},{"id":695515340,"package_name":"future-fstrings","ecosystem":"pypi","requirements":"==1.2.0","direct":true,"kind":"runtime","optional":false},{"id":695515341,"package_name":"gunicorn","ecosystem":"pypi","requirements":"==20.0.4","direct":true,"kind":"runtime","optional":false},{"id":695515342,"package_name":"html5lib","ecosystem":"pypi","requirements":"==1.1","direct":true,"kind":"runtime","optional":false},{"id":695515343,"package_name":"idna","ecosystem":"pypi","requirements":"==2.10","direct":true,"kind":"runtime","optional":false},{"id":695515344,"package_name":"jdcal","ecosystem":"pypi","requirements":"==1.4.1","direct":true,"kind":"runtime","optional":false},{"id":695515345,"package_name":"libsass","ecosystem":"pypi","requirements":"==0.12.3","direct":true,"kind":"runtime","optional":false},{"id":695515346,"package_name":"Markdown","ecosystem":"pypi","requirements":"==2.6.8","direct":true,"kind":"runtime","optional":false},{"id":695515347,"package_name":"MarkupPy","ecosystem":"pypi","requirements":"==1.14","direct":true,"kind":"runtime","optional":false},{"id":695515348,"package_name":"numpy","ecosystem":"pypi","requirements":"==1.22.0","direct":true,"kind":"runtime","optional":false},{"id":695515349,"package_name":"odfpy","ecosystem":"pypi","requirements":"==1.4.1","direct":true,"kind":"runtime","optional":false},{"id":695515350,"package_name":"olefile","ecosystem":"pypi","requirements":"==0.44","direct":true,"kind":"runtime","optional":false},{"id":695515351,"package_name":"openpyxl","ecosystem":"pypi","requirements":"==3.0.9","direct":true,"kind":"runtime","optional":false},{"id":695515352,"package_name":"pandas","ecosystem":"pypi","requirements":"==1.3.4","direct":true,"kind":"runtime","optional":false},{"id":695515353,"package_name":"pdftotext","ecosystem":"pypi","requirements":"==2.1.5","direct":true,"kind":"runtime","optional":false},{"id":695515354,"package_name":"Pillow","ecosystem":"pypi","requirements":"==9.0.1","direct":true,"kind":"runtime","optional":false},{"id":695515355,"package_name":"psycopg2","ecosystem":"pypi","requirements":"==2.8.5","direct":true,"kind":"runtime","optional":false},{"id":695515356,"package_name":"pysolr","ecosystem":"pypi","requirements":"==3.9.0","direct":true,"kind":"runtime","optional":false},{"id":695515357,"package_name":"python-dateutil","ecosystem":"pypi","requirements":"==2.8.1","direct":true,"kind":"runtime","optional":false},{"id":695515358,"package_name":"python-slugify","ecosystem":"pypi","requirements":"==4.0.1","direct":true,"kind":"runtime","optional":false},{"id":695515359,"package_name":"pytz","ecosystem":"pypi","requirements":"==2020.1","direct":true,"kind":"runtime","optional":false},{"id":695515360,"package_name":"PyYAML","ecosystem":"pypi","requirements":"==5.4","direct":true,"kind":"runtime","optional":false},{"id":695515361,"package_name":"requests","ecosystem":"pypi","requirements":"==2.25.1","direct":true,"kind":"runtime","optional":false},{"id":695515362,"package_name":"requests-cache","ecosystem":"pypi","requirements":"==0.5.2","direct":true,"kind":"runtime","optional":false},{"id":695515363,"package_name":"six","ecosystem":"pypi","requirements":"==1.10.0","direct":true,"kind":"runtime","optional":false},{"id":695515364,"package_name":"soupsieve","ecosystem":"pypi","requirements":"==2.0.1","direct":true,"kind":"runtime","optional":false},{"id":695515365,"package_name":"sqlparse","ecosystem":"pypi","requirements":"==0.4.2","direct":true,"kind":"runtime","optional":false},{"id":695515366,"package_name":"tablib","ecosystem":"pypi","requirements":"==2.0.0","direct":true,"kind":"runtime","optional":false},{"id":695515367,"package_name":"text-unidecode","ecosystem":"pypi","requirements":"==1.3","direct":true,"kind":"runtime","optional":false},{"id":695515368,"package_name":"tokenize-rt","ecosystem":"pypi","requirements":"==3.2.0","direct":true,"kind":"runtime","optional":false},{"id":695515369,"package_name":"urllib3","ecosystem":"pypi","requirements":"==1.26.5","direct":true,"kind":"runtime","optional":false},{"id":695515370,"package_name":"webencodings","ecosystem":"pypi","requirements":"==0.5.1","direct":true,"kind":"runtime","optional":false},{"id":695515371,"package_name":"xlrd","ecosystem":"pypi","requirements":"==1.2.0","direct":true,"kind":"runtime","optional":false},{"id":695515372,"package_name":"xlwt","ecosystem":"pypi","requirements":"==1.3.0","direct":true,"kind":"runtime","optional":false},{"id":695515373,"package_name":"mailchimp_marketing","ecosystem":"pypi","requirements":"a734b605fe457f429144ec81c7ba721f47ad4e57","direct":true,"kind":"runtime","optional":false},{"id":695515374,"package_name":"cryptography","ecosystem":"pypi","requirements":"==36.0.1","direct":true,"kind":"runtime","optional":false},{"id":695515375,"package_name":"altair","ecosystem":"pypi","requirements":"==4.2.0","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"actions","filepath":".github/actions/cached-build/action.yml","sha":null,"kind":"manifest","created_at":"2023-01-30T06:01:38.517Z","updated_at":"2023-01-30T06:01:38.517Z","repository_link":"https://github.com/mysociety/caps/blob/master/.github/actions/cached-build/action.yml","dependencies":[{"id":7242402292,"package_name":"docker/metadata-action","ecosystem":"actions","requirements":"98669ae865ea3cffbcbaa878cf57c20bbf1c6c38","direct":true,"kind":"composite","optional":false},{"id":7242402293,"package_name":"docker/login-action","ecosystem":"actions","requirements":"f054a8b539a109f9f41c372932f1ae047eff08c9","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/actions/in-container/action.yml","sha":null,"kind":"manifest","created_at":"2023-01-30T06:01:38.545Z","updated_at":"2023-01-30T06:01:38.545Z","repository_link":"https://github.com/mysociety/caps/blob/master/.github/actions/in-container/action.yml","dependencies":[{"id":7242402311,"package_name":"./.github/actions/cached-build","ecosystem":"actions","requirements":"*","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/build_dev_image.yml","sha":null,"kind":"manifest","created_at":"2023-01-30T06:01:38.565Z","updated_at":"2023-01-30T06:01:38.565Z","repository_link":"https://github.com/mysociety/caps/blob/master/.github/workflows/build_dev_image.yml","dependencies":[{"id":7242402326,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":7242402327,"package_name":"./.github/actions/cached-build","ecosystem":"actions","requirements":"*","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/lint.yml","sha":null,"kind":"manifest","created_at":"2023-01-30T06:01:38.592Z","updated_at":"2023-01-30T06:01:38.592Z","repository_link":"https://github.com/mysociety/caps/blob/master/.github/workflows/lint.yml","dependencies":[{"id":7242402338,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":7242402339,"package_name":"psf/black","ecosystem":"actions","requirements":"stable","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/mirror.yml","sha":null,"kind":"manifest","created_at":"2023-01-30T06:01:38.611Z","updated_at":"2023-01-30T06:01:38.611Z","repository_link":"https://github.com/mysociety/caps/blob/master/.github/workflows/mirror.yml","dependencies":[{"id":7242402344,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false},{"id":7242402345,"package_name":"mysociety/action-git-pusher","ecosystem":"actions","requirements":"v1.1.1","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/tests.yml","sha":null,"kind":"manifest","created_at":"2023-01-30T06:01:38.633Z","updated_at":"2023-01-30T06:01:38.633Z","repository_link":"https://github.com/mysociety/caps/blob/master/.github/workflows/tests.yml","dependencies":[{"id":7242402355,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":7242402356,"package_name":"./.github/actions/in-container","ecosystem":"actions","requirements":"*","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/updata_data.yml","sha":null,"kind":"manifest","created_at":"2023-01-30T06:01:38.658Z","updated_at":"2023-01-30T06:01:38.658Z","repository_link":"https://github.com/mysociety/caps/blob/master/.github/workflows/updata_data.yml","dependencies":[{"id":7242402416,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":7242402417,"package_name":"./.github/actions/in-container","ecosystem":"actions","requirements":"*","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"docker","filepath":"Dockerfile","sha":null,"kind":"manifest","created_at":"2023-01-30T06:01:38.675Z","updated_at":"2023-01-30T06:01:38.675Z","repository_link":"https://github.com/mysociety/caps/blob/master/Dockerfile","dependencies":[{"id":7242402439,"package_name":"python","ecosystem":"docker","requirements":"3.9.7","direct":true,"kind":"build","optional":false},{"id":7242402440,"package_name":"python","ecosystem":"docker","requirements":"3.9.7-slim","direct":true,"kind":"build","optional":false}]},{"ecosystem":"docker","filepath":"docker-compose.yml","sha":null,"kind":"manifest","created_at":"2023-01-30T06:01:38.816Z","updated_at":"2023-01-30T06:01:38.816Z","repository_link":"https://github.com/mysociety/caps/blob/master/docker-compose.yml","dependencies":[{"id":7242403828,"package_name":"mysociety/caps","ecosystem":"docker","requirements":"${TAG","direct":true,"kind":"runtime","optional":false},{"id":7242403831,"package_name":"postgres","ecosystem":"docker","requirements":"11","direct":true,"kind":"runtime","optional":false},{"id":7242403833,"package_name":"solr","ecosystem":"docker","requirements":"6.5","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"docker","filepath":".devcontainer/docker-compose-extend-cached-image.yml","sha":null,"kind":"manifest","created_at":"2023-09-21T19:28:13.256Z","updated_at":"2023-09-21T19:28:13.256Z","repository_link":"https://github.com/mysociety/caps/blob/master/.devcontainer/docker-compose-extend-cached-image.yml","dependencies":[]},{"ecosystem":"pypi","filepath":"pyproject.toml","sha":null,"kind":"manifest","created_at":"2023-09-21T19:28:14.371Z","updated_at":"2023-09-21T19:28:14.371Z","repository_link":"https://github.com/mysociety/caps/blob/master/pyproject.toml","dependencies":[]}],"score":6.579251212010101,"created_at":"2023-09-11T14:52:16.224Z","updated_at":"2026-04-17T07:30:44.604Z","avatar_url":"https://github.com/mysociety.png","language":"HTML","category":"Sustainable Development","sub_category":"Data Catalogs and Interfaces","monthly_downloads":0,"total_dependent_repos":0,"total_dependent_packages":0,"readme":"# caps - Climate Action Plans\n\n# Development Install\n\nClone the repository\n\n```\ngit clone git@github.com:mysociety/caps.git\ncd caps\nscript/bootstrap\n```\n\nYou then have two options for a local development environment, [Vagrant](https://www.vagrantup.com/) and [Docker](https://www.docker.com/products/docker-desktop). These instructions don't cover installing and setting up these tools.\n\nThis application makes calls to [MapIt](https://mapit.mysociety.org). If you plan on making more than 50 calls a day, you'll [need an API key](https://mapit.mysociety.org/pricing/).\n\n## Loading Data\n\nThe first time you stand-up a local development environment, you'll need to pull down the Council, plans and emissions data and import this into the database and search index. The instructions below provide details on how to do this for each environment.\n\nThis process can take some time, and a slightly faster update process is also available.\n\n## Docker\n\nThis project contains a Docker Compose file that uses the Django development server, enables debug mode and maps the local working copy into the container for testing.\n\nIf you are using a MapIt API key, add this to your `.env` file, e.g.: `echo 'MAPIT_API_KEY=xxxaaa111222333zzz' \u003e\u003e .env`.\n\n### Using the setup script\n\n*Warning* running `script/setup` will remove all locally cached data and reset the environment to the default state!\n\nHaving rest the environment, `script/setup` will perform all the necessary setup steps, including loading all data. Once this has completed, you should have a functional environment.\n\nThis may take a long time to run!\n\n### Manual setup\n\nRun `docker-compose up`. This will build an application container and stand-up this, together with PostgreSQL and Solr containers. These will run in the foreground, so you will see console output in the shell from the containers. You can stop the containers by hitting `control-C`. If you'd rather run in the background, add the `-d` switch; if you do this you can stop the environment with `docker-compose down`.\n\nYou can then run `docker-compose exec app script/update --all` to perform the initial data load. This will take a long time. Run the same command without the `--all` switch to run the short-cut data load.\n\nYou can rebuild the application container by running `script/build`. Bear in mind that when running the container in development mode, your local working copy will be included along with any local uncommitted changes.\n\nThe environment will be visible at http://localhost:8000 and the Solr admin interface at http://localhost:8983\n\n### Codespaces/VSCode\n\nIn your [Github Codespaces settings](https://github.com/settings/codespaces), set up the relevant secrets (mostly MAPIT_API_KEY) and give the caps repo access to this secret.\n\nThen in the [caps repo](https://github.com/mysociety/caps/), click the code dropdown (top right), and select the codespaces tab, then create new codespace. \n\nOnce it has cloned and set up the docker configuration (it may prompt you to reload with the pylance extension, this is fine and takea a few seconds), you should have a set-up populated a recent version of the current data process.\n\nIf you have used one of the devcontainer options that doesn't use this repopulation: \n\n* To run the data population from scratch run `script/setup-in-docker` (as warned above, this takes a while).\n* To restore a previous database dump, run `script/restore-dev-data`.\n\nOnce this is finished `script/server` will run the test server. You can access this by right clicking the `0.0.0.0:8000` link in the terminal, or follow the links in the ports page (where it can also be made public/shared to organisation).\n\n## Vagrant\n\nCopy across some basic config. You may need to add a MapIt API key.\n\n```\ncp conf/config.py-example conf/config.py\n```\n\nA functional Vagrantfile is included for local development so you can create a Vagrant VM with:\n\n```\nvagrant up\n```\n\nThen SSH into the VM, and run subsequent commands from inside.\n\n```\nvagrant ssh\n```\n\n### Importing data\n\nBefore running the development server for the first time, you'll need to import the data and set up the search index:\n\n```\nscript/update --all\n```\n\nThis process will take some time. Once you have done a full import, you can subsequently run `script/update` to take a few shortcuts in future.\n\n### Starting the development server\n\nThen you can start the development server:\n\n```\nscript/server\n```\n\nThe site will be visible at \u003chttp://localhost:8000\u003e.\n\nThe Solr server interface will be visible at \u003chttp://localhost:8983\u003e\n\n### Updating the solr schema\n\nIf you want to update the solr schema then you'll need to edit the\nconf/schema.xml file and then run the script/update_solr_schema on the\nsolr instance:\n\n`docker compose exec solr update_solr_schema`\n\nThis will copy the new schema in to place and reload the core. You will\nthen need to re-index for the changes to be useful. This will only work\nif you are adding to the schema, if you're altering an existing property\nthen you should probably use the solr API to do so.\n\n## Code style\n\n[`black`](https://black.readthedocs.io/en/stable/) is run for code tidying: `python -m black .`\n\nThis is monitored by a github action for pull requests. ","funding_links":[],"readme_doi_urls":[],"works":{},"citation_counts":{},"total_citations":0,"keywords_from_contributors":["civic-tech","civictech","democracy","mysociety","parliament","parliamentary-monitoring","politicians","politics","transparency","representatives"],"project_url":"https://ost.ecosyste.ms/api/v1/projects/20894","html_url":"https://ost.ecosyste.ms/projects/20894"}