{"id":614,"name":"Continuous Reforestation","description":"A GitHub Action for planting trees within your development workflow using the Reforestation as a Service (RaaS) API developed by DigitalHumani.","url":"https://github.com/protontypes/continuous-reforestation","last_synced_at":"2026-04-29T05:30:20.236Z","repository":{"id":53739674,"uuid":"340110123","full_name":"protontypes/continuous-reforestation","owner":"protontypes","description":"Make continuous reforestation part of your daily workflow :deciduous_tree: ","archived":false,"fork":false,"pushed_at":"2024-08-08T22:24:55.000Z","size":131,"stargazers_count":191,"open_issues_count":5,"forks_count":6,"subscribers_count":4,"default_branch":"main","last_synced_at":"2026-04-11T21:25:08.403Z","etag":null,"topics":["carbon-capture","carbon-capture-sequestration","continuous-integration","reforestation","sustainability","sustainable-software"],"latest_commit_sha":null,"homepage":"","language":"Python","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/protontypes.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},"funding":{"open_collective":"open-sustainable-technology"}},"created_at":"2021-02-18T16:30:28.000Z","updated_at":"2026-03-04T14:40:19.000Z","dependencies_parsed_at":"2024-08-15T08:19:15.427Z","dependency_job_id":null,"html_url":"https://github.com/protontypes/continuous-reforestation","commit_stats":{"total_commits":113,"total_committers":6,"mean_commits":"18.833333333333332","dds":"0.36283185840707965","last_synced_commit":"970d248e5f07f0d5a56477e3756676c6cf30fe02"},"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/protontypes/continuous-reforestation","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/protontypes%2Fcontinuous-reforestation","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/protontypes%2Fcontinuous-reforestation/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/protontypes%2Fcontinuous-reforestation/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/protontypes%2Fcontinuous-reforestation/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/protontypes","download_url":"https://codeload.github.com/protontypes/continuous-reforestation/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/protontypes%2Fcontinuous-reforestation/sbom","scorecard":{"id":747325,"data":{"date":"2025-08-11","repo":{"name":"github.com/protontypes/continuous-reforestation","commit":"970d248e5f07f0d5a56477e3756676c6cf30fe02"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.5,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":1,"reason":"Found 2/16 approved changesets -- score normalized to 1","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/linter.yml:1","Warn: no topLevel permission defined: .github/workflows/pull_request.yml:1","Warn: no topLevel permission defined: .github/workflows/push.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/linter.yml:9: update your workflow using https://app.stepsecurity.io/secureworkflow/protontypes/continuous-reforestation/linter.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/linter.yml:10: update your workflow using https://app.stepsecurity.io/secureworkflow/protontypes/continuous-reforestation/linter.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/linter.yml:11: update your workflow using https://app.stepsecurity.io/secureworkflow/protontypes/continuous-reforestation/linter.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/pull_request.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/protontypes/continuous-reforestation/pull_request.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/push.yml:12: update your workflow using https://app.stepsecurity.io/secureworkflow/protontypes/continuous-reforestation/push.yml/main?enable=pin","Warn: containerImage not pinned by hash: Dockerfile:1","Warn: containerImage not pinned by hash: Dockerfile:10: pin your Docker image by updating gcr.io/distroless/python3-debian10 to gcr.io/distroless/python3-debian10@sha256:b0041237ec3b3009275c1e0698fd7339940f2736d3359874da71bebd0878ed0a","Warn: pipCommand not pinned by hash: Dockerfile:6","Info:   0 out of   2 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   3 third-party GitHubAction dependencies pinned","Info:   0 out of   2 containerImage dependencies pinned","Info:   0 out of   1 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 16 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-22T19:13:19.971Z","repository_id":53739674,"created_at":"2025-08-22T19:13:19.971Z","updated_at":"2025-08-22T19:13:19.971Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31950891,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-17T17:29:20.459Z","status":"ssl_error","status_checked_at":"2026-04-17T17:28:47.801Z","response_time":62,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6: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":"protontypes","name":"protontypes","uuid":"55761070","kind":"organization","description":"A Free Community Accelerating Open and Sustainable Technology","email":null,"website":null,"location":null,"twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/55761070?v=4","repositories_count":16,"last_synced_at":"2025-12-23T02:51:30.896Z","metadata":{"has_sponsors_listing":false,"funding":{"open_collective":"open-sustainable-technology"}},"html_url":"https://github.com/protontypes","funding_links":["https://opencollective.com/open-sustainable-technology"],"total_stars":2961,"followers":175,"following":0,"created_at":"2022-11-14T05:19:52.827Z","updated_at":"2025-12-23T02:51:30.896Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/protontypes","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/protontypes/repositories"},"packages":[{"id":5806027,"name":"protontypes/continuous-reforestation","ecosystem":"actions","description":"Plant trees within your development workflow with digitalhumani.com","homepage":"","licenses":"mit","normalized_licenses":["MIT"],"repository_url":"https://github.com/protontypes/continuous-reforestation","keywords_array":["carbon-capture","carbon-capture-sequestration","continuous-integration","reforestation","sustainability","sustainable-software"],"namespace":"protontypes","versions_count":3,"first_release_published_at":"2021-02-27T09:40:46.000Z","latest_release_published_at":"2021-03-21T12:27:35.000Z","latest_release_number":"0.0.3","last_synced_at":"2026-03-16T00:00:22.343Z","created_at":"2023-01-04T15:52:39.931Z","updated_at":"2026-03-16T00:00:22.343Z","registry_url":"https://github.com/protontypes/continuous-reforestation","install_command":null,"documentation_url":null,"metadata":{"name":"continuous-reforestation","description":"Plant trees within your development workflow with digitalhumani.com","author":"protontypes","branding":{"icon":"award","color":"green"},"inputs":{"apikey":{"description":"The API key obtained from digitalhumani.com"},"enterpriseid":{"description":"Id of your enterprise. Example of an enterprise id: 11111111 (Enterprise Ids are 8 digits long)","required":true},"user":{"decription":"End user by whom the trees were planted","default":"${{ github.actor }}"},"projectid":{"description":"Id of the reforestation project for where you want the trees to be planted. Example of an id: 93333333 (Project Ids are 8 digits long)","required":true},"treeCount":{"description":"Number of trees requested to plant. Example: 1","default":1},"production":{"decription":"Use sandbox or production API","default":"false"}},"outputs":{"response":{"description":"JSON response of the RaaS API"},"plantedTrees":{"description":"Number of trees planted by the enterprise."}},"runs":{"using":"docker","image":"Dockerfile"},"default_branch":"main","path":null},"repo_metadata":{"id":53739674,"uuid":"340110123","full_name":"protontypes/continuous-reforestation","owner":"protontypes","description":"Make continuous reforestation part of your daily workflow :deciduous_tree: ","archived":false,"fork":false,"pushed_at":"2024-08-08T22:24:55.000Z","size":131,"stargazers_count":189,"open_issues_count":5,"forks_count":6,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-10-15T13:36:32.960Z","etag":null,"topics":["carbon-capture","carbon-capture-sequestration","continuous-integration","reforestation","sustainability","sustainable-software"],"latest_commit_sha":null,"homepage":"","language":"Python","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/protontypes.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},"funding":{"open_collective":"open-sustainable-technology"}},"created_at":"2021-02-18T16:30:28.000Z","updated_at":"2025-10-14T12:55:26.000Z","dependencies_parsed_at":"2024-08-15T08:19:15.427Z","dependency_job_id":null,"html_url":"https://github.com/protontypes/continuous-reforestation","commit_stats":{"total_commits":113,"total_committers":6,"mean_commits":"18.833333333333332","dds":"0.36283185840707965","last_synced_commit":"970d248e5f07f0d5a56477e3756676c6cf30fe02"},"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/protontypes/continuous-reforestation","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/protontypes%2Fcontinuous-reforestation","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/protontypes%2Fcontinuous-reforestation/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/protontypes%2Fcontinuous-reforestation/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/protontypes%2Fcontinuous-reforestation/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/protontypes","download_url":"https://codeload.github.com/protontypes/continuous-reforestation/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/protontypes%2Fcontinuous-reforestation/sbom","scorecard":{"id":747325,"data":{"date":"2025-08-11","repo":{"name":"github.com/protontypes/continuous-reforestation","commit":"970d248e5f07f0d5a56477e3756676c6cf30fe02"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.5,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":1,"reason":"Found 2/16 approved changesets -- score normalized to 1","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/linter.yml:1","Warn: no topLevel permission defined: .github/workflows/pull_request.yml:1","Warn: no topLevel permission defined: .github/workflows/push.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/linter.yml:9: update your workflow using https://app.stepsecurity.io/secureworkflow/protontypes/continuous-reforestation/linter.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/linter.yml:10: update your workflow using https://app.stepsecurity.io/secureworkflow/protontypes/continuous-reforestation/linter.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/linter.yml:11: update your workflow using https://app.stepsecurity.io/secureworkflow/protontypes/continuous-reforestation/linter.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/pull_request.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/protontypes/continuous-reforestation/pull_request.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/push.yml:12: update your workflow using https://app.stepsecurity.io/secureworkflow/protontypes/continuous-reforestation/push.yml/main?enable=pin","Warn: containerImage not pinned by hash: Dockerfile:1","Warn: containerImage not pinned by hash: Dockerfile:10: pin your Docker image by updating gcr.io/distroless/python3-debian10 to gcr.io/distroless/python3-debian10@sha256:b0041237ec3b3009275c1e0698fd7339940f2736d3359874da71bebd0878ed0a","Warn: pipCommand not pinned by hash: Dockerfile:6","Info:   0 out of   2 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   3 third-party GitHubAction dependencies pinned","Info:   0 out of   2 containerImage dependencies pinned","Info:   0 out of   1 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 16 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-22T19:13:19.971Z","repository_id":53739674,"created_at":"2025-08-22T19:13:19.971Z","updated_at":"2025-08-22T19:13:19.971Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279154939,"owners_count":26115521,"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","status":"online","status_checked_at":"2025-10-16T02:00:06.019Z","response_time":53,"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"},"owner_record":{"login":"protontypes","name":"protontypes","uuid":"55761070","kind":"organization","description":"A Free Community Accelerating Open and Sustainable Technology","email":null,"website":null,"location":null,"twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/55761070?v=4","repositories_count":15,"last_synced_at":"2025-10-10T00:19:44.862Z","metadata":{"has_sponsors_listing":false,"funding":{"open_collective":"open-sustainable-technology"}},"html_url":"https://github.com/protontypes","funding_links":["https://opencollective.com/open-sustainable-technology"],"total_stars":2899,"followers":163,"following":0,"created_at":"2022-11-14T05:19:52.827Z","updated_at":"2025-10-10T00:19:44.867Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/protontypes","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/protontypes/repositories"},"tags":[]},"repo_metadata_updated_at":"2025-10-16T16:53:34.713Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":11,"rankings":{"downloads":null,"dependent_repos_count":11.801616225637774,"dependent_packages_count":0.0,"stargazers_count":1.229599112660434,"forks_count":12.926636032324513,"docker_downloads_count":null,"average":6.48946284265568},"purl":"pkg:githubactions/protontypes/continuous-reforestation","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/actions/protontypes/continuous-reforestation","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/actions/protontypes/continuous-reforestation","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/actions/protontypes/continuous-reforestation/dependencies","status":null,"funding_links":["https://opencollective.com/open-sustainable-technology"],"critical":null,"issue_metadata":{"last_synced_at":"2025-09-01T08:04:16.028Z","issues_count":6,"pull_requests_count":5,"avg_time_to_close_issue":12523.0,"avg_time_to_close_pull_request":54397.0,"issues_closed_count":1,"pull_requests_closed_count":5,"pull_request_authors_count":3,"issue_authors_count":3,"avg_comments_per_issue":1.8333333333333333,"avg_comments_per_pull_request":0.6,"merged_pull_requests_count":3,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":0,"past_year_pull_requests_count":2,"past_year_avg_time_to_close_issue":null,"past_year_avg_time_to_close_pull_request":125543.0,"past_year_issues_closed_count":0,"past_year_pull_requests_closed_count":2,"past_year_pull_request_authors_count":1,"past_year_issue_authors_count":0,"past_year_avg_comments_per_issue":null,"past_year_avg_comments_per_pull_request":1.0,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":0,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/protontypes%2Fcontinuous-reforestation/issues","maintainers":[{"login":"Ly0n","count":4,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/Ly0n"},{"login":"tjarkdoering","count":3,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/tjarkdoering"}],"active_maintainers":[]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/github%20actions/packages/protontypes%2Fcontinuous-reforestation/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/github%20actions/packages/protontypes%2Fcontinuous-reforestation/version_numbers","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/github%20actions/packages/protontypes%2Fcontinuous-reforestation/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/github%20actions/packages/protontypes%2Fcontinuous-reforestation/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/github%20actions/packages/protontypes%2Fcontinuous-reforestation/codemeta","maintainers":[],"registry":{"name":"github actions","url":"https://github.com/marketplace/actions/","ecosystem":"actions","default":true,"packages_count":32552,"maintainers_count":0,"namespaces_count":20366,"keywords_count":8022,"github":"actions","metadata":{"funded_packages_count":4018},"icon_url":"https://github.com/actions.png","created_at":"2023-01-03T17:16:39.185Z","updated_at":"2026-04-21T05:04:44.748Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/github%20actions/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/github%20actions/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/github%20actions/namespaces"}}],"commits":{"id":476928,"full_name":"protontypes/continuous-reforestation","default_branch":"main","total_commits":113,"total_committers":6,"total_bot_commits":0,"total_bot_committers":0,"mean_commits":18.833333333333332,"dds":0.36283185840707965,"past_year_total_commits":0,"past_year_total_committers":0,"past_year_total_bot_commits":0,"past_year_total_bot_committers":0,"past_year_mean_commits":0.0,"past_year_dds":0.0,"last_synced_at":"2026-04-26T04:01:29.747Z","last_synced_commit":"970d248e5f07f0d5a56477e3756676c6cf30fe02","created_at":"2023-03-09T01:12:39.979Z","updated_at":"2026-04-26T04:00:52.351Z","committers":[{"name":"Tobias Augspurger","email":"tobias.augspurger@protontypes.eu","login":"Ly0n","count":72},{"name":"Tjark Döring","email":"github@tjark-doering.de","login":"tjarkdoering","count":33},{"name":"Jacob Tomlinson","email":"jtomlinson@nvidia.com","login":"jacobtomlinson","count":4},{"name":"Tjark","email":"tjark@ursa.fritz.box","login":null,"count":2},{"name":"cjscheller","email":"10751237+cjscheller","login":"cjscheller","count":1},{"name":"Daniel Silk","email":"dwsilk@gmail.com","login":"dwsilk","count":1}],"past_year_committers":[],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/protontypes%2Fcontinuous-reforestation/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-04-28T00:00:07.369Z","repositories_count":6220950,"commits_count":899969262,"contributors_count":34882066,"owners_count":1146630,"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":"protontypes/continuous-reforestation","html_url":"https://github.com/protontypes/continuous-reforestation","last_synced_at":"2026-02-01T11:03:35.546Z","status":"error","issues_count":6,"pull_requests_count":5,"avg_time_to_close_issue":12523.0,"avg_time_to_close_pull_request":54397.0,"issues_closed_count":1,"pull_requests_closed_count":5,"pull_request_authors_count":3,"issue_authors_count":3,"avg_comments_per_issue":1.8333333333333333,"avg_comments_per_pull_request":0.6,"merged_pull_requests_count":3,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":0,"past_year_pull_requests_count":2,"past_year_avg_time_to_close_issue":null,"past_year_avg_time_to_close_pull_request":125543.0,"past_year_issues_closed_count":0,"past_year_pull_requests_closed_count":2,"past_year_pull_request_authors_count":1,"past_year_issue_authors_count":0,"past_year_avg_comments_per_issue":null,"past_year_avg_comments_per_pull_request":1.0,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":0,"created_at":"2023-05-09T10:36:15.508Z","updated_at":"2026-02-01T11:03:35.546Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/protontypes%2Fcontinuous-reforestation","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/protontypes%2Fcontinuous-reforestation/issues","issue_labels_count":{},"pull_request_labels_count":{},"issue_author_associations_count":{"MEMBER":5,"NONE":1},"pull_request_author_associations_count":{"MEMBER":2,"NONE":2,"CONTRIBUTOR":1},"issue_authors":{"Ly0n":4,"tjarkdoering":1,"maltfield":1},"pull_request_authors":{"myHerbDev":2,"tjarkdoering":2,"cjscheller":1},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-04-28T00:00:08.715Z","repositories_count":14437342,"issues_count":34389784,"pull_requests_count":112714677,"authors_count":11247482,"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":{},"past_year_pull_request_labels_count":{},"past_year_issue_author_associations_count":{},"past_year_pull_request_author_associations_count":{},"past_year_issue_authors":{},"past_year_pull_request_authors":{},"maintainers":[{"login":"Ly0n","count":4,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/Ly0n"},{"login":"tjarkdoering","count":3,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/tjarkdoering"}],"active_maintainers":[]},"events":{"total":{"ForkEvent":1,"WatchEvent":6,"IssueCommentEvent":1},"last_year":{"WatchEvent":2}},"keywords":["carbon-capture","carbon-capture-sequestration","continuous-integration","reforestation","sustainability","sustainable-software"],"dependencies":[{"ecosystem":"actions","filepath":".github/workflows/linter.yml","sha":null,"kind":"manifest","created_at":"2023-01-04T10:57:49.492Z","updated_at":"2023-01-04T10:57:49.492Z","repository_link":"https://github.com/protontypes/continuous-reforestation/blob/main/.github/workflows/linter.yml","dependencies":[{"id":6861916675,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":6861916676,"package_name":"actions/setup-python","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false},{"id":6861916677,"package_name":"psf/black","ecosystem":"actions","requirements":"master","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/pull_request.yml","sha":null,"kind":"manifest","created_at":"2023-01-04T10:57:49.501Z","updated_at":"2023-01-04T10:57:49.501Z","repository_link":"https://github.com/protontypes/continuous-reforestation/blob/main/.github/workflows/pull_request.yml","dependencies":[{"id":6861916678,"package_name":"protontypes/continuous-reforestation","ecosystem":"actions","requirements":"main","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/push.yml","sha":null,"kind":"manifest","created_at":"2023-01-04T10:57:49.513Z","updated_at":"2023-01-04T10:57:49.513Z","repository_link":"https://github.com/protontypes/continuous-reforestation/blob/main/.github/workflows/push.yml","dependencies":[{"id":6861916714,"package_name":"protontypes/continuous-reforestation","ecosystem":"actions","requirements":"main","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":"action.yml","sha":null,"kind":"manifest","created_at":"2023-01-04T10:57:49.521Z","updated_at":"2023-01-04T10:57:49.521Z","repository_link":"https://github.com/protontypes/continuous-reforestation/blob/main/action.yml","dependencies":[{"id":6861916715,"package_name":"Dockerfile","ecosystem":"actions","requirements":"*","direct":true,"kind":"docker","optional":false}]},{"ecosystem":"docker","filepath":"Dockerfile","sha":null,"kind":"manifest","created_at":"2023-01-04T10:57:49.532Z","updated_at":"2023-01-04T10:57:49.532Z","repository_link":"https://github.com/protontypes/continuous-reforestation/blob/main/Dockerfile","dependencies":[{"id":6861916716,"package_name":"python","ecosystem":"docker","requirements":"3-slim","direct":true,"kind":"build","optional":false},{"id":6861916717,"package_name":"gcr.io/distroless/python3-debian10","ecosystem":"docker","requirements":"latest","direct":true,"kind":"build","optional":false}]}],"score":9.467769401256943,"created_at":"2023-09-11T11:54:35.362Z","updated_at":"2026-04-29T05:30:20.266Z","avatar_url":"https://github.com/protontypes.png","language":"Python","category":"Biosphere","sub_category":"Deforestation and Reforestation","monthly_downloads":0,"total_dependent_repos":11,"total_dependent_packages":0,"readme":"# Continuous Reforestation\n**Make tree planting a part of your daily workflow. :deciduous_tree:** \n\n[\u003cimg src=\"logo.svg\" align=\"right\" width=\"250\"\u003e](https://github.com/protontypes/continuous-reforestation)\nA GitHub Action for planting trees within your development workflow using the Reforestation as a Service (RaaS) API developed by [DigitalHumani](https://digitalhumani.com/). \n\nPlanting trees is an easy way to make a difference in the fight against climate change. Every tree helps to bind CO2 as long as it grows and creates living space for wildlife. Automating the process gives you total control of where, when and how much you want to contribute while saving you the fuss of doing the whole process manually. By using the RaaS API, you or your project can plant trees in a transparent way by exposing the API calls and related statistics. The RaaS API is completely free of charge. You only pay for the trees (1 $ each) directly to the reforestation organization. Find more information on this project read our [blog post](https://protontypes.eu/blog/2021/03/25/continuous-reforestation/). \u003cbr\u003e  \u003cbr\u003e\n[![Actions Status](https://github.com/protontypes/continuous-reforestation/workflows/Lint/badge.svg)](https://github.com/jacobtomlinson/protontypes/continuous-reforestation/actions)\n[![Actions Status](https://github.com/protontypes/continuous-reforestation/workflows/Integration%20Test/badge.svg)](https://github.com/protontypes/continuous-reforestation/actions)\n[![](https://badgen.net/badge/icon/Community%20Chat/green?icon=gitter\u0026label)](https://gitter.im/protontypes/community)\n\n## Use cases\nPlant trees on ...\n* pull requests (and/or push, ...).\n* failed or successful tests.\n* the very first contribution to an open source project.\n* a new release, a milestone, or a closed issue.\n* a scheduled event (i.e. once per week).\n* the carbon footprint of your digital products after deployment.\n\nSee more possible trigger events [here](https://docs.github.com/en/actions/reference/events-that-trigger-workflows).\n\n## Usage\n\n1. 🏁 To get started, you need an account with DigitalHumani RaaS. Since they are currently in the early stages, you have to contact them to get an account. Send them an email [here](https://digitalhumani.com/#contact). You also receive the API key value corresponding for your enterprise ID. This is your secret authentication key. **Do not add your API key to your workfile yaml file**.\n\n2. ✂️ Copy the example worflow to `\u003cyour_git_repository\u003e/.github/workflow/integration.yaml` and change the variables in the workflow to your data. Set the `production` variable to `false` to test your implementation within the sandboxed development API. Push your script to GitHub and check the GitHub Action tab of your project. If you use GitHub Action for the first time, activate it when prompted.\n\n3. 📈 An open dashboard is provided to ensure a high level of transparency. This is currently under development and will show additional details. For this purpose visit:\n``\nhttps://digitalhumani.com/dashboard/\u003centerpriseid\u003e\n``\n\n4. 🗝️ Add your authentication key as a secret in your repository `Settings` -\u003e `Secrets` -\u003e `New Repository Secret`: Name: `RAASKEY`, Value: `\u003cyour API key\u003e`. You can also add it as an organization wide secret in the setting of your organization.\n\n5. 🌱 Verify the number of trees planted in the dashboard development statistics. Set the `production` variable to `true` and push this commit. You now have left the development environment and started planting trees. From now on every configured trigger will continuously request to plant trees. At the end of each month you will be asked to confirm your requested amount of trees.\n\nTo see a list of all supported reforestation projects and more details on the RaaS API read the [documentation of DigitalHumani](https://digitalhumani.com/docs/#appendixlist-of-projects).\n\n**Disclaimer:** Even though this workflow automates the request to plant trees, the planting process itself remains manual labour by the reforestation organisations. They are also the people who write your invoice. Due to the amount of work it requires to write these invoices, DigitalHumani accumulates your plant requests until you reach a certain number, depending on your chosen reforestation project, before issuing the order. Below are the least required amounts to receive a monthly invoice and actually plant trees. If you plant more, don't mind this disclaimer.\n\n| Reforestation project | Necessary number of requested trees |\n| --------------------- | ----------------------------------- |\n| Chase Africa | 20 |\n| Conserve Natural Forests | 20 |\n| OneTreePlanted | 1 |\n| Sustainable Harvest International | 50 |\n| TIST | 20 | \n\n### Example workflows\n\n```yaml\nname: Plant a tree on a successful merged pull request to your main branch\non: \n  pull_request_target:\n    branches:\n      - main\n    types:\n      - closed\njobs:\n  planttrees:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Plant a Tree\n        if: github.event.pull_request.merged == true\n        id: planttrees\n        uses: protontypes/continuous-reforestation@main\n        with:\n        # Enter your API variables below\n            apikey: ${{ secrets.raaskey }}\n            enterpriseid: \"\u003cyour_enterprise_ID\u003e\"\n            user: ${{ github.actor }}\n            treecount: 1\n            projectid: \"14442771\" # This projectid can be used to have your trees planted where they are needed the most.\n            production: \"true\"\n\n      - name: Response of digitalhumani.com RaaS API\n        run: |\n            echo \"${{ steps.planttrees.outputs.response }}\"\n```\n\n```yaml\nname: Plant a tree on every push to main\non:\n  push:\n    branches:\n      - main\njobs:\n  planttrees:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Plant a Tree\n        id: planttrees\n        uses: protontypes/continuous-reforestation@main\n        with:\n        # Enter your API variables below\n            apikey: ${{ secrets.raaskey }}\n            enterpriseid: \"\u003cyour_enterprise_ID\"\n            user: ${{ github.actor }}\n            treecount: 1\n            projectid: \"14442771\" # This projectid can be used to have your trees planted where they are needed the most, so this is a great ID to use by default when making the API call. \n            production: \"true\"\n\n      - name: Response of digitalhumani.com RaaS API\n        run: |\n            echo \"${{ steps.planttrees.outputs.response }}\"\n```\n---\n### Inputs\n\n| Input            | Description                           |\n|------------------|---------------------------------------|\n| `apikey`         | Your API secret key to the digitalhumani.com RaaS API. |\n| `enterpriseid`   | ID of your enterprise.                |\n| `user`           | End user by whom the trees were planted. Default is your GitHub user name. |\n| `projectid`      | ID of the reforestation project for where you want the trees to be planted.    |\n| `treecount`      | Number of trees requested to plant per API call as integer. Every tree will create costs of $1 per tree. |\n| `production`     | Set `true` for the production API or false for the development API. |\n\n### Outputs\n\n| Output           | Description                           |\n|------------------|---------------------------------------|\n| `response`       | JSON response of the RaaS API |\n","funding_links":["https://opencollective.com/open-sustainable-technology"],"readme_doi_urls":[],"works":{},"citation_counts":{},"total_citations":0,"keywords_from_contributors":["biodiversity","carbon-emissions","climate","climate-change","climate-data","climate-science","earth-science","energy-consumption","energy-data","ocean"],"project_url":"https://ost.ecosyste.ms/api/v1/projects/614","html_url":"https://ost.ecosyste.ms/projects/614"}