{"id":370002,"url":"https://github.com/samuelcolvin/dirty-equals","last_synced_at":"2026-05-30T16:01:19.209Z","repository":{"id":36997180,"uuid":"452345017","full_name":"samuelcolvin/dirty-equals","owner":"samuelcolvin","description":"Doing dirty (but extremely useful) things with equals.","archived":false,"fork":false,"pushed_at":"2025-11-17T01:49:48.000Z","size":1593,"stargazers_count":990,"open_issues_count":20,"forks_count":45,"subscribers_count":9,"default_branch":"main","last_synced_at":"2026-05-29T06:06:48.112Z","etag":null,"topics":["pytest","python","testing-tools","unit-testing"],"latest_commit_sha":null,"homepage":"https://dirty-equals.helpmanual.io","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/samuelcolvin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"samuelcolvin"}},"created_at":"2022-01-26T16:10:05.000Z","updated_at":"2026-05-28T07:12:51.000Z","dependencies_parsed_at":"2025-12-23T11:05:31.361Z","dependency_job_id":null,"html_url":"https://github.com/samuelcolvin/dirty-equals","commit_stats":{"total_commits":133,"total_committers":18,"mean_commits":7.388888888888889,"dds":"0.18796992481203012","last_synced_commit":"065162ac195964df7f5c47288561809e49deac48"},"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/samuelcolvin/dirty-equals","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/samuelcolvin","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/sbom","scorecard":{"id":798334,"data":{"date":"2025-08-11","repo":{"name":"github.com/samuelcolvin/dirty-equals","commit":"31ab5a3b6141106919058c19dc41f0d4e9107d22"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.8,"checks":[{"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":"Code-Review","score":4,"reason":"Found 13/30 approved changesets -- score normalized to 4","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":"Maintained","score":2,"reason":"2 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 2","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"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":"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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ci.yml:1","Warn: topLevel 'statuses' permission set to 'write': .github/workflows/upload-previews.yml:9","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":"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/ci.yml:118: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:122: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:125: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:148: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:165: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:168: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:177: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:185: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:37: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:48: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:57: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:59: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:65: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:74: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:77: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:94: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:106: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/upload-previews.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/upload-previews.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/upload-previews.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/upload-previews.yml/main?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:174","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:43","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:64","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:83","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:87","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:131","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:134","Warn: pipCommand not pinned by hash: .github/workflows/upload-previews.yml:22","Warn: pipCommand not pinned by hash: .github/workflows/upload-previews.yml:23","Info:   0 out of  13 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   7 third-party GitHubAction dependencies pinned","Info:   0 out of   9 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":"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":"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":"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":"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":"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":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"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":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/ci.yml:155"],"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":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 24 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-23T09:39:44.277Z","repository_id":36997180,"created_at":"2025-08-23T09:39:44.277Z","updated_at":"2025-08-23T09:39:44.277Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33698654,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-30T02:00:06.278Z","response_time":92,"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":{"login":"samuelcolvin","name":"Samuel Colvin","uuid":"4039449","kind":"user","description":"The Pydantic Stack: Pydantic Validation, Pydantic AI and Pydantic Logfire","email":"samuel@pydantic.dev","website":"https://pydantic.dev/logfire","location":"London, United Kingdom","twitter":"samuel_colvin","company":"@pydantic","icon_url":"https://avatars.githubusercontent.com/u/4039449?u=42eb3b833047c8c4b4f647a031eaef148c16d93f\u0026v=4","repositories_count":301,"last_synced_at":"2025-12-26T04:02:35.764Z","metadata":{"has_sponsors_listing":true},"html_url":"https://github.com/samuelcolvin","funding_links":["https://github.com/sponsors/samuelcolvin"],"total_stars":7525,"followers":5983,"following":47,"created_at":"2022-11-05T13:50:51.563Z","updated_at":"2025-12-26T04:02:35.764Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/samuelcolvin","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/samuelcolvin/repositories"},"packages":[{"id":7778497,"name":"py3-dirty-equals-pyc","ecosystem":"alpine","description":"Precompiled Python bytecode for py3-dirty-equals","homepage":"https://github.com/samuelcolvin/dirty-equals","licenses":"MIT","normalized_licenses":["MIT"],"repository_url":"https://github.com/samuelcolvin/dirty-equals","keywords_array":[],"namespace":"community","versions_count":1,"first_release_published_at":"2023-04-19T22:10:20.000Z","latest_release_published_at":"2023-04-19T22:10:20.000Z","latest_release_number":"0.5.0-r2","last_synced_at":"2026-04-10T18:04:04.194Z","created_at":"2023-05-22T14:18:38.660Z","updated_at":"2026-04-10T18:04:04.194Z","registry_url":"https://pkgs.alpinelinux.org/package/v3.18/community/x86_64/py3-dirty-equals-pyc","install_command":"apk add py3-dirty-equals-pyc","documentation_url":null,"metadata":{"repository":"community","architecture":"x86_64"},"repo_metadata":{"id":36997180,"uuid":"452345017","full_name":"samuelcolvin/dirty-equals","owner":"samuelcolvin","description":"Doing dirty (but extremely useful) things with equals.","archived":false,"fork":false,"pushed_at":"2025-11-17T01:49:48.000Z","size":1593,"stargazers_count":942,"open_issues_count":16,"forks_count":43,"subscribers_count":9,"default_branch":"main","last_synced_at":"2025-12-10T23:50:26.551Z","etag":null,"topics":["pytest","python","testing-tools","unit-testing"],"latest_commit_sha":null,"homepage":"https://dirty-equals.helpmanual.io","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/samuelcolvin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"samuelcolvin"}},"created_at":"2022-01-26T16:10:05.000Z","updated_at":"2025-12-02T17:46:51.000Z","dependencies_parsed_at":"2024-01-12T23:43:05.531Z","dependency_job_id":"b1ec0257-f6d7-4d8d-9041-c350d7e1d39c","html_url":"https://github.com/samuelcolvin/dirty-equals","commit_stats":{"total_commits":133,"total_committers":18,"mean_commits":7.388888888888889,"dds":"0.18796992481203012","last_synced_commit":"065162ac195964df7f5c47288561809e49deac48"},"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/samuelcolvin/dirty-equals","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/samuelcolvin","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/sbom","scorecard":{"id":798334,"data":{"date":"2025-08-11","repo":{"name":"github.com/samuelcolvin/dirty-equals","commit":"31ab5a3b6141106919058c19dc41f0d4e9107d22"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.8,"checks":[{"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":"Code-Review","score":4,"reason":"Found 13/30 approved changesets -- score normalized to 4","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":"Maintained","score":2,"reason":"2 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 2","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"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":"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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ci.yml:1","Warn: topLevel 'statuses' permission set to 'write': .github/workflows/upload-previews.yml:9","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":"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/ci.yml:118: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:122: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:125: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:148: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:165: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:168: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:177: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:185: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:37: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:48: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:57: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:59: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:65: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:74: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:77: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:94: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:106: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/upload-previews.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/upload-previews.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/upload-previews.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/upload-previews.yml/main?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:174","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:43","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:64","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:83","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:87","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:131","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:134","Warn: pipCommand not pinned by hash: .github/workflows/upload-previews.yml:22","Warn: pipCommand not pinned by hash: .github/workflows/upload-previews.yml:23","Info:   0 out of  13 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   7 third-party GitHubAction dependencies pinned","Info:   0 out of   9 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":"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":"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":"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":"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":"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":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"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":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/ci.yml:155"],"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":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 24 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-23T09:39:44.277Z","repository_id":36997180,"created_at":"2025-08-23T09:39:44.277Z","updated_at":"2025-08-23T09:39:44.277Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":27653730,"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-12-11T02:00:11.302Z","response_time":56,"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"},"tags":[{"name":"v0.11.0","sha":"e8cd329dfb910a9696edc9cb793e35c2de6c502e","kind":"commit","published_at":"2025-11-17T01:44:58.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.11.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.11.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.11.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.11.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.11.0/manifests"},{"name":"v0.10.0","sha":"32f23d118cae651a91209fbaa651b0adada60c71","kind":"commit","published_at":"2025-09-19T16:03:15.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.10.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.10.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.10.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.10.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.10.0/manifests"},{"name":"v0.9.0","sha":"9e6f0be981f982fdaae16671ab14aefc3ab8664a","kind":"commit","published_at":"2025-01-11T23:20:42.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.9.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.9.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.9.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.9.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.9.0/manifests"},{"name":"v0.8.0","sha":"da29a2db8293c4c974f303974a6e5ffdb462c9b4","kind":"commit","published_at":"2024-08-13T19:53:17.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.8.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.8.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.8.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.8.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.8.0/manifests"},{"name":"v0.7.1-post0","sha":"5da8ed1cfea51c86c2585264d6bec8de2942d029","kind":"commit","published_at":"2023-11-15T04:29:18.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.7.1-post0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.7.1-post0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.7.1-post0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.1-post0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.1-post0/manifests"},{"name":"v0.7.1","sha":"78a992266989f2687eae48f58367906d895af285","kind":"commit","published_at":"2023-11-14T12:38:22.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.7.1","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.7.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.7.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.1/manifests"},{"name":"v0.7.0","sha":"87d4552f76f3a123cf0455f46f89091ade15614f","kind":"commit","published_at":"2023-09-03T14:17:15.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.7.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.7.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.7.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.0/manifests"},{"name":"v0.6.0","sha":"5577ce517e6ede343634e11dd5f397356aefd1d2","kind":"tag","published_at":"2023-04-27T23:55:39.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.6.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.6.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.6.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.6.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.6.0/manifests"},{"name":"v0.5.0","sha":"b65760701f6649b4f188c6a1294b3b91b2d2ba85","kind":"tag","published_at":"2022-08-30T20:05:41.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.5.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.5.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.5.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.5.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.5.0/manifests"},{"name":"v0.4","sha":"2d3c0e5ec4c92c1e336b231343c675f78ac746c8","kind":"commit","published_at":"2022-04-28T15:37:25.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.4","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.4","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.4","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.4/manifests"},{"name":"v0.3","sha":"c128d7cf3aa7d48696433be6b9945cc45fa6b046","kind":"commit","published_at":"2022-04-18T12:08:04.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.3","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.3","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.3","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.3/manifests"},{"name":"v0.2.1","sha":"6eb2932c40452ce7a62e0f3ba832d3712026b606","kind":"commit","published_at":"2022-03-30T11:09:12.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.2.1","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.2.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.2.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.2.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.2.1/manifests"},{"name":"v0.2","sha":"ae3881c6ff78ca608b97cb581d6a733bd974e102","kind":"commit","published_at":"2022-03-29T14:15:56.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.2","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.2/manifests"},{"name":"v0.1","sha":"450492e624f0b42c1addd20cac684b4614f1a78f","kind":"commit","published_at":"2022-02-25T16:37:37.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.1","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.1/manifests"},{"name":"v0.0.5","sha":"35cfacc7dac357cc5b3b8bdd64e2667a0f25691e","kind":"commit","published_at":"2022-02-24T21:26:02.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.0.5","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.0.5","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.0.5","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.5/manifests"},{"name":"v0.0.4","sha":"0a78e042ef9db11d7337966d2c29e4c43251eef1","kind":"commit","published_at":"2022-02-23T20:01:20.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.0.4","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.0.4","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.0.4","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.4/manifests"},{"name":"v0.0.3","sha":"c690abbb32e5893d3bb2634e1345ab30a2f46791","kind":"commit","published_at":"2022-02-22T19:38:42.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.0.3","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.0.3","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.0.3","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.3/manifests"},{"name":"v0.0.2","sha":"1a09de2bb95f4fa903f47adfe1a35dc1fcad8afb","kind":"commit","published_at":"2022-01-28T11:55:35.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.0.2","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.0.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.0.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.2/manifests"},{"name":"v0.0.1","sha":"9fae3910fed3925b9d950afb85ced13a7c3ba4aa","kind":"commit","published_at":"2022-01-27T22:49:09.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.0.1","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.0.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.1/manifests"}]},"repo_metadata_updated_at":"2025-12-11T14:22:47.343Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":0.0,"dependent_packages_count":0.0,"stargazers_count":9.844895516433096,"forks_count":19.859358635479527,"docker_downloads_count":null,"average":7.426063537978155},"purl":"pkg:apk/alpine/py3-dirty-equals-pyc?arch=x86_64\u0026repository_url=https://pkgs.alpinelinux.org/packages?branch=v3.18","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/alpine/py3-dirty-equals-pyc","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/alpine/py3-dirty-equals-pyc","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/alpine/py3-dirty-equals-pyc/dependencies","status":null,"funding_links":["https://github.com/sponsors/samuelcolvin"],"critical":null,"issue_metadata":{"last_synced_at":"2025-11-26T21:09:34.267Z","issues_count":40,"pull_requests_count":85,"avg_time_to_close_issue":9056859.0,"avg_time_to_close_pull_request":3034838.3205128205,"issues_closed_count":25,"pull_requests_closed_count":78,"pull_request_authors_count":24,"issue_authors_count":23,"avg_comments_per_issue":2.775,"avg_comments_per_pull_request":1.6,"merged_pull_requests_count":70,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":5,"past_year_pull_requests_count":8,"past_year_avg_time_to_close_issue":131984.0,"past_year_avg_time_to_close_pull_request":17296.8,"past_year_issues_closed_count":1,"past_year_pull_requests_closed_count":5,"past_year_pull_request_authors_count":4,"past_year_issue_authors_count":5,"past_year_avg_comments_per_issue":1.2,"past_year_avg_comments_per_pull_request":0.625,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":5,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/issues","maintainers":[{"login":"samuelcolvin","count":53,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/samuelcolvin"},{"login":"15r10nk","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/15r10nk"}],"active_maintainers":[{"login":"samuelcolvin","count":5,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/samuelcolvin"}]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.18/packages/py3-dirty-equals-pyc/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.18/packages/py3-dirty-equals-pyc/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.18/packages/py3-dirty-equals-pyc/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.18/packages/py3-dirty-equals-pyc/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.18/packages/py3-dirty-equals-pyc/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.18/packages/py3-dirty-equals-pyc/codemeta","maintainers":[{"uuid":"alpine@juniorjpdj.pl","login":null,"name":"JuniorJPDJ","email":null,"url":"https://pkgs.alpinelinux.org/packages?maintainer=JuniorJPDJ","packages_count":9,"html_url":"https://pkgs.alpinelinux.org/packages?maintainer=JuniorJPDJ","role":null,"created_at":"2023-05-23T07:07:06.315Z","updated_at":"2023-05-23T07:07:06.315Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.18/maintainers/alpine@juniorjpdj.pl/packages"}],"registry":{"name":"alpine-v3.18","url":"https://pkgs.alpinelinux.org/packages?branch=v3.18","ecosystem":"alpine","default":false,"packages_count":20068,"maintainers_count":367,"namespaces_count":2,"keywords_count":0,"github":"alpinelinux","metadata":{"repos":["main","community"]},"icon_url":"https://github.com/alpinelinux.png","created_at":"2023-05-22T10:43:30.622Z","updated_at":"2026-04-27T18:20:23.557Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.18/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.18/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.18/namespaces"}},{"id":8676574,"name":"py3-dirty-equals","ecosystem":"alpine","description":"Doing dirty (but extremely useful) things with equals.","homepage":"https://github.com/samuelcolvin/dirty-equals","licenses":"MIT","normalized_licenses":["MIT"],"repository_url":"https://github.com/samuelcolvin/dirty-equals","keywords_array":[],"namespace":"community","versions_count":1,"first_release_published_at":"2023-07-18T20:29:08.000Z","latest_release_published_at":"2023-07-18T20:29:08.000Z","latest_release_number":"0.6.0-r0","last_synced_at":"2026-04-10T18:03:22.025Z","created_at":"2023-12-20T10:26:58.447Z","updated_at":"2026-04-10T18:03:22.027Z","registry_url":"https://pkgs.alpinelinux.org/package/v3.19/community/x86_64/py3-dirty-equals","install_command":"apk add py3-dirty-equals","documentation_url":null,"metadata":{"repository":"community","architecture":"x86_64"},"repo_metadata":{},"repo_metadata_updated_at":null,"dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":0.0,"dependent_packages_count":0.0,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":100},"purl":"pkg:apk/alpine/py3-dirty-equals?arch=x86_64\u0026repository_url=https://pkgs.alpinelinux.org/packages?branch=v3.19","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/alpine/py3-dirty-equals","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/alpine/py3-dirty-equals","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/alpine/py3-dirty-equals/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":null,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.19/packages/py3-dirty-equals/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.19/packages/py3-dirty-equals/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.19/packages/py3-dirty-equals/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.19/packages/py3-dirty-equals/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.19/packages/py3-dirty-equals/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.19/packages/py3-dirty-equals/codemeta","maintainers":[{"uuid":"alpine@juniorjpdj.pl","login":null,"name":"JuniorJPDJ","email":null,"url":"https://pkgs.alpinelinux.org/packages?maintainer=JuniorJPDJ","packages_count":9,"html_url":"https://pkgs.alpinelinux.org/packages?maintainer=JuniorJPDJ","role":null,"created_at":"2024-02-25T03:23:23.743Z","updated_at":"2024-02-25T03:23:23.743Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.19/maintainers/alpine@juniorjpdj.pl/packages"}],"registry":{"name":"alpine-v3.19","url":"https://pkgs.alpinelinux.org/packages?branch=v3.19","ecosystem":"alpine","default":false,"packages_count":23031,"maintainers_count":392,"namespaces_count":2,"keywords_count":0,"github":"alpinelinux","metadata":{"repos":["main","community"]},"icon_url":"https://github.com/alpinelinux.png","created_at":"2023-12-20T09:51:56.346Z","updated_at":"2026-04-27T18:20:23.384Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.19/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.19/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.19/namespaces"}},{"id":10344103,"name":"py3-dirty-equals","ecosystem":"alpine","description":"Doing dirty (but extremely useful) things with equals.","homepage":"https://github.com/samuelcolvin/dirty-equals","licenses":"MIT","normalized_licenses":["MIT"],"repository_url":"https://github.com/samuelcolvin/dirty-equals","keywords_array":[],"namespace":"community","versions_count":1,"first_release_published_at":"2024-04-12T09:59:22.000Z","latest_release_published_at":"2024-04-12T09:59:22.000Z","latest_release_number":"0.7.1-r1","last_synced_at":"2026-04-10T18:03:17.609Z","created_at":"2024-06-11T09:43:44.213Z","updated_at":"2026-04-10T18:03:17.609Z","registry_url":"https://pkgs.alpinelinux.org/package/v3.20/community/x86_64/py3-dirty-equals","install_command":"apk add py3-dirty-equals","documentation_url":null,"metadata":{"repository":"community","architecture":"x86_64"},"repo_metadata":{"id":36997180,"uuid":"452345017","full_name":"samuelcolvin/dirty-equals","owner":"samuelcolvin","description":"Doing dirty (but extremely useful) things with equals.","archived":false,"fork":false,"pushed_at":"2025-11-17T01:49:48.000Z","size":1593,"stargazers_count":942,"open_issues_count":16,"forks_count":43,"subscribers_count":9,"default_branch":"main","last_synced_at":"2025-12-10T23:50:26.551Z","etag":null,"topics":["pytest","python","testing-tools","unit-testing"],"latest_commit_sha":null,"homepage":"https://dirty-equals.helpmanual.io","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/samuelcolvin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"samuelcolvin"}},"created_at":"2022-01-26T16:10:05.000Z","updated_at":"2025-12-02T17:46:51.000Z","dependencies_parsed_at":"2024-01-12T23:43:05.531Z","dependency_job_id":"b1ec0257-f6d7-4d8d-9041-c350d7e1d39c","html_url":"https://github.com/samuelcolvin/dirty-equals","commit_stats":{"total_commits":133,"total_committers":18,"mean_commits":7.388888888888889,"dds":"0.18796992481203012","last_synced_commit":"065162ac195964df7f5c47288561809e49deac48"},"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/samuelcolvin/dirty-equals","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/samuelcolvin","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/sbom","scorecard":{"id":798334,"data":{"date":"2025-08-11","repo":{"name":"github.com/samuelcolvin/dirty-equals","commit":"31ab5a3b6141106919058c19dc41f0d4e9107d22"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.8,"checks":[{"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":"Code-Review","score":4,"reason":"Found 13/30 approved changesets -- score normalized to 4","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":"Maintained","score":2,"reason":"2 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 2","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"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":"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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ci.yml:1","Warn: topLevel 'statuses' permission set to 'write': .github/workflows/upload-previews.yml:9","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":"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/ci.yml:118: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:122: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:125: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:148: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:165: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:168: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:177: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:185: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:37: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:48: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:57: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:59: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:65: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:74: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:77: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:94: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:106: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/upload-previews.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/upload-previews.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/upload-previews.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/upload-previews.yml/main?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:174","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:43","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:64","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:83","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:87","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:131","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:134","Warn: pipCommand not pinned by hash: .github/workflows/upload-previews.yml:22","Warn: pipCommand not pinned by hash: .github/workflows/upload-previews.yml:23","Info:   0 out of  13 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   7 third-party GitHubAction dependencies pinned","Info:   0 out of   9 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":"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":"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":"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":"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":"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":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"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":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/ci.yml:155"],"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":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 24 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-23T09:39:44.277Z","repository_id":36997180,"created_at":"2025-08-23T09:39:44.277Z","updated_at":"2025-08-23T09:39:44.277Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":27666232,"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-12-11T02:00:11.302Z","response_time":56,"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":"samuelcolvin","name":"Samuel Colvin","uuid":"4039449","kind":"user","description":"The Pydantic Stack: Pydantic Validation, Pydantic AI and Pydantic Logfire","email":"samuel@pydantic.dev","website":"https://pydantic.dev/logfire","location":"London, United Kingdom","twitter":"samuel_colvin","company":"@pydantic","icon_url":"https://avatars.githubusercontent.com/u/4039449?u=42eb3b833047c8c4b4f647a031eaef148c16d93f\u0026v=4","repositories_count":300,"last_synced_at":"2025-10-30T09:42:32.057Z","metadata":{"has_sponsors_listing":true},"html_url":"https://github.com/samuelcolvin","funding_links":["https://github.com/sponsors/samuelcolvin"],"total_stars":7427,"followers":5901,"following":47,"created_at":"2022-11-05T13:50:51.563Z","updated_at":"2025-10-30T09:42:32.057Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/samuelcolvin","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/samuelcolvin/repositories"},"tags":[]},"repo_metadata_updated_at":"2025-12-11T14:21:23.941Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":0.0,"dependent_packages_count":0.0,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":100},"purl":"pkg:apk/alpine/py3-dirty-equals?arch=x86_64\u0026repository_url=https://pkgs.alpinelinux.org/packages?branch=v3.20","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/alpine/py3-dirty-equals","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/alpine/py3-dirty-equals","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/alpine/py3-dirty-equals/dependencies","status":null,"funding_links":["https://github.com/sponsors/samuelcolvin"],"critical":null,"issue_metadata":{"last_synced_at":"2025-11-26T21:09:34.267Z","issues_count":40,"pull_requests_count":85,"avg_time_to_close_issue":9056859.0,"avg_time_to_close_pull_request":3034838.3205128205,"issues_closed_count":25,"pull_requests_closed_count":78,"pull_request_authors_count":24,"issue_authors_count":23,"avg_comments_per_issue":2.775,"avg_comments_per_pull_request":1.6,"merged_pull_requests_count":70,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":5,"past_year_pull_requests_count":8,"past_year_avg_time_to_close_issue":131984.0,"past_year_avg_time_to_close_pull_request":17296.8,"past_year_issues_closed_count":1,"past_year_pull_requests_closed_count":5,"past_year_pull_request_authors_count":4,"past_year_issue_authors_count":5,"past_year_avg_comments_per_issue":1.2,"past_year_avg_comments_per_pull_request":0.625,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":5,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/issues","maintainers":[{"login":"samuelcolvin","count":53,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/samuelcolvin"},{"login":"15r10nk","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/15r10nk"}],"active_maintainers":[{"login":"samuelcolvin","count":5,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/samuelcolvin"}]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.20/packages/py3-dirty-equals/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.20/packages/py3-dirty-equals/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.20/packages/py3-dirty-equals/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.20/packages/py3-dirty-equals/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.20/packages/py3-dirty-equals/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.20/packages/py3-dirty-equals/codemeta","maintainers":[{"uuid":"alpine@juniorjpdj.pl","login":null,"name":"Jacek Pruciak","email":null,"url":"https://pkgs.alpinelinux.org/packages?maintainer=Jacek Pruciak","packages_count":7,"html_url":"https://pkgs.alpinelinux.org/packages?maintainer=Jacek Pruciak","role":null,"created_at":"2024-06-12T01:04:04.435Z","updated_at":"2024-06-12T01:04:04.435Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.20/maintainers/alpine@juniorjpdj.pl/packages"}],"registry":{"name":"alpine-v3.20","url":"https://pkgs.alpinelinux.org/packages?branch=v3.20","ecosystem":"alpine","default":false,"packages_count":24162,"maintainers_count":405,"namespaces_count":2,"keywords_count":0,"github":"alpinelinux","metadata":{"repos":["main","community"]},"icon_url":"https://github.com/alpinelinux.png","created_at":"2024-06-07T11:51:39.915Z","updated_at":"2026-04-27T18:20:23.245Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.20/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.20/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.20/namespaces"}},{"id":11138522,"name":"py3-dirty-equals-pyc","ecosystem":"alpine","description":"Precompiled Python bytecode for py3-dirty-equals","homepage":"https://github.com/samuelcolvin/dirty-equals","licenses":"MIT","normalized_licenses":["MIT"],"repository_url":"https://github.com/samuelcolvin/dirty-equals","keywords_array":[],"namespace":"community","versions_count":1,"first_release_published_at":"2024-10-19T10:40:05.000Z","latest_release_published_at":"2024-10-19T10:40:05.000Z","latest_release_number":"0.8.0-r0","last_synced_at":"2026-04-10T18:03:16.824Z","created_at":"2024-12-07T12:29:52.283Z","updated_at":"2026-04-10T18:03:16.825Z","registry_url":"https://pkgs.alpinelinux.org/package/v3.21/community/x86_64/py3-dirty-equals-pyc","install_command":"apk add py3-dirty-equals-pyc","documentation_url":null,"metadata":{"repository":"community","architecture":"x86_64"},"repo_metadata":{"id":36997180,"uuid":"452345017","full_name":"samuelcolvin/dirty-equals","owner":"samuelcolvin","description":"Doing dirty (but extremely useful) things with equals.","archived":false,"fork":false,"pushed_at":"2025-11-17T01:49:48.000Z","size":1593,"stargazers_count":942,"open_issues_count":16,"forks_count":43,"subscribers_count":9,"default_branch":"main","last_synced_at":"2025-12-10T23:50:26.551Z","etag":null,"topics":["pytest","python","testing-tools","unit-testing"],"latest_commit_sha":null,"homepage":"https://dirty-equals.helpmanual.io","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/samuelcolvin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"samuelcolvin"}},"created_at":"2022-01-26T16:10:05.000Z","updated_at":"2025-12-02T17:46:51.000Z","dependencies_parsed_at":"2024-01-12T23:43:05.531Z","dependency_job_id":"b1ec0257-f6d7-4d8d-9041-c350d7e1d39c","html_url":"https://github.com/samuelcolvin/dirty-equals","commit_stats":{"total_commits":133,"total_committers":18,"mean_commits":7.388888888888889,"dds":"0.18796992481203012","last_synced_commit":"065162ac195964df7f5c47288561809e49deac48"},"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/samuelcolvin/dirty-equals","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/samuelcolvin","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/sbom","scorecard":{"id":798334,"data":{"date":"2025-08-11","repo":{"name":"github.com/samuelcolvin/dirty-equals","commit":"31ab5a3b6141106919058c19dc41f0d4e9107d22"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.8,"checks":[{"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":"Code-Review","score":4,"reason":"Found 13/30 approved changesets -- score normalized to 4","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":"Maintained","score":2,"reason":"2 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 2","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"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":"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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ci.yml:1","Warn: topLevel 'statuses' permission set to 'write': .github/workflows/upload-previews.yml:9","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":"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/ci.yml:118: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:122: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:125: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:148: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:165: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:168: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:177: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:185: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:37: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:48: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:57: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:59: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:65: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:74: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:77: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:94: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:106: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/upload-previews.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/upload-previews.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/upload-previews.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/upload-previews.yml/main?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:174","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:43","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:64","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:83","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:87","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:131","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:134","Warn: pipCommand not pinned by hash: .github/workflows/upload-previews.yml:22","Warn: pipCommand not pinned by hash: .github/workflows/upload-previews.yml:23","Info:   0 out of  13 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   7 third-party GitHubAction dependencies pinned","Info:   0 out of   9 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":"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":"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":"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":"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":"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":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"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":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/ci.yml:155"],"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":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 24 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-23T09:39:44.277Z","repository_id":36997180,"created_at":"2025-08-23T09:39:44.277Z","updated_at":"2025-08-23T09:39:44.277Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":27653730,"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-12-11T02:00:11.302Z","response_time":56,"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"},"tags":[{"name":"v0.11.0","sha":"e8cd329dfb910a9696edc9cb793e35c2de6c502e","kind":"commit","published_at":"2025-11-17T01:44:58.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.11.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.11.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.11.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.11.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.11.0/manifests"},{"name":"v0.10.0","sha":"32f23d118cae651a91209fbaa651b0adada60c71","kind":"commit","published_at":"2025-09-19T16:03:15.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.10.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.10.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.10.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.10.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.10.0/manifests"},{"name":"v0.9.0","sha":"9e6f0be981f982fdaae16671ab14aefc3ab8664a","kind":"commit","published_at":"2025-01-11T23:20:42.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.9.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.9.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.9.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.9.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.9.0/manifests"},{"name":"v0.8.0","sha":"da29a2db8293c4c974f303974a6e5ffdb462c9b4","kind":"commit","published_at":"2024-08-13T19:53:17.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.8.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.8.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.8.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.8.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.8.0/manifests"},{"name":"v0.7.1-post0","sha":"5da8ed1cfea51c86c2585264d6bec8de2942d029","kind":"commit","published_at":"2023-11-15T04:29:18.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.7.1-post0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.7.1-post0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.7.1-post0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.1-post0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.1-post0/manifests"},{"name":"v0.7.1","sha":"78a992266989f2687eae48f58367906d895af285","kind":"commit","published_at":"2023-11-14T12:38:22.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.7.1","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.7.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.7.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.1/manifests"},{"name":"v0.7.0","sha":"87d4552f76f3a123cf0455f46f89091ade15614f","kind":"commit","published_at":"2023-09-03T14:17:15.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.7.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.7.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.7.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.0/manifests"},{"name":"v0.6.0","sha":"5577ce517e6ede343634e11dd5f397356aefd1d2","kind":"tag","published_at":"2023-04-27T23:55:39.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.6.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.6.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.6.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.6.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.6.0/manifests"},{"name":"v0.5.0","sha":"b65760701f6649b4f188c6a1294b3b91b2d2ba85","kind":"tag","published_at":"2022-08-30T20:05:41.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.5.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.5.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.5.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.5.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.5.0/manifests"},{"name":"v0.4","sha":"2d3c0e5ec4c92c1e336b231343c675f78ac746c8","kind":"commit","published_at":"2022-04-28T15:37:25.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.4","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.4","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.4","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.4/manifests"},{"name":"v0.3","sha":"c128d7cf3aa7d48696433be6b9945cc45fa6b046","kind":"commit","published_at":"2022-04-18T12:08:04.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.3","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.3","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.3","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.3/manifests"},{"name":"v0.2.1","sha":"6eb2932c40452ce7a62e0f3ba832d3712026b606","kind":"commit","published_at":"2022-03-30T11:09:12.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.2.1","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.2.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.2.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.2.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.2.1/manifests"},{"name":"v0.2","sha":"ae3881c6ff78ca608b97cb581d6a733bd974e102","kind":"commit","published_at":"2022-03-29T14:15:56.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.2","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.2/manifests"},{"name":"v0.1","sha":"450492e624f0b42c1addd20cac684b4614f1a78f","kind":"commit","published_at":"2022-02-25T16:37:37.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.1","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.1/manifests"},{"name":"v0.0.5","sha":"35cfacc7dac357cc5b3b8bdd64e2667a0f25691e","kind":"commit","published_at":"2022-02-24T21:26:02.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.0.5","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.0.5","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.0.5","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.5/manifests"},{"name":"v0.0.4","sha":"0a78e042ef9db11d7337966d2c29e4c43251eef1","kind":"commit","published_at":"2022-02-23T20:01:20.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.0.4","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.0.4","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.0.4","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.4/manifests"},{"name":"v0.0.3","sha":"c690abbb32e5893d3bb2634e1345ab30a2f46791","kind":"commit","published_at":"2022-02-22T19:38:42.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.0.3","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.0.3","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.0.3","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.3/manifests"},{"name":"v0.0.2","sha":"1a09de2bb95f4fa903f47adfe1a35dc1fcad8afb","kind":"commit","published_at":"2022-01-28T11:55:35.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.0.2","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.0.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.0.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.2/manifests"},{"name":"v0.0.1","sha":"9fae3910fed3925b9d950afb85ced13a7c3ba4aa","kind":"commit","published_at":"2022-01-27T22:49:09.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.0.1","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.0.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.1/manifests"}]},"repo_metadata_updated_at":"2025-12-11T14:21:17.470Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":0.0,"dependent_packages_count":0.0,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":100},"purl":"pkg:apk/alpine/py3-dirty-equals-pyc?arch=x86_64\u0026repository_url=https://pkgs.alpinelinux.org/packages?branch=v3.21","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/alpine/py3-dirty-equals-pyc","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/alpine/py3-dirty-equals-pyc","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/alpine/py3-dirty-equals-pyc/dependencies","status":null,"funding_links":["https://github.com/sponsors/samuelcolvin"],"critical":null,"issue_metadata":{"last_synced_at":"2025-11-26T21:09:34.267Z","issues_count":40,"pull_requests_count":85,"avg_time_to_close_issue":9056859.0,"avg_time_to_close_pull_request":3034838.3205128205,"issues_closed_count":25,"pull_requests_closed_count":78,"pull_request_authors_count":24,"issue_authors_count":23,"avg_comments_per_issue":2.775,"avg_comments_per_pull_request":1.6,"merged_pull_requests_count":70,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":5,"past_year_pull_requests_count":8,"past_year_avg_time_to_close_issue":131984.0,"past_year_avg_time_to_close_pull_request":17296.8,"past_year_issues_closed_count":1,"past_year_pull_requests_closed_count":5,"past_year_pull_request_authors_count":4,"past_year_issue_authors_count":5,"past_year_avg_comments_per_issue":1.2,"past_year_avg_comments_per_pull_request":0.625,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":5,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/issues","maintainers":[{"login":"samuelcolvin","count":53,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/samuelcolvin"},{"login":"15r10nk","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/15r10nk"}],"active_maintainers":[{"login":"samuelcolvin","count":5,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/samuelcolvin"}]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.21/packages/py3-dirty-equals-pyc/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.21/packages/py3-dirty-equals-pyc/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.21/packages/py3-dirty-equals-pyc/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.21/packages/py3-dirty-equals-pyc/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.21/packages/py3-dirty-equals-pyc/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.21/packages/py3-dirty-equals-pyc/codemeta","maintainers":[{"uuid":"alpine@juniorjpdj.pl","login":null,"name":"Jacek Pruciak","email":null,"url":"https://pkgs.alpinelinux.org/packages?maintainer=Jacek Pruciak","packages_count":7,"html_url":"https://pkgs.alpinelinux.org/packages?maintainer=Jacek Pruciak","role":null,"created_at":"2024-12-11T15:12:11.002Z","updated_at":"2024-12-11T15:12:11.002Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.21/maintainers/alpine@juniorjpdj.pl/packages"}],"registry":{"name":"alpine-v3.21","url":"https://pkgs.alpinelinux.org/packages?branch=v3.21","ecosystem":"alpine","default":false,"packages_count":25393,"maintainers_count":413,"namespaces_count":2,"keywords_count":0,"github":"alpinelinux","metadata":{"repos":["main","community"]},"icon_url":"https://github.com/alpinelinux.png","created_at":"2024-12-06T12:06:36.014Z","updated_at":"2026-04-27T18:20:22.676Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.21/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.21/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.21/namespaces"}},{"id":13294857,"name":"python310Packages.dirty-equals","ecosystem":"nixpkgs","description":"Module for doing dirty (but extremely useful) things with equals","homepage":"https://github.com/samuelcolvin/dirty-equals","licenses":"MIT","normalized_licenses":["MIT"],"repository_url":"https://github.com/samuelcolvin/dirty-equals","keywords_array":["python"],"namespace":null,"versions_count":1,"first_release_published_at":"2026-02-02T06:24:07.755Z","latest_release_published_at":"2026-02-02T06:24:07.755Z","latest_release_number":"0.7.0","last_synced_at":"2026-03-07T05:32:27.749Z","created_at":"2026-02-02T06:24:05.389Z","updated_at":"2026-03-07T05:32:27.973Z","registry_url":"https://search.nixos.org/packages?channel=23.11\u0026query=python310Packages.dirty-equals","install_command":"nix-env -iA nixpkgs.python310Packages.dirty-equals","documentation_url":"https://github.com/NixOS/nixpkgs/blob/nixos-23.11/pkgs/development/python-modules/dirty-equals/default.nix#L49","metadata":{"nix_attribute":"python3.10-dirty-equals-0.7.0","position":"pkgs/development/python-modules/dirty-equals/default.nix:49","platforms":["aarch64-linux","armv5tel-linux","armv6l-linux","armv7a-linux","armv7l-linux","i686-linux","loongarch64-linux","m68k-linux","microblaze-linux","microblazeel-linux","mips-linux","mips64-linux","mips64el-linux","mipsel-linux","powerpc64-linux","powerpc64le-linux","riscv32-linux","riscv64-linux","s390-linux","s390x-linux","x86_64-linux","x86_64-darwin","i686-darwin","aarch64-darwin","armv7a-darwin","i686-cygwin","x86_64-cygwin","x86_64-windows","i686-windows"],"broken":false,"insecure":false,"unfree":false,"outputs":["dist","out"],"upstream_ecosystem":"pypi","upstream_name":"dirty-equals","upstream_purl":"pkg:pypi/dirty-equals"},"repo_metadata":{},"repo_metadata_updated_at":null,"dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{},"purl":"pkg:nix/python310Packages.dirty-equals?channel=23.11\u0026repository_url=https://channels.nixos.org/nixos-23.11","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/nixpkgs/python310Packages.dirty-equals","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/nixpkgs/python310Packages.dirty-equals","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/nixpkgs/python310Packages.dirty-equals/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":null,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-23.11/packages/python310Packages.dirty-equals/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-23.11/packages/python310Packages.dirty-equals/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-23.11/packages/python310Packages.dirty-equals/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-23.11/packages/python310Packages.dirty-equals/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-23.11/packages/python310Packages.dirty-equals/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-23.11/packages/python310Packages.dirty-equals/codemeta","maintainers":[{"uuid":"fabaff","login":null,"name":"Fabian Affolter","email":"mail@fabian-affolter.ch","url":"https://github.com/fabaff","packages_count":4331,"html_url":null,"role":null,"created_at":"2026-03-07T05:32:27.899Z","updated_at":"2026-03-07T05:32:27.899Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-23.11/maintainers/fabaff/packages"}],"registry":{"name":"nixpkgs-23.11","url":"https://channels.nixos.org/nixos-23.11","ecosystem":"nixpkgs","default":false,"packages_count":108178,"maintainers_count":2997,"namespaces_count":0,"keywords_count":0,"github":"NixOS","metadata":{"funded_packages_count":189},"icon_url":"https://github.com/NixOS.png","created_at":"2026-01-25T22:30:53.577Z","updated_at":"2026-04-03T06:23:37.723Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-23.11/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-23.11/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-23.11/namespaces"}},{"id":13640048,"name":"dirty-equals","ecosystem":"debian","description":null,"homepage":"https://github.com/samuelcolvin/dirty-equals","licenses":null,"normalized_licenses":[],"repository_url":"https://github.com/samuelcolvin/dirty-equals","keywords_array":["misc"],"namespace":"main","versions_count":1,"first_release_published_at":"2026-02-12T01:35:38.011Z","latest_release_published_at":"2026-02-12T01:35:38.011Z","latest_release_number":"0.9.0-1","last_synced_at":"2026-03-13T17:07:47.250Z","created_at":"2026-02-12T01:35:37.838Z","updated_at":"2026-03-13T17:07:47.250Z","registry_url":"https://tracker.debian.org/pkg/dirty-equals","install_command":"apt-get install dirty-equals","documentation_url":"https://packages.debian.org/trixie/dirty-equals","metadata":{"component":"main","architecture":"all","priority":"optional","binary":"python3-dirty-equals","standards_version":"4.7.0","maintainer":"Debian Python Team \u003cteam+python@tracker.debian.org\u003e","build_depends":"debhelper-compat (= 13), dh-sequence-python3, pybuild-plugin-pyproject, python3-all, python3-hatchling","build_depends_indep":"python3-pydantic (\u003e= 2.0~), python3-pytest \u003c!nocheck\u003e, python3-tz","build_depends_arch":null},"repo_metadata":{},"repo_metadata_updated_at":"2026-02-12T02:39:34.339Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":0.0,"dependent_packages_count":0.0,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":100},"purl":"pkg:deb/debian/dirty-equals?arch=source\u0026distro=debian-13\u0026repository_url=https://packages.debian.org/trixie","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/debian/dirty-equals","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/debian/dirty-equals","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/debian/dirty-equals/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":null,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/debian-13/packages/dirty-equals/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/debian-13/packages/dirty-equals/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/debian-13/packages/dirty-equals/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/debian-13/packages/dirty-equals/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/debian-13/packages/dirty-equals/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/debian-13/packages/dirty-equals/codemeta","maintainers":[],"registry":{"name":"debian-13","url":"https://packages.debian.org/trixie","ecosystem":"debian","default":false,"packages_count":38024,"maintainers_count":0,"namespaces_count":4,"keywords_count":0,"github":"debian","metadata":{"codename":"trixie"},"icon_url":"https://github.com/debian.png","created_at":"2026-02-04T11:01:50.448Z","updated_at":"2026-04-27T18:20:39.853Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/debian-13/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/debian-13/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/debian-13/namespaces"}},{"id":13542042,"name":"dirty-equals","ecosystem":"ubuntu","description":null,"homepage":"https://github.com/samuelcolvin/dirty-equals","licenses":null,"normalized_licenses":[],"repository_url":"https://github.com/samuelcolvin/dirty-equals","keywords_array":["universe/misc"],"namespace":"universe","versions_count":1,"first_release_published_at":"2026-02-11T01:15:32.597Z","latest_release_published_at":"2026-02-11T01:15:32.597Z","latest_release_number":"0.5.0-2","last_synced_at":"2026-03-11T03:26:36.666Z","created_at":"2026-02-11T01:15:32.383Z","updated_at":"2026-03-11T03:26:36.667Z","registry_url":"https://launchpad.net/ubuntu/+source/dirty-equals","install_command":"apt-get install dirty-equals","documentation_url":null,"metadata":{"component":"universe","architecture":"all","priority":"optional","binary":"python3-dirty-equals","standards_version":"4.6.1","maintainer":"Debian Python Team \u003cteam+python@tracker.debian.org\u003e","build_depends":"debhelper-compat (= 13), dh-sequence-python3, pybuild-plugin-pyproject, python3-all, python3-hatchling, python3-pytest \u003c!nocheck\u003e, python3-tz","build_depends_indep":null,"build_depends_arch":null},"repo_metadata":{},"repo_metadata_updated_at":"2026-02-11T14:38:47.279Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":0.0,"dependent_packages_count":0.0,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":100},"purl":"pkg:deb/ubuntu/dirty-equals?arch=source\u0026distro=ubuntu-23.04\u0026repository_url=https://launchpad.net/ubuntu/lunar","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/ubuntu/dirty-equals","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/ubuntu/dirty-equals","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/ubuntu/dirty-equals/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":null,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-23.04/packages/dirty-equals/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-23.04/packages/dirty-equals/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-23.04/packages/dirty-equals/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-23.04/packages/dirty-equals/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-23.04/packages/dirty-equals/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-23.04/packages/dirty-equals/codemeta","maintainers":[],"registry":{"name":"ubuntu-23.04","url":"https://launchpad.net/ubuntu/lunar","ecosystem":"ubuntu","default":false,"packages_count":36116,"maintainers_count":0,"namespaces_count":4,"keywords_count":0,"github":"ubuntu","metadata":{"codename":"lunar","mirror":"http://old-releases.ubuntu.com/ubuntu"},"icon_url":"https://github.com/ubuntu.png","created_at":"2026-02-04T11:01:49.117Z","updated_at":"2026-04-27T18:20:38.741Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-23.04/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-23.04/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-23.04/namespaces"}},{"id":2695835,"name":"dirty-equals","ecosystem":"pypi","description":"Doing dirty (but extremely useful) things with equals.","homepage":"https://github.com/samuelcolvin/dirty-equals","licenses":"MIT","normalized_licenses":["MIT"],"repository_url":"https://github.com/samuelcolvin/dirty-equals","keywords_array":[],"namespace":null,"versions_count":19,"first_release_published_at":"2022-01-26T16:24:33.000Z","latest_release_published_at":"2025-09-19T16:05:29.000Z","latest_release_number":"0.10.0","last_synced_at":"2026-04-29T06:46:48.093Z","created_at":"2022-04-10T10:36:47.228Z","updated_at":"2026-04-29T06:47:37.647Z","registry_url":"https://pypi.org/project/dirty-equals/","install_command":"pip install dirty-equals --index-url https://pypi.org/simple","documentation_url":"https://dirty-equals.helpmanual.io","metadata":{"funding":"https://github.com/sponsors/samuelcolvin","documentation":"https://dirty-equals.helpmanual.io","classifiers":["Development Status :: 4 - Beta","Environment :: Console","Environment :: MacOS X","Framework :: Pytest","Intended Audience :: Developers","Intended Audience :: Education","Intended Audience :: Information Technology","Intended Audience :: Science/Research","Intended Audience :: System Administrators","License :: OSI Approved :: MIT License","Operating System :: POSIX :: Linux","Operating System :: Unix","Programming Language :: Python :: 3 :: Only","Programming Language :: Python :: 3.10","Programming Language :: Python :: 3.11","Programming Language :: Python :: 3.12","Programming Language :: Python :: 3.13","Programming Language :: Python :: 3.14","Programming Language :: Python :: 3.9","Topic :: Internet","Topic :: Software Development :: Libraries :: Python Modules","Typing :: Typed"],"normalized_name":"dirty-equals","project_status":null},"repo_metadata":{"id":36997180,"uuid":"452345017","full_name":"samuelcolvin/dirty-equals","owner":"samuelcolvin","description":"Doing dirty (but extremely useful) things with equals.","archived":false,"fork":false,"pushed_at":"2025-11-17T01:49:48.000Z","size":1593,"stargazers_count":968,"open_issues_count":18,"forks_count":44,"subscribers_count":9,"default_branch":"main","last_synced_at":"2026-02-14T19:44:43.912Z","etag":null,"topics":["pytest","python","testing-tools","unit-testing"],"latest_commit_sha":null,"homepage":"https://dirty-equals.helpmanual.io","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/samuelcolvin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"samuelcolvin"}},"created_at":"2022-01-26T16:10:05.000Z","updated_at":"2026-02-13T12:56:19.000Z","dependencies_parsed_at":"2025-12-23T11:05:31.361Z","dependency_job_id":null,"html_url":"https://github.com/samuelcolvin/dirty-equals","commit_stats":{"total_commits":133,"total_committers":18,"mean_commits":7.388888888888889,"dds":"0.18796992481203012","last_synced_commit":"065162ac195964df7f5c47288561809e49deac48"},"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/samuelcolvin/dirty-equals","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/samuelcolvin","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/sbom","scorecard":{"id":798334,"data":{"date":"2025-08-11","repo":{"name":"github.com/samuelcolvin/dirty-equals","commit":"31ab5a3b6141106919058c19dc41f0d4e9107d22"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.8,"checks":[{"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":"Code-Review","score":4,"reason":"Found 13/30 approved changesets -- score normalized to 4","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":"Maintained","score":2,"reason":"2 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 2","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"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":"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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ci.yml:1","Warn: topLevel 'statuses' permission set to 'write': .github/workflows/upload-previews.yml:9","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":"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/ci.yml:118: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:122: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:125: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:148: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:165: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:168: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:177: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:185: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:37: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:48: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:57: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:59: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:65: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:74: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:77: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:94: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:106: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/upload-previews.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/upload-previews.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/upload-previews.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/upload-previews.yml/main?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:174","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:43","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:64","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:83","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:87","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:131","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:134","Warn: pipCommand not pinned by hash: .github/workflows/upload-previews.yml:22","Warn: pipCommand not pinned by hash: .github/workflows/upload-previews.yml:23","Info:   0 out of  13 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   7 third-party GitHubAction dependencies pinned","Info:   0 out of   9 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":"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":"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":"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":"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":"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":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"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":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/ci.yml:155"],"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":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 24 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-23T09:39:44.277Z","repository_id":36997180,"created_at":"2025-08-23T09:39:44.277Z","updated_at":"2025-08-23T09:39:44.277Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29509254,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-16T09:05:14.864Z","status":"ssl_error","status_checked_at":"2026-02-16T08:55:59.364Z","response_time":115,"last_error":"SSL_read: 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_record":{"login":"samuelcolvin","name":"Samuel Colvin","uuid":"4039449","kind":"user","description":"The Pydantic Stack: Pydantic Validation, Pydantic AI and Pydantic Logfire","email":"samuel@pydantic.dev","website":"https://pydantic.dev/logfire","location":"London, United Kingdom","twitter":"samuel_colvin","company":"@pydantic","icon_url":"https://avatars.githubusercontent.com/u/4039449?u=42eb3b833047c8c4b4f647a031eaef148c16d93f\u0026v=4","repositories_count":301,"last_synced_at":"2025-12-26T04:02:35.764Z","metadata":{"has_sponsors_listing":true},"html_url":"https://github.com/samuelcolvin","funding_links":["https://github.com/sponsors/samuelcolvin"],"total_stars":7525,"followers":5983,"following":47,"created_at":"2022-11-05T13:50:51.563Z","updated_at":"2025-12-26T04:02:35.764Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/samuelcolvin","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/samuelcolvin/repositories"},"tags":[{"name":"v0.11.0","sha":"e8cd329dfb910a9696edc9cb793e35c2de6c502e","kind":"commit","published_at":"2025-11-17T01:44:58.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.11.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.11.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.11.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.11.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.11.0/manifests"},{"name":"v0.10.0","sha":"32f23d118cae651a91209fbaa651b0adada60c71","kind":"commit","published_at":"2025-09-19T16:03:15.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.10.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.10.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.10.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.10.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.10.0/manifests"},{"name":"v0.9.0","sha":"9e6f0be981f982fdaae16671ab14aefc3ab8664a","kind":"commit","published_at":"2025-01-11T23:20:42.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.9.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.9.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.9.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.9.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.9.0/manifests"},{"name":"v0.8.0","sha":"da29a2db8293c4c974f303974a6e5ffdb462c9b4","kind":"commit","published_at":"2024-08-13T19:53:17.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.8.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.8.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.8.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.8.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.8.0/manifests"},{"name":"v0.7.1-post0","sha":"5da8ed1cfea51c86c2585264d6bec8de2942d029","kind":"commit","published_at":"2023-11-15T04:29:18.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.7.1-post0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.7.1-post0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.7.1-post0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.1-post0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.1-post0/manifests"},{"name":"v0.7.1","sha":"78a992266989f2687eae48f58367906d895af285","kind":"commit","published_at":"2023-11-14T12:38:22.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.7.1","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.7.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.7.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.1/manifests"},{"name":"v0.7.0","sha":"87d4552f76f3a123cf0455f46f89091ade15614f","kind":"commit","published_at":"2023-09-03T14:17:15.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.7.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.7.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.7.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.0/manifests"},{"name":"v0.6.0","sha":"5577ce517e6ede343634e11dd5f397356aefd1d2","kind":"tag","published_at":"2023-04-27T23:55:39.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.6.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.6.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.6.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.6.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.6.0/manifests"},{"name":"v0.5.0","sha":"b65760701f6649b4f188c6a1294b3b91b2d2ba85","kind":"tag","published_at":"2022-08-30T20:05:41.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.5.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.5.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.5.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.5.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.5.0/manifests"},{"name":"v0.4","sha":"2d3c0e5ec4c92c1e336b231343c675f78ac746c8","kind":"commit","published_at":"2022-04-28T15:37:25.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.4","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.4","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.4","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.4/manifests"},{"name":"v0.3","sha":"c128d7cf3aa7d48696433be6b9945cc45fa6b046","kind":"commit","published_at":"2022-04-18T12:08:04.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.3","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.3","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.3","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.3/manifests"},{"name":"v0.2.1","sha":"6eb2932c40452ce7a62e0f3ba832d3712026b606","kind":"commit","published_at":"2022-03-30T11:09:12.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.2.1","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.2.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.2.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.2.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.2.1/manifests"},{"name":"v0.2","sha":"ae3881c6ff78ca608b97cb581d6a733bd974e102","kind":"commit","published_at":"2022-03-29T14:15:56.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.2","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.2/manifests"},{"name":"v0.1","sha":"450492e624f0b42c1addd20cac684b4614f1a78f","kind":"commit","published_at":"2022-02-25T16:37:37.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.1","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.1/manifests"},{"name":"v0.0.5","sha":"35cfacc7dac357cc5b3b8bdd64e2667a0f25691e","kind":"commit","published_at":"2022-02-24T21:26:02.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.0.5","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.0.5","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.0.5","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.5/manifests"},{"name":"v0.0.4","sha":"0a78e042ef9db11d7337966d2c29e4c43251eef1","kind":"commit","published_at":"2022-02-23T20:01:20.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.0.4","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.0.4","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.0.4","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.4/manifests"},{"name":"v0.0.3","sha":"c690abbb32e5893d3bb2634e1345ab30a2f46791","kind":"commit","published_at":"2022-02-22T19:38:42.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.0.3","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.0.3","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.0.3","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.3/manifests"},{"name":"v0.0.2","sha":"1a09de2bb95f4fa903f47adfe1a35dc1fcad8afb","kind":"commit","published_at":"2022-01-28T11:55:35.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.0.2","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.0.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.0.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.2/manifests"},{"name":"v0.0.1","sha":"9fae3910fed3925b9d950afb85ced13a7c3ba4aa","kind":"commit","published_at":"2022-01-27T22:49:09.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.0.1","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.0.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.1/manifests"}]},"repo_metadata_updated_at":"2026-04-29T06:47:37.608Z","dependent_packages_count":37,"downloads":2673031,"downloads_period":"last-month","dependent_repos_count":164,"rankings":{"downloads":1.2080516451605527,"dependent_repos_count":1.186329580878486,"dependent_packages_count":0.45993092458886403,"stargazers_count":2.321402711828236,"forks_count":6.764936335057374,"docker_downloads_count":3.2195099635160327,"average":2.5266935268382578},"purl":"pkg:pypi/dirty-equals","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/pypi/dirty-equals","docker_dependents_count":1,"docker_downloads_count":188,"usage_url":"https://repos.ecosyste.ms/usage/pypi/dirty-equals","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/pypi/dirty-equals/dependencies","status":null,"funding_links":["https://github.com/sponsors/samuelcolvin"],"critical":null,"issue_metadata":{"last_synced_at":"2026-02-14T17:00:31.276Z","issues_count":40,"pull_requests_count":86,"avg_time_to_close_issue":9056859.0,"avg_time_to_close_pull_request":3034838.3205128205,"issues_closed_count":25,"pull_requests_closed_count":78,"pull_request_authors_count":25,"issue_authors_count":23,"avg_comments_per_issue":2.775,"avg_comments_per_pull_request":1.5813953488372092,"merged_pull_requests_count":70,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":5,"past_year_pull_requests_count":6,"past_year_avg_time_to_close_issue":131984.0,"past_year_avg_time_to_close_pull_request":28691.333333333332,"past_year_issues_closed_count":1,"past_year_pull_requests_closed_count":3,"past_year_pull_request_authors_count":4,"past_year_issue_authors_count":5,"past_year_avg_comments_per_issue":1.2,"past_year_avg_comments_per_pull_request":0.3333333333333333,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":3,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/issues","maintainers":[{"login":"samuelcolvin","count":53,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/samuelcolvin"},{"login":"15r10nk","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/15r10nk"}],"active_maintainers":[{"login":"samuelcolvin","count":3,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/samuelcolvin"}]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/dirty-equals/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/dirty-equals/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/dirty-equals/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/dirty-equals/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/dirty-equals/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/dirty-equals/codemeta","maintainers":[{"uuid":"samuelcolvin","login":"samuelcolvin","name":null,"email":null,"url":null,"packages_count":59,"html_url":"https://pypi.org/user/samuelcolvin/","role":null,"created_at":"2022-12-06T16:18:27.749Z","updated_at":"2022-12-06T16:18:27.749Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers/samuelcolvin/packages"}],"registry":{"name":"pypi.org","url":"https://pypi.org","ecosystem":"pypi","default":true,"packages_count":874582,"maintainers_count":374058,"namespaces_count":0,"keywords_count":285845,"github":"pypi","metadata":{"funded_packages_count":54057},"icon_url":"https://github.com/pypi.png","created_at":"2022-04-04T15:19:23.364Z","updated_at":"2026-05-29T05:11:24.287Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/pypi.org/namespaces"}},{"id":12862309,"name":"python313Packages.dirty-equals","ecosystem":"nixpkgs","description":"Module for doing dirty (but extremely useful) things with equals","homepage":"https://github.com/samuelcolvin/dirty-equals","licenses":"MIT","normalized_licenses":["MIT"],"repository_url":"https://github.com/samuelcolvin/dirty-equals","keywords_array":["python"],"namespace":null,"versions_count":2,"first_release_published_at":"2026-01-27T01:36:01.538Z","latest_release_published_at":"2026-03-02T17:35:34.003Z","latest_release_number":"0.11.0","last_synced_at":"2026-04-02T18:09:48.074Z","created_at":"2026-01-27T01:36:01.198Z","updated_at":"2026-04-02T18:09:48.074Z","registry_url":"https://search.nixos.org/packages?channel=unstable\u0026query=python313Packages.dirty-equals","install_command":"nix-env -iA nixpkgs.python313Packages.dirty-equals","documentation_url":"https://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/development/python-modules/dirty-equals/default.nix#L42","metadata":{"nix_attribute":"python3.13-dirty-equals-0.11.0","position":"pkgs/development/python-modules/dirty-equals/default.nix:42","platforms":["aarch64-linux","armv5tel-linux","armv6l-linux","armv7a-linux","armv7l-linux","i686-linux","loongarch64-linux","m68k-linux","microblaze-linux","microblazeel-linux","mips-linux","mips64-linux","mips64el-linux","mipsel-linux","powerpc-linux","powerpc64-linux","powerpc64le-linux","riscv32-linux","riscv64-linux","s390-linux","s390x-linux","x86_64-linux","x86_64-darwin","aarch64-darwin","aarch64-windows","x86_64-windows","i686-windows","i686-freebsd","x86_64-freebsd","aarch64-freebsd"],"broken":false,"insecure":false,"unfree":false,"outputs":["dist","out"],"upstream_ecosystem":"pypi","upstream_name":"dirty-equals","upstream_purl":"pkg:pypi/dirty-equals"},"repo_metadata":{},"repo_metadata_updated_at":"2026-03-02T17:39:19.078Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":0.0,"dependent_packages_count":0.0,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":100},"purl":"pkg:nix/python313Packages.dirty-equals?channel=unstable","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/nixpkgs/python313Packages.dirty-equals","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/nixpkgs/python313Packages.dirty-equals","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/nixpkgs/python313Packages.dirty-equals/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":null,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-unstable/packages/python313Packages.dirty-equals/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-unstable/packages/python313Packages.dirty-equals/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-unstable/packages/python313Packages.dirty-equals/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-unstable/packages/python313Packages.dirty-equals/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-unstable/packages/python313Packages.dirty-equals/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-unstable/packages/python313Packages.dirty-equals/codemeta","maintainers":[{"uuid":"fabaff","login":null,"name":"Fabian Affolter","email":"mail@fabian-affolter.ch","url":"https://github.com/fabaff","packages_count":4572,"html_url":null,"role":null,"created_at":"2026-03-02T17:35:34.928Z","updated_at":"2026-03-02T17:35:34.928Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-unstable/maintainers/fabaff/packages"}],"registry":{"name":"nixpkgs-unstable","url":"https://channels.nixos.org/nixos-unstable","ecosystem":"nixpkgs","default":true,"packages_count":147106,"maintainers_count":4680,"namespaces_count":0,"keywords_count":2885,"github":"NixOS","metadata":{"funded_packages_count":1565},"icon_url":"https://github.com/NixOS.png","created_at":"2026-01-25T22:30:52.762Z","updated_at":"2026-05-15T05:01:34.865Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-unstable/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-unstable/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-unstable/namespaces"}},{"id":6053566,"name":"py3-dirty-equals","ecosystem":"alpine","description":"Doing dirty (but extremely useful) things with equals.","homepage":"https://github.com/samuelcolvin/dirty-equals","licenses":"MIT","normalized_licenses":["MIT"],"repository_url":"https://github.com/samuelcolvin/dirty-equals","keywords_array":[],"namespace":"community","versions_count":6,"first_release_published_at":"2022-11-22T22:32:20.000Z","latest_release_published_at":"2024-10-19T10:40:05.000Z","latest_release_number":"0.8.0-r0","last_synced_at":"2026-04-10T16:02:44.988Z","created_at":"2023-01-31T18:37:04.227Z","updated_at":"2026-04-10T16:02:44.988Z","registry_url":"https://pkgs.alpinelinux.org/package/edge/community/x86_64/py3-dirty-equals","install_command":"apk add py3-dirty-equals","documentation_url":null,"metadata":{"repository":"community","architecture":"x86_64"},"repo_metadata":{"id":36997180,"uuid":"452345017","full_name":"samuelcolvin/dirty-equals","owner":"samuelcolvin","description":"Doing dirty (but extremely useful) things with equals.","archived":false,"fork":false,"pushed_at":"2025-11-17T01:49:48.000Z","size":1593,"stargazers_count":942,"open_issues_count":16,"forks_count":43,"subscribers_count":9,"default_branch":"main","last_synced_at":"2025-12-10T23:50:26.551Z","etag":null,"topics":["pytest","python","testing-tools","unit-testing"],"latest_commit_sha":null,"homepage":"https://dirty-equals.helpmanual.io","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/samuelcolvin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"samuelcolvin"}},"created_at":"2022-01-26T16:10:05.000Z","updated_at":"2025-12-02T17:46:51.000Z","dependencies_parsed_at":"2024-01-12T23:43:05.531Z","dependency_job_id":"b1ec0257-f6d7-4d8d-9041-c350d7e1d39c","html_url":"https://github.com/samuelcolvin/dirty-equals","commit_stats":{"total_commits":133,"total_committers":18,"mean_commits":7.388888888888889,"dds":"0.18796992481203012","last_synced_commit":"065162ac195964df7f5c47288561809e49deac48"},"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/samuelcolvin/dirty-equals","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/samuelcolvin","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/sbom","scorecard":{"id":798334,"data":{"date":"2025-08-11","repo":{"name":"github.com/samuelcolvin/dirty-equals","commit":"31ab5a3b6141106919058c19dc41f0d4e9107d22"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.8,"checks":[{"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":"Code-Review","score":4,"reason":"Found 13/30 approved changesets -- score normalized to 4","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":"Maintained","score":2,"reason":"2 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 2","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"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":"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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ci.yml:1","Warn: topLevel 'statuses' permission set to 'write': .github/workflows/upload-previews.yml:9","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":"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/ci.yml:118: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:122: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:125: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:148: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:165: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:168: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:177: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:185: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:37: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:48: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:57: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:59: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:65: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:74: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:77: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:94: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:106: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/upload-previews.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/upload-previews.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/upload-previews.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/upload-previews.yml/main?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:174","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:43","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:64","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:83","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:87","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:131","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:134","Warn: pipCommand not pinned by hash: .github/workflows/upload-previews.yml:22","Warn: pipCommand not pinned by hash: .github/workflows/upload-previews.yml:23","Info:   0 out of  13 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   7 third-party GitHubAction dependencies pinned","Info:   0 out of   9 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":"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":"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":"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":"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":"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":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"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":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/ci.yml:155"],"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":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 24 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-23T09:39:44.277Z","repository_id":36997180,"created_at":"2025-08-23T09:39:44.277Z","updated_at":"2025-08-23T09:39:44.277Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":27653730,"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-12-11T02:00:11.302Z","response_time":56,"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"},"tags":[{"name":"v0.11.0","sha":"e8cd329dfb910a9696edc9cb793e35c2de6c502e","kind":"commit","published_at":"2025-11-17T01:44:58.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.11.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.11.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.11.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.11.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.11.0/manifests"},{"name":"v0.10.0","sha":"32f23d118cae651a91209fbaa651b0adada60c71","kind":"commit","published_at":"2025-09-19T16:03:15.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.10.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.10.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.10.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.10.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.10.0/manifests"},{"name":"v0.9.0","sha":"9e6f0be981f982fdaae16671ab14aefc3ab8664a","kind":"commit","published_at":"2025-01-11T23:20:42.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.9.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.9.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.9.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.9.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.9.0/manifests"},{"name":"v0.8.0","sha":"da29a2db8293c4c974f303974a6e5ffdb462c9b4","kind":"commit","published_at":"2024-08-13T19:53:17.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.8.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.8.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.8.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.8.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.8.0/manifests"},{"name":"v0.7.1-post0","sha":"5da8ed1cfea51c86c2585264d6bec8de2942d029","kind":"commit","published_at":"2023-11-15T04:29:18.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.7.1-post0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.7.1-post0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.7.1-post0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.1-post0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.1-post0/manifests"},{"name":"v0.7.1","sha":"78a992266989f2687eae48f58367906d895af285","kind":"commit","published_at":"2023-11-14T12:38:22.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.7.1","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.7.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.7.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.1/manifests"},{"name":"v0.7.0","sha":"87d4552f76f3a123cf0455f46f89091ade15614f","kind":"commit","published_at":"2023-09-03T14:17:15.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.7.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.7.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.7.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.0/manifests"},{"name":"v0.6.0","sha":"5577ce517e6ede343634e11dd5f397356aefd1d2","kind":"tag","published_at":"2023-04-27T23:55:39.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.6.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.6.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.6.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.6.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.6.0/manifests"},{"name":"v0.5.0","sha":"b65760701f6649b4f188c6a1294b3b91b2d2ba85","kind":"tag","published_at":"2022-08-30T20:05:41.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.5.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.5.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.5.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.5.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.5.0/manifests"},{"name":"v0.4","sha":"2d3c0e5ec4c92c1e336b231343c675f78ac746c8","kind":"commit","published_at":"2022-04-28T15:37:25.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.4","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.4","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.4","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.4/manifests"},{"name":"v0.3","sha":"c128d7cf3aa7d48696433be6b9945cc45fa6b046","kind":"commit","published_at":"2022-04-18T12:08:04.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.3","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.3","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.3","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.3/manifests"},{"name":"v0.2.1","sha":"6eb2932c40452ce7a62e0f3ba832d3712026b606","kind":"commit","published_at":"2022-03-30T11:09:12.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.2.1","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.2.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.2.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.2.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.2.1/manifests"},{"name":"v0.2","sha":"ae3881c6ff78ca608b97cb581d6a733bd974e102","kind":"commit","published_at":"2022-03-29T14:15:56.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.2","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.2/manifests"},{"name":"v0.1","sha":"450492e624f0b42c1addd20cac684b4614f1a78f","kind":"commit","published_at":"2022-02-25T16:37:37.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.1","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.1/manifests"},{"name":"v0.0.5","sha":"35cfacc7dac357cc5b3b8bdd64e2667a0f25691e","kind":"commit","published_at":"2022-02-24T21:26:02.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.0.5","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.0.5","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.0.5","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.5/manifests"},{"name":"v0.0.4","sha":"0a78e042ef9db11d7337966d2c29e4c43251eef1","kind":"commit","published_at":"2022-02-23T20:01:20.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.0.4","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.0.4","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.0.4","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.4/manifests"},{"name":"v0.0.3","sha":"c690abbb32e5893d3bb2634e1345ab30a2f46791","kind":"commit","published_at":"2022-02-22T19:38:42.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.0.3","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.0.3","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.0.3","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.3/manifests"},{"name":"v0.0.2","sha":"1a09de2bb95f4fa903f47adfe1a35dc1fcad8afb","kind":"commit","published_at":"2022-01-28T11:55:35.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.0.2","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.0.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.0.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.2/manifests"},{"name":"v0.0.1","sha":"9fae3910fed3925b9d950afb85ced13a7c3ba4aa","kind":"commit","published_at":"2022-01-27T22:49:09.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.0.1","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.0.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.1/manifests"}]},"repo_metadata_updated_at":"2025-12-11T14:21:17.233Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":0.0,"dependent_packages_count":14.64073262366938,"stargazers_count":11.658578584846587,"forks_count":21.837820914214152,"average":12.03428303068253},"purl":"pkg:apk/alpine/py3-dirty-equals?arch=x86_64\u0026repository_url=https://pkgs.alpinelinux.org/packages?branch=edge","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/alpine/py3-dirty-equals","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/alpine/py3-dirty-equals","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/alpine/py3-dirty-equals/dependencies","status":null,"funding_links":["https://github.com/sponsors/samuelcolvin"],"critical":null,"issue_metadata":{"last_synced_at":"2025-11-26T21:09:34.267Z","issues_count":40,"pull_requests_count":85,"avg_time_to_close_issue":9056859.0,"avg_time_to_close_pull_request":3034838.3205128205,"issues_closed_count":25,"pull_requests_closed_count":78,"pull_request_authors_count":24,"issue_authors_count":23,"avg_comments_per_issue":2.775,"avg_comments_per_pull_request":1.6,"merged_pull_requests_count":70,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":5,"past_year_pull_requests_count":8,"past_year_avg_time_to_close_issue":131984.0,"past_year_avg_time_to_close_pull_request":17296.8,"past_year_issues_closed_count":1,"past_year_pull_requests_closed_count":5,"past_year_pull_request_authors_count":4,"past_year_issue_authors_count":5,"past_year_avg_comments_per_issue":1.2,"past_year_avg_comments_per_pull_request":0.625,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":5,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/issues","maintainers":[{"login":"samuelcolvin","count":53,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/samuelcolvin"},{"login":"15r10nk","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/15r10nk"}],"active_maintainers":[{"login":"samuelcolvin","count":5,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/samuelcolvin"}]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-edge/packages/py3-dirty-equals/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-edge/packages/py3-dirty-equals/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-edge/packages/py3-dirty-equals/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-edge/packages/py3-dirty-equals/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-edge/packages/py3-dirty-equals/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-edge/packages/py3-dirty-equals/codemeta","maintainers":[{"uuid":"alpine@juniorjpdj.pl","login":null,"name":"Jacek Pruciak","email":null,"url":"https://pkgs.alpinelinux.org/packages?maintainer=Jacek Pruciak","packages_count":16,"html_url":"https://pkgs.alpinelinux.org/packages?maintainer=Jacek Pruciak","role":null,"created_at":"2023-01-31T22:19:21.424Z","updated_at":"2023-01-31T22:19:21.424Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-edge/maintainers/alpine@juniorjpdj.pl/packages"}],"registry":{"name":"alpine-edge","url":"https://pkgs.alpinelinux.org/packages?branch=edge","ecosystem":"alpine","default":false,"packages_count":39463,"maintainers_count":886,"namespaces_count":3,"keywords_count":0,"github":"alpinelinux","metadata":{"repos":["main","community","testing"]},"icon_url":"https://github.com/alpinelinux.png","created_at":"2023-01-31T17:27:50.616Z","updated_at":"2026-04-27T18:20:22.267Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-edge/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-edge/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-edge/namespaces"}},{"id":12885856,"name":"python314Packages.dirty-equals","ecosystem":"nixpkgs","description":"Module for doing dirty (but extremely useful) things with equals","homepage":"https://github.com/samuelcolvin/dirty-equals","licenses":"MIT","normalized_licenses":["MIT"],"repository_url":"https://github.com/samuelcolvin/dirty-equals","keywords_array":["python"],"namespace":null,"versions_count":2,"first_release_published_at":"2026-01-27T06:56:01.639Z","latest_release_published_at":"2026-03-05T10:02:15.059Z","latest_release_number":"0.11.0","last_synced_at":"2026-03-05T10:02:15.646Z","created_at":"2026-01-27T06:56:01.445Z","updated_at":"2026-03-05T10:08:17.126Z","registry_url":"https://search.nixos.org/packages?channel=unstable\u0026query=python314Packages.dirty-equals","install_command":"nix-env -iA nixpkgs.python314Packages.dirty-equals","documentation_url":"https://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/development/python-modules/dirty-equals/default.nix#L42","metadata":{"nix_attribute":"python3.14-dirty-equals-0.11.0","position":"pkgs/development/python-modules/dirty-equals/default.nix:42","platforms":["aarch64-linux","armv5tel-linux","armv6l-linux","armv7a-linux","armv7l-linux","i686-linux","loongarch64-linux","m68k-linux","microblaze-linux","microblazeel-linux","mips-linux","mips64-linux","mips64el-linux","mipsel-linux","powerpc-linux","powerpc64-linux","powerpc64le-linux","riscv32-linux","riscv64-linux","s390-linux","s390x-linux","x86_64-linux","x86_64-darwin","aarch64-darwin","aarch64-windows","x86_64-windows","i686-windows","i686-freebsd","x86_64-freebsd","aarch64-freebsd"],"broken":false,"insecure":false,"unfree":false,"outputs":["dist","out"],"upstream_ecosystem":"pypi","upstream_name":"dirty-equals","upstream_purl":"pkg:pypi/dirty-equals"},"repo_metadata":{"id":36997180,"uuid":"452345017","full_name":"samuelcolvin/dirty-equals","owner":"samuelcolvin","description":"Doing dirty (but extremely useful) things with equals.","archived":false,"fork":false,"pushed_at":"2025-11-17T01:49:48.000Z","size":1593,"stargazers_count":975,"open_issues_count":19,"forks_count":44,"subscribers_count":9,"default_branch":"main","last_synced_at":"2026-03-05T01:57:01.676Z","etag":null,"topics":["pytest","python","testing-tools","unit-testing"],"latest_commit_sha":null,"homepage":"https://dirty-equals.helpmanual.io","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/samuelcolvin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"samuelcolvin"}},"created_at":"2022-01-26T16:10:05.000Z","updated_at":"2026-03-04T18:58:52.000Z","dependencies_parsed_at":"2025-12-23T11:05:31.361Z","dependency_job_id":null,"html_url":"https://github.com/samuelcolvin/dirty-equals","commit_stats":{"total_commits":133,"total_committers":18,"mean_commits":7.388888888888889,"dds":"0.18796992481203012","last_synced_commit":"065162ac195964df7f5c47288561809e49deac48"},"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/samuelcolvin/dirty-equals","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/samuelcolvin","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/sbom","scorecard":{"id":798334,"data":{"date":"2025-08-11","repo":{"name":"github.com/samuelcolvin/dirty-equals","commit":"31ab5a3b6141106919058c19dc41f0d4e9107d22"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.8,"checks":[{"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":"Code-Review","score":4,"reason":"Found 13/30 approved changesets -- score normalized to 4","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":"Maintained","score":2,"reason":"2 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 2","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"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":"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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ci.yml:1","Warn: topLevel 'statuses' permission set to 'write': .github/workflows/upload-previews.yml:9","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":"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/ci.yml:118: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:122: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:125: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:148: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:165: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:168: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:177: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:185: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:37: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:48: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:57: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:59: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:65: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:74: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:77: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:94: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:106: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/upload-previews.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/upload-previews.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/upload-previews.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/upload-previews.yml/main?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:174","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:43","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:64","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:83","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:87","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:131","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:134","Warn: pipCommand not pinned by hash: .github/workflows/upload-previews.yml:22","Warn: pipCommand not pinned by hash: .github/workflows/upload-previews.yml:23","Info:   0 out of  13 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   7 third-party GitHubAction dependencies pinned","Info:   0 out of   9 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":"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":"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":"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":"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":"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":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"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":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/ci.yml:155"],"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":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 24 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-23T09:39:44.277Z","repository_id":36997180,"created_at":"2025-08-23T09:39:44.277Z","updated_at":"2025-08-23T09:39:44.277Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30118934,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-05T09:35:22.236Z","status":"ssl_error","status_checked_at":"2026-03-05T09:35:20.028Z","response_time":93,"last_error":"SSL_read: 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"}},"repo_metadata_updated_at":"2026-03-05T10:08:17.126Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{},"purl":"pkg:nix/python314Packages.dirty-equals?channel=unstable","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/nixpkgs/python314Packages.dirty-equals","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/nixpkgs/python314Packages.dirty-equals","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/nixpkgs/python314Packages.dirty-equals/dependencies","status":null,"funding_links":["https://github.com/sponsors/samuelcolvin"],"critical":null,"issue_metadata":{"last_synced_at":"2026-03-04T22:01:07.519Z","issues_count":40,"pull_requests_count":87,"avg_time_to_close_issue":9056859.0,"avg_time_to_close_pull_request":3034838.3205128205,"issues_closed_count":25,"pull_requests_closed_count":78,"pull_request_authors_count":26,"issue_authors_count":23,"avg_comments_per_issue":2.775,"avg_comments_per_pull_request":1.5632183908045978,"merged_pull_requests_count":70,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":5,"past_year_pull_requests_count":7,"past_year_avg_time_to_close_issue":131984.0,"past_year_avg_time_to_close_pull_request":28691.333333333332,"past_year_issues_closed_count":1,"past_year_pull_requests_closed_count":3,"past_year_pull_request_authors_count":5,"past_year_issue_authors_count":5,"past_year_avg_comments_per_issue":1.2,"past_year_avg_comments_per_pull_request":0.2857142857142857,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":3,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/issues","maintainers":[{"login":"samuelcolvin","count":53,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/samuelcolvin"},{"login":"15r10nk","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/15r10nk"}],"active_maintainers":[{"login":"samuelcolvin","count":3,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/samuelcolvin"}]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-unstable/packages/python314Packages.dirty-equals/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-unstable/packages/python314Packages.dirty-equals/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-unstable/packages/python314Packages.dirty-equals/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-unstable/packages/python314Packages.dirty-equals/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-unstable/packages/python314Packages.dirty-equals/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-unstable/packages/python314Packages.dirty-equals/codemeta","maintainers":[{"uuid":"fabaff","login":null,"name":"Fabian Affolter","email":"mail@fabian-affolter.ch","url":"https://github.com/fabaff","packages_count":4572,"html_url":null,"role":null,"created_at":"2026-03-05T10:02:16.066Z","updated_at":"2026-03-05T10:02:16.066Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-unstable/maintainers/fabaff/packages"}],"registry":{"name":"nixpkgs-unstable","url":"https://channels.nixos.org/nixos-unstable","ecosystem":"nixpkgs","default":true,"packages_count":147106,"maintainers_count":4680,"namespaces_count":0,"keywords_count":2885,"github":"NixOS","metadata":{"funded_packages_count":1565},"icon_url":"https://github.com/NixOS.png","created_at":"2026-01-25T22:30:52.762Z","updated_at":"2026-05-15T05:01:34.865Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-unstable/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-unstable/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-unstable/namespaces"}},{"id":11765069,"name":"py3-dirty-equals-pyc","ecosystem":"alpine","description":"Precompiled Python bytecode for py3-dirty-equals","homepage":"https://github.com/samuelcolvin/dirty-equals","licenses":"MIT","normalized_licenses":["MIT"],"repository_url":"https://github.com/samuelcolvin/dirty-equals","keywords_array":[],"namespace":"community","versions_count":1,"first_release_published_at":"2024-10-19T10:40:05.000Z","latest_release_published_at":"2024-10-19T10:40:05.000Z","latest_release_number":"0.8.0-r0","last_synced_at":"2026-04-10T18:02:48.735Z","created_at":"2025-06-07T18:10:43.028Z","updated_at":"2026-04-10T18:02:48.735Z","registry_url":"https://pkgs.alpinelinux.org/package/v3.22/community/x86_64/py3-dirty-equals-pyc","install_command":"apk add py3-dirty-equals-pyc","documentation_url":null,"metadata":{"repository":"community","architecture":"x86_64"},"repo_metadata":{"id":36997180,"uuid":"452345017","full_name":"samuelcolvin/dirty-equals","owner":"samuelcolvin","description":"Doing dirty (but extremely useful) things with equals.","archived":false,"fork":false,"pushed_at":"2025-11-17T01:49:48.000Z","size":1593,"stargazers_count":942,"open_issues_count":16,"forks_count":43,"subscribers_count":9,"default_branch":"main","last_synced_at":"2025-12-10T23:50:26.551Z","etag":null,"topics":["pytest","python","testing-tools","unit-testing"],"latest_commit_sha":null,"homepage":"https://dirty-equals.helpmanual.io","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/samuelcolvin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"samuelcolvin"}},"created_at":"2022-01-26T16:10:05.000Z","updated_at":"2025-12-02T17:46:51.000Z","dependencies_parsed_at":"2024-01-12T23:43:05.531Z","dependency_job_id":"b1ec0257-f6d7-4d8d-9041-c350d7e1d39c","html_url":"https://github.com/samuelcolvin/dirty-equals","commit_stats":{"total_commits":133,"total_committers":18,"mean_commits":7.388888888888889,"dds":"0.18796992481203012","last_synced_commit":"065162ac195964df7f5c47288561809e49deac48"},"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/samuelcolvin/dirty-equals","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/samuelcolvin","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/sbom","scorecard":{"id":798334,"data":{"date":"2025-08-11","repo":{"name":"github.com/samuelcolvin/dirty-equals","commit":"31ab5a3b6141106919058c19dc41f0d4e9107d22"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.8,"checks":[{"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":"Code-Review","score":4,"reason":"Found 13/30 approved changesets -- score normalized to 4","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":"Maintained","score":2,"reason":"2 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 2","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"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":"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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ci.yml:1","Warn: topLevel 'statuses' permission set to 'write': .github/workflows/upload-previews.yml:9","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":"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/ci.yml:118: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:122: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:125: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:148: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:165: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:168: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:177: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:185: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:37: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:48: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:57: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:59: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:65: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:74: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:77: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:94: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:106: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/upload-previews.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/upload-previews.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/upload-previews.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/upload-previews.yml/main?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:174","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:43","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:64","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:83","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:87","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:131","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:134","Warn: pipCommand not pinned by hash: .github/workflows/upload-previews.yml:22","Warn: pipCommand not pinned by hash: .github/workflows/upload-previews.yml:23","Info:   0 out of  13 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   7 third-party GitHubAction dependencies pinned","Info:   0 out of   9 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":"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":"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":"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":"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":"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":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"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":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/ci.yml:155"],"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":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 24 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-23T09:39:44.277Z","repository_id":36997180,"created_at":"2025-08-23T09:39:44.277Z","updated_at":"2025-08-23T09:39:44.277Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":27653730,"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-12-11T02:00:11.302Z","response_time":56,"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"},"tags":[{"name":"v0.11.0","sha":"e8cd329dfb910a9696edc9cb793e35c2de6c502e","kind":"commit","published_at":"2025-11-17T01:44:58.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.11.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.11.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.11.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.11.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.11.0/manifests"},{"name":"v0.10.0","sha":"32f23d118cae651a91209fbaa651b0adada60c71","kind":"commit","published_at":"2025-09-19T16:03:15.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.10.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.10.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.10.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.10.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.10.0/manifests"},{"name":"v0.9.0","sha":"9e6f0be981f982fdaae16671ab14aefc3ab8664a","kind":"commit","published_at":"2025-01-11T23:20:42.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.9.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.9.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.9.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.9.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.9.0/manifests"},{"name":"v0.8.0","sha":"da29a2db8293c4c974f303974a6e5ffdb462c9b4","kind":"commit","published_at":"2024-08-13T19:53:17.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.8.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.8.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.8.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.8.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.8.0/manifests"},{"name":"v0.7.1-post0","sha":"5da8ed1cfea51c86c2585264d6bec8de2942d029","kind":"commit","published_at":"2023-11-15T04:29:18.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.7.1-post0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.7.1-post0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.7.1-post0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.1-post0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.1-post0/manifests"},{"name":"v0.7.1","sha":"78a992266989f2687eae48f58367906d895af285","kind":"commit","published_at":"2023-11-14T12:38:22.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.7.1","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.7.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.7.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.1/manifests"},{"name":"v0.7.0","sha":"87d4552f76f3a123cf0455f46f89091ade15614f","kind":"commit","published_at":"2023-09-03T14:17:15.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.7.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.7.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.7.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.0/manifests"},{"name":"v0.6.0","sha":"5577ce517e6ede343634e11dd5f397356aefd1d2","kind":"tag","published_at":"2023-04-27T23:55:39.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.6.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.6.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.6.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.6.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.6.0/manifests"},{"name":"v0.5.0","sha":"b65760701f6649b4f188c6a1294b3b91b2d2ba85","kind":"tag","published_at":"2022-08-30T20:05:41.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.5.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.5.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.5.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.5.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.5.0/manifests"},{"name":"v0.4","sha":"2d3c0e5ec4c92c1e336b231343c675f78ac746c8","kind":"commit","published_at":"2022-04-28T15:37:25.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.4","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.4","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.4","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.4/manifests"},{"name":"v0.3","sha":"c128d7cf3aa7d48696433be6b9945cc45fa6b046","kind":"commit","published_at":"2022-04-18T12:08:04.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.3","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.3","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.3","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.3/manifests"},{"name":"v0.2.1","sha":"6eb2932c40452ce7a62e0f3ba832d3712026b606","kind":"commit","published_at":"2022-03-30T11:09:12.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.2.1","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.2.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.2.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.2.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.2.1/manifests"},{"name":"v0.2","sha":"ae3881c6ff78ca608b97cb581d6a733bd974e102","kind":"commit","published_at":"2022-03-29T14:15:56.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.2","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.2/manifests"},{"name":"v0.1","sha":"450492e624f0b42c1addd20cac684b4614f1a78f","kind":"commit","published_at":"2022-02-25T16:37:37.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.1","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.1/manifests"},{"name":"v0.0.5","sha":"35cfacc7dac357cc5b3b8bdd64e2667a0f25691e","kind":"commit","published_at":"2022-02-24T21:26:02.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.0.5","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.0.5","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.0.5","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.5/manifests"},{"name":"v0.0.4","sha":"0a78e042ef9db11d7337966d2c29e4c43251eef1","kind":"commit","published_at":"2022-02-23T20:01:20.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.0.4","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.0.4","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.0.4","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.4/manifests"},{"name":"v0.0.3","sha":"c690abbb32e5893d3bb2634e1345ab30a2f46791","kind":"commit","published_at":"2022-02-22T19:38:42.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.0.3","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.0.3","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.0.3","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.3/manifests"},{"name":"v0.0.2","sha":"1a09de2bb95f4fa903f47adfe1a35dc1fcad8afb","kind":"commit","published_at":"2022-01-28T11:55:35.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.0.2","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.0.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.0.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.2/manifests"},{"name":"v0.0.1","sha":"9fae3910fed3925b9d950afb85ced13a7c3ba4aa","kind":"commit","published_at":"2022-01-27T22:49:09.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.0.1","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.0.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.1/manifests"}]},"repo_metadata_updated_at":"2025-12-11T14:21:17.434Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":0.0,"dependent_packages_count":0.0,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":100},"purl":"pkg:apk/alpine/py3-dirty-equals-pyc?arch=x86_64\u0026repository_url=https://pkgs.alpinelinux.org/packages?branch=v3.22","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/alpine/py3-dirty-equals-pyc","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/alpine/py3-dirty-equals-pyc","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/alpine/py3-dirty-equals-pyc/dependencies","status":null,"funding_links":["https://github.com/sponsors/samuelcolvin"],"critical":null,"issue_metadata":{"last_synced_at":"2025-11-26T21:09:34.267Z","issues_count":40,"pull_requests_count":85,"avg_time_to_close_issue":9056859.0,"avg_time_to_close_pull_request":3034838.3205128205,"issues_closed_count":25,"pull_requests_closed_count":78,"pull_request_authors_count":24,"issue_authors_count":23,"avg_comments_per_issue":2.775,"avg_comments_per_pull_request":1.6,"merged_pull_requests_count":70,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":5,"past_year_pull_requests_count":8,"past_year_avg_time_to_close_issue":131984.0,"past_year_avg_time_to_close_pull_request":17296.8,"past_year_issues_closed_count":1,"past_year_pull_requests_closed_count":5,"past_year_pull_request_authors_count":4,"past_year_issue_authors_count":5,"past_year_avg_comments_per_issue":1.2,"past_year_avg_comments_per_pull_request":0.625,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":5,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/issues","maintainers":[{"login":"samuelcolvin","count":53,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/samuelcolvin"},{"login":"15r10nk","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/15r10nk"}],"active_maintainers":[{"login":"samuelcolvin","count":5,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/samuelcolvin"}]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.22/packages/py3-dirty-equals-pyc/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.22/packages/py3-dirty-equals-pyc/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.22/packages/py3-dirty-equals-pyc/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.22/packages/py3-dirty-equals-pyc/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.22/packages/py3-dirty-equals-pyc/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.22/packages/py3-dirty-equals-pyc/codemeta","maintainers":[{"uuid":"alpine@juniorjpdj.pl","login":null,"name":"Jacek Pruciak","email":null,"url":"https://pkgs.alpinelinux.org/packages?maintainer=Jacek Pruciak","packages_count":7,"html_url":"https://pkgs.alpinelinux.org/packages?maintainer=Jacek Pruciak","role":null,"created_at":"2025-06-08T14:48:00.900Z","updated_at":"2025-06-08T14:48:00.900Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.22/maintainers/alpine@juniorjpdj.pl/packages"}],"registry":{"name":"alpine-v3.22","url":"https://pkgs.alpinelinux.org/packages?branch=v3.22","ecosystem":"alpine","default":false,"packages_count":26322,"maintainers_count":422,"namespaces_count":2,"keywords_count":0,"github":"alpinelinux","metadata":{"repos":["main","community"]},"icon_url":"https://github.com/alpinelinux.png","created_at":"2025-06-05T10:49:56.987Z","updated_at":"2026-04-27T18:20:22.527Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.22/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.22/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.22/namespaces"}},{"id":10344108,"name":"py3-dirty-equals-pyc","ecosystem":"alpine","description":"Precompiled Python bytecode for py3-dirty-equals","homepage":"https://github.com/samuelcolvin/dirty-equals","licenses":"MIT","normalized_licenses":["MIT"],"repository_url":"https://github.com/samuelcolvin/dirty-equals","keywords_array":[],"namespace":"community","versions_count":1,"first_release_published_at":"2024-04-12T09:59:22.000Z","latest_release_published_at":"2024-04-12T09:59:22.000Z","latest_release_number":"0.7.1-r1","last_synced_at":"2026-04-10T18:03:21.424Z","created_at":"2024-06-11T09:43:46.374Z","updated_at":"2026-04-10T18:03:21.424Z","registry_url":"https://pkgs.alpinelinux.org/package/v3.20/community/x86_64/py3-dirty-equals-pyc","install_command":"apk add py3-dirty-equals-pyc","documentation_url":null,"metadata":{"repository":"community","architecture":"x86_64"},"repo_metadata":{"id":36997180,"uuid":"452345017","full_name":"samuelcolvin/dirty-equals","owner":"samuelcolvin","description":"Doing dirty (but extremely useful) things with equals.","archived":false,"fork":false,"pushed_at":"2025-11-17T01:49:48.000Z","size":1593,"stargazers_count":942,"open_issues_count":16,"forks_count":43,"subscribers_count":9,"default_branch":"main","last_synced_at":"2025-12-10T23:50:26.551Z","etag":null,"topics":["pytest","python","testing-tools","unit-testing"],"latest_commit_sha":null,"homepage":"https://dirty-equals.helpmanual.io","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/samuelcolvin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"samuelcolvin"}},"created_at":"2022-01-26T16:10:05.000Z","updated_at":"2025-12-02T17:46:51.000Z","dependencies_parsed_at":"2024-01-12T23:43:05.531Z","dependency_job_id":"b1ec0257-f6d7-4d8d-9041-c350d7e1d39c","html_url":"https://github.com/samuelcolvin/dirty-equals","commit_stats":{"total_commits":133,"total_committers":18,"mean_commits":7.388888888888889,"dds":"0.18796992481203012","last_synced_commit":"065162ac195964df7f5c47288561809e49deac48"},"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/samuelcolvin/dirty-equals","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/samuelcolvin","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/sbom","scorecard":{"id":798334,"data":{"date":"2025-08-11","repo":{"name":"github.com/samuelcolvin/dirty-equals","commit":"31ab5a3b6141106919058c19dc41f0d4e9107d22"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.8,"checks":[{"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":"Code-Review","score":4,"reason":"Found 13/30 approved changesets -- score normalized to 4","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":"Maintained","score":2,"reason":"2 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 2","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"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":"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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ci.yml:1","Warn: topLevel 'statuses' permission set to 'write': .github/workflows/upload-previews.yml:9","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":"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/ci.yml:118: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:122: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:125: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:148: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:165: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:168: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:177: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:185: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:37: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:48: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:57: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:59: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:65: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:74: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:77: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:94: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:106: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/upload-previews.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/upload-previews.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/upload-previews.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/upload-previews.yml/main?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:174","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:43","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:64","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:83","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:87","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:131","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:134","Warn: pipCommand not pinned by hash: .github/workflows/upload-previews.yml:22","Warn: pipCommand not pinned by hash: .github/workflows/upload-previews.yml:23","Info:   0 out of  13 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   7 third-party GitHubAction dependencies pinned","Info:   0 out of   9 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":"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":"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":"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":"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":"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":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"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":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/ci.yml:155"],"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":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 24 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-23T09:39:44.277Z","repository_id":36997180,"created_at":"2025-08-23T09:39:44.277Z","updated_at":"2025-08-23T09:39:44.277Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":27653730,"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-12-11T02:00:11.302Z","response_time":56,"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":"samuelcolvin","name":"Samuel Colvin","uuid":"4039449","kind":"user","description":"The Pydantic Stack: Pydantic Validation, Pydantic AI and Pydantic Logfire","email":"samuel@pydantic.dev","website":"https://pydantic.dev/logfire","location":"London, United Kingdom","twitter":"samuel_colvin","company":"@pydantic","icon_url":"https://avatars.githubusercontent.com/u/4039449?u=42eb3b833047c8c4b4f647a031eaef148c16d93f\u0026v=4","repositories_count":300,"last_synced_at":"2025-10-30T09:42:32.057Z","metadata":{"has_sponsors_listing":true},"html_url":"https://github.com/samuelcolvin","funding_links":["https://github.com/sponsors/samuelcolvin"],"total_stars":7427,"followers":5901,"following":47,"created_at":"2022-11-05T13:50:51.563Z","updated_at":"2025-10-30T09:42:32.057Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/samuelcolvin","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/samuelcolvin/repositories"},"tags":[]},"repo_metadata_updated_at":"2025-12-11T14:21:28.492Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":0.0,"dependent_packages_count":0.0,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":100},"purl":"pkg:apk/alpine/py3-dirty-equals-pyc?arch=x86_64\u0026repository_url=https://pkgs.alpinelinux.org/packages?branch=v3.20","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/alpine/py3-dirty-equals-pyc","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/alpine/py3-dirty-equals-pyc","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/alpine/py3-dirty-equals-pyc/dependencies","status":null,"funding_links":["https://github.com/sponsors/samuelcolvin"],"critical":null,"issue_metadata":{"last_synced_at":"2025-11-26T21:09:34.267Z","issues_count":40,"pull_requests_count":85,"avg_time_to_close_issue":9056859.0,"avg_time_to_close_pull_request":3034838.3205128205,"issues_closed_count":25,"pull_requests_closed_count":78,"pull_request_authors_count":24,"issue_authors_count":23,"avg_comments_per_issue":2.775,"avg_comments_per_pull_request":1.6,"merged_pull_requests_count":70,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":5,"past_year_pull_requests_count":8,"past_year_avg_time_to_close_issue":131984.0,"past_year_avg_time_to_close_pull_request":17296.8,"past_year_issues_closed_count":1,"past_year_pull_requests_closed_count":5,"past_year_pull_request_authors_count":4,"past_year_issue_authors_count":5,"past_year_avg_comments_per_issue":1.2,"past_year_avg_comments_per_pull_request":0.625,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":5,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/issues","maintainers":[{"login":"samuelcolvin","count":53,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/samuelcolvin"},{"login":"15r10nk","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/15r10nk"}],"active_maintainers":[{"login":"samuelcolvin","count":5,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/samuelcolvin"}]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.20/packages/py3-dirty-equals-pyc/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.20/packages/py3-dirty-equals-pyc/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.20/packages/py3-dirty-equals-pyc/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.20/packages/py3-dirty-equals-pyc/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.20/packages/py3-dirty-equals-pyc/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.20/packages/py3-dirty-equals-pyc/codemeta","maintainers":[{"uuid":"alpine@juniorjpdj.pl","login":null,"name":"Jacek Pruciak","email":null,"url":"https://pkgs.alpinelinux.org/packages?maintainer=Jacek Pruciak","packages_count":7,"html_url":"https://pkgs.alpinelinux.org/packages?maintainer=Jacek Pruciak","role":null,"created_at":"2024-06-12T01:04:10.431Z","updated_at":"2024-06-12T01:04:10.431Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.20/maintainers/alpine@juniorjpdj.pl/packages"}],"registry":{"name":"alpine-v3.20","url":"https://pkgs.alpinelinux.org/packages?branch=v3.20","ecosystem":"alpine","default":false,"packages_count":24162,"maintainers_count":405,"namespaces_count":2,"keywords_count":0,"github":"alpinelinux","metadata":{"repos":["main","community"]},"icon_url":"https://github.com/alpinelinux.png","created_at":"2024-06-07T11:51:39.915Z","updated_at":"2026-04-27T18:20:23.245Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.20/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.20/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.20/namespaces"}},{"id":13302536,"name":"python311Packages.dirty-equals","ecosystem":"nixpkgs","description":"Module for doing dirty (but extremely useful) things with equals","homepage":"https://github.com/samuelcolvin/dirty-equals","licenses":"MIT","normalized_licenses":["MIT"],"repository_url":"https://github.com/samuelcolvin/dirty-equals","keywords_array":["python"],"namespace":null,"versions_count":1,"first_release_published_at":"2026-02-02T06:52:24.583Z","latest_release_published_at":"2026-02-02T06:52:24.583Z","latest_release_number":"0.7.0","last_synced_at":"2026-03-08T10:39:30.011Z","created_at":"2026-02-02T06:52:13.679Z","updated_at":"2026-03-08T11:07:40.925Z","registry_url":"https://search.nixos.org/packages?channel=23.11\u0026query=python311Packages.dirty-equals","install_command":"nix-env -iA nixpkgs.python311Packages.dirty-equals","documentation_url":"https://github.com/NixOS/nixpkgs/blob/nixos-23.11/pkgs/development/python-modules/dirty-equals/default.nix#L49","metadata":{"nix_attribute":"python3.11-dirty-equals-0.7.0","position":"pkgs/development/python-modules/dirty-equals/default.nix:49","platforms":["aarch64-linux","armv5tel-linux","armv6l-linux","armv7a-linux","armv7l-linux","i686-linux","loongarch64-linux","m68k-linux","microblaze-linux","microblazeel-linux","mips-linux","mips64-linux","mips64el-linux","mipsel-linux","powerpc64-linux","powerpc64le-linux","riscv32-linux","riscv64-linux","s390-linux","s390x-linux","x86_64-linux","x86_64-darwin","i686-darwin","aarch64-darwin","armv7a-darwin","i686-cygwin","x86_64-cygwin","x86_64-windows","i686-windows"],"broken":false,"insecure":false,"unfree":false,"outputs":["dist","out"],"upstream_ecosystem":"pypi","upstream_name":"dirty-equals","upstream_purl":"pkg:pypi/dirty-equals"},"repo_metadata":{},"repo_metadata_updated_at":null,"dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":0.0,"dependent_packages_count":0.0,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":100},"purl":"pkg:nix/python311Packages.dirty-equals?channel=23.11\u0026repository_url=https://channels.nixos.org/nixos-23.11","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/nixpkgs/python311Packages.dirty-equals","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/nixpkgs/python311Packages.dirty-equals","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/nixpkgs/python311Packages.dirty-equals/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":null,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-23.11/packages/python311Packages.dirty-equals/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-23.11/packages/python311Packages.dirty-equals/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-23.11/packages/python311Packages.dirty-equals/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-23.11/packages/python311Packages.dirty-equals/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-23.11/packages/python311Packages.dirty-equals/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-23.11/packages/python311Packages.dirty-equals/codemeta","maintainers":[{"uuid":"fabaff","login":null,"name":"Fabian Affolter","email":"mail@fabian-affolter.ch","url":"https://github.com/fabaff","packages_count":4331,"html_url":null,"role":null,"created_at":"2026-03-08T10:39:30.180Z","updated_at":"2026-03-08T10:39:30.180Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-23.11/maintainers/fabaff/packages"}],"registry":{"name":"nixpkgs-23.11","url":"https://channels.nixos.org/nixos-23.11","ecosystem":"nixpkgs","default":false,"packages_count":108178,"maintainers_count":2997,"namespaces_count":0,"keywords_count":0,"github":"NixOS","metadata":{"funded_packages_count":189},"icon_url":"https://github.com/NixOS.png","created_at":"2026-01-25T22:30:53.577Z","updated_at":"2026-04-03T06:23:37.723Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-23.11/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-23.11/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-23.11/namespaces"}},{"id":5284274,"name":"dirty-equals","ecosystem":"conda","description":null,"homepage":"https://dirty-equals.helpmanual.io","licenses":"MIT","normalized_licenses":["MIT"],"repository_url":"https://github.com/samuelcolvin/dirty-equals","keywords_array":[],"namespace":null,"versions_count":5,"first_release_published_at":"2022-03-05T02:37:12.000Z","latest_release_published_at":"2022-03-31T12:57:32.000Z","latest_release_number":"0.2.1","last_synced_at":"2026-04-10T20:00:43.704Z","created_at":"2022-10-03T15:40:42.762Z","updated_at":"2026-04-10T20:00:43.705Z","registry_url":"https://anaconda.org/conda-forge/dirty-equals","install_command":"conda install -c conda-forge dirty-equals","documentation_url":null,"metadata":{},"repo_metadata":{"id":36997180,"uuid":"452345017","full_name":"samuelcolvin/dirty-equals","owner":"samuelcolvin","description":"Doing dirty (but extremely useful) things with equals.","archived":false,"fork":false,"pushed_at":"2025-11-17T01:49:48.000Z","size":1593,"stargazers_count":942,"open_issues_count":16,"forks_count":43,"subscribers_count":9,"default_branch":"main","last_synced_at":"2025-12-10T23:50:26.551Z","etag":null,"topics":["pytest","python","testing-tools","unit-testing"],"latest_commit_sha":null,"homepage":"https://dirty-equals.helpmanual.io","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/samuelcolvin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"samuelcolvin"}},"created_at":"2022-01-26T16:10:05.000Z","updated_at":"2025-12-02T17:46:51.000Z","dependencies_parsed_at":"2024-01-12T23:43:05.531Z","dependency_job_id":"b1ec0257-f6d7-4d8d-9041-c350d7e1d39c","html_url":"https://github.com/samuelcolvin/dirty-equals","commit_stats":{"total_commits":133,"total_committers":18,"mean_commits":7.388888888888889,"dds":"0.18796992481203012","last_synced_commit":"065162ac195964df7f5c47288561809e49deac48"},"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/samuelcolvin/dirty-equals","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/samuelcolvin","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/sbom","scorecard":{"id":798334,"data":{"date":"2025-08-11","repo":{"name":"github.com/samuelcolvin/dirty-equals","commit":"31ab5a3b6141106919058c19dc41f0d4e9107d22"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.8,"checks":[{"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":"Code-Review","score":4,"reason":"Found 13/30 approved changesets -- score normalized to 4","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":"Maintained","score":2,"reason":"2 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 2","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"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":"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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ci.yml:1","Warn: topLevel 'statuses' permission set to 'write': .github/workflows/upload-previews.yml:9","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":"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/ci.yml:118: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:122: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:125: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:148: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:165: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:168: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:177: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:185: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:37: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:48: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:57: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:59: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:65: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:74: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:77: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:94: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:106: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/upload-previews.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/upload-previews.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/upload-previews.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/upload-previews.yml/main?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:174","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:43","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:64","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:83","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:87","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:131","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:134","Warn: pipCommand not pinned by hash: .github/workflows/upload-previews.yml:22","Warn: pipCommand not pinned by hash: .github/workflows/upload-previews.yml:23","Info:   0 out of  13 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   7 third-party GitHubAction dependencies pinned","Info:   0 out of   9 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":"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":"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":"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":"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":"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":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"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":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/ci.yml:155"],"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":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 24 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-23T09:39:44.277Z","repository_id":36997180,"created_at":"2025-08-23T09:39:44.277Z","updated_at":"2025-08-23T09:39:44.277Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":27653730,"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-12-11T02:00:11.302Z","response_time":56,"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"},"tags":[]},"repo_metadata_updated_at":"2025-12-11T14:21:17.514Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":34.025455452957324,"dependent_packages_count":51.17544297479411,"stargazers_count":14.918891939106564,"forks_count":32.622909907661594,"average":33.1856750686299},"purl":"pkg:conda/dirty-equals?repository_url=https://conda-forge.org","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/conda/dirty-equals","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/conda/dirty-equals","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/conda/dirty-equals/dependencies","status":null,"funding_links":["https://github.com/sponsors/samuelcolvin"],"critical":null,"issue_metadata":{"last_synced_at":"2025-11-26T21:09:34.267Z","issues_count":40,"pull_requests_count":85,"avg_time_to_close_issue":9056859.0,"avg_time_to_close_pull_request":3034838.3205128205,"issues_closed_count":25,"pull_requests_closed_count":78,"pull_request_authors_count":24,"issue_authors_count":23,"avg_comments_per_issue":2.775,"avg_comments_per_pull_request":1.6,"merged_pull_requests_count":70,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":5,"past_year_pull_requests_count":8,"past_year_avg_time_to_close_issue":131984.0,"past_year_avg_time_to_close_pull_request":17296.8,"past_year_issues_closed_count":1,"past_year_pull_requests_closed_count":5,"past_year_pull_request_authors_count":4,"past_year_issue_authors_count":5,"past_year_avg_comments_per_issue":1.2,"past_year_avg_comments_per_pull_request":0.625,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":5,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/issues","maintainers":[{"login":"samuelcolvin","count":53,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/samuelcolvin"},{"login":"15r10nk","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/15r10nk"}],"active_maintainers":[{"login":"samuelcolvin","count":5,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/samuelcolvin"}]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/conda-forge.org/packages/dirty-equals/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/conda-forge.org/packages/dirty-equals/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/conda-forge.org/packages/dirty-equals/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/conda-forge.org/packages/dirty-equals/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/conda-forge.org/packages/dirty-equals/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/conda-forge.org/packages/dirty-equals/codemeta","maintainers":[],"registry":{"name":"conda-forge.org","url":"https://conda-forge.org","ecosystem":"conda","default":false,"packages_count":20636,"maintainers_count":0,"namespaces_count":0,"keywords_count":0,"github":"conda-forge","metadata":{"kind":"conda-forge","key":"CondaForge","api":"https://conda.anaconda.org"},"icon_url":"https://github.com/conda-forge.png","created_at":"2022-10-03T15:37:08.743Z","updated_at":"2026-04-27T18:20:20.507Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/conda-forge.org/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/conda-forge.org/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/conda-forge.org/namespaces"}},{"id":13445068,"name":"dirty-equals","ecosystem":"ubuntu","description":null,"homepage":"https://github.com/samuelcolvin/dirty-equals","licenses":null,"normalized_licenses":[],"repository_url":"https://github.com/samuelcolvin/dirty-equals","keywords_array":["universe/misc"],"namespace":"universe","versions_count":1,"first_release_published_at":"2026-02-08T11:04:39.658Z","latest_release_published_at":"2026-02-08T11:04:39.658Z","latest_release_number":"0.8.0-1","last_synced_at":"2026-03-08T11:48:32.923Z","created_at":"2026-02-08T11:04:21.050Z","updated_at":"2026-03-08T12:03:14.733Z","registry_url":"https://launchpad.net/ubuntu/+source/dirty-equals","install_command":"apt-get install dirty-equals","documentation_url":null,"metadata":{"component":"universe","architecture":"all","priority":"optional","binary":"python3-dirty-equals","standards_version":"4.7.0","maintainer":"Debian Python Team \u003cteam+python@tracker.debian.org\u003e","build_depends":"debhelper-compat (= 13), dh-sequence-python3, pybuild-plugin-pyproject, python3-all, python3-hatchling","build_depends_indep":"python3-pydantic (\u003e= 2.0~), python3-pytest \u003c!nocheck\u003e, python3-tz","build_depends_arch":null},"repo_metadata":{},"repo_metadata_updated_at":null,"dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":0.0,"dependent_packages_count":0.0,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":100},"purl":"pkg:deb/ubuntu/dirty-equals?arch=source\u0026distro=ubuntu-24.10\u0026repository_url=https://launchpad.net/ubuntu/oracular","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/ubuntu/dirty-equals","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/ubuntu/dirty-equals","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/ubuntu/dirty-equals/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":null,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-24.10/packages/dirty-equals/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-24.10/packages/dirty-equals/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-24.10/packages/dirty-equals/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-24.10/packages/dirty-equals/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-24.10/packages/dirty-equals/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-24.10/packages/dirty-equals/codemeta","maintainers":[],"registry":{"name":"ubuntu-24.10","url":"https://launchpad.net/ubuntu/oracular","ecosystem":"ubuntu","default":false,"packages_count":38437,"maintainers_count":0,"namespaces_count":4,"keywords_count":0,"github":"ubuntu","metadata":{"codename":"oracular","mirror":"http://old-releases.ubuntu.com/ubuntu"},"icon_url":"https://github.com/ubuntu.png","created_at":"2026-02-04T11:01:48.028Z","updated_at":"2026-04-27T18:20:37.303Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-24.10/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-24.10/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-24.10/namespaces"}},{"id":13384651,"name":"dirty-equals","ecosystem":"ubuntu","description":null,"homepage":"https://github.com/samuelcolvin/dirty-equals","licenses":null,"normalized_licenses":[],"repository_url":"https://github.com/samuelcolvin/dirty-equals","keywords_array":["universe/misc"],"namespace":"universe","versions_count":1,"first_release_published_at":"2026-02-05T11:57:38.184Z","latest_release_published_at":"2026-02-05T11:57:38.184Z","latest_release_number":"0.7.0-2","last_synced_at":"2026-03-05T13:12:14.155Z","created_at":"2026-02-05T11:57:37.864Z","updated_at":"2026-03-05T13:30:55.410Z","registry_url":"https://launchpad.net/ubuntu/+source/dirty-equals","install_command":"apt-get install dirty-equals","documentation_url":null,"metadata":{"component":"universe","architecture":"all","priority":"optional","binary":"python3-dirty-equals","standards_version":"4.6.2","maintainer":"Debian Python Team \u003cteam+python@tracker.debian.org\u003e","build_depends":"debhelper-compat (= 13), dh-sequence-python3, pybuild-plugin-pyproject, python3-all, python3-hatchling, python3-pydantic, python3-pytest \u003c!nocheck\u003e, python3-tz","build_depends_indep":null,"build_depends_arch":null},"repo_metadata":{},"repo_metadata_updated_at":null,"dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":0.0,"dependent_packages_count":0.0,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":100},"purl":"pkg:deb/ubuntu/dirty-equals?arch=source\u0026distro=ubuntu-24.04","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/ubuntu/dirty-equals","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/ubuntu/dirty-equals","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/ubuntu/dirty-equals/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":null,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-24.04/packages/dirty-equals/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-24.04/packages/dirty-equals/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-24.04/packages/dirty-equals/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-24.04/packages/dirty-equals/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-24.04/packages/dirty-equals/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-24.04/packages/dirty-equals/codemeta","maintainers":[],"registry":{"name":"ubuntu-24.04","url":"https://launchpad.net/ubuntu/noble","ecosystem":"ubuntu","default":true,"packages_count":37306,"maintainers_count":0,"namespaces_count":4,"keywords_count":0,"github":"ubuntu","metadata":{"codename":"noble"},"icon_url":"https://github.com/ubuntu.png","created_at":"2026-02-04T11:01:45.928Z","updated_at":"2026-04-27T18:20:35.701Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-24.04/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-24.04/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-24.04/namespaces"}},{"id":12813543,"name":"python310Packages.dirty-equals","ecosystem":"nixpkgs","description":"Module for doing dirty (but extremely useful) things with equals","homepage":"https://github.com/samuelcolvin/dirty-equals","licenses":"MIT","normalized_licenses":["MIT"],"repository_url":"https://github.com/samuelcolvin/dirty-equals","keywords_array":["python"],"namespace":null,"versions_count":1,"first_release_published_at":"2026-01-26T16:48:49.643Z","latest_release_published_at":"2026-01-26T16:48:49.643Z","latest_release_number":"0.5.0","last_synced_at":"2026-03-05T18:24:35.809Z","created_at":"2026-01-26T16:48:49.488Z","updated_at":"2026-03-05T18:31:58.263Z","registry_url":"https://search.nixos.org/packages?channel=23.05\u0026query=python310Packages.dirty-equals","install_command":"nix-env -iA nixpkgs.python310Packages.dirty-equals","documentation_url":"https://github.com/NixOS/nixpkgs/blob/nixos-23.05/pkgs/development/python-modules/dirty-equals/default.nix#L43","metadata":{"nix_attribute":"python3.10-dirty-equals-0.5.0","position":"pkgs/development/python-modules/dirty-equals/default.nix:43","platforms":["aarch64-linux","armv5tel-linux","armv6l-linux","armv7a-linux","armv7l-linux","i686-linux","loongarch64-linux","m68k-linux","microblaze-linux","microblazeel-linux","mipsel-linux","mips64el-linux","powerpc64-linux","powerpc64le-linux","riscv32-linux","riscv64-linux","s390-linux","s390x-linux","x86_64-linux","x86_64-darwin","i686-darwin","aarch64-darwin","armv7a-darwin"],"broken":false,"insecure":false,"unfree":false,"outputs":["dist","out"],"upstream_ecosystem":"pypi","upstream_name":"dirty-equals","upstream_purl":"pkg:pypi/dirty-equals"},"repo_metadata":{},"repo_metadata_updated_at":null,"dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":0.0,"dependent_packages_count":0.0,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":100},"purl":"pkg:nix/python310Packages.dirty-equals?channel=23.05\u0026repository_url=https://channels.nixos.org/nixos-23.05","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/nixpkgs/python310Packages.dirty-equals","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/nixpkgs/python310Packages.dirty-equals","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/nixpkgs/python310Packages.dirty-equals/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":null,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-23.05/packages/python310Packages.dirty-equals/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-23.05/packages/python310Packages.dirty-equals/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-23.05/packages/python310Packages.dirty-equals/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-23.05/packages/python310Packages.dirty-equals/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-23.05/packages/python310Packages.dirty-equals/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-23.05/packages/python310Packages.dirty-equals/codemeta","maintainers":[{"uuid":"fabaff","login":null,"name":"Fabian Affolter","email":"mail@fabian-affolter.ch","url":"https://github.com/fabaff","packages_count":3335,"html_url":null,"role":null,"created_at":"2026-03-05T18:24:36.015Z","updated_at":"2026-03-05T18:24:36.015Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-23.05/maintainers/fabaff/packages"}],"registry":{"name":"nixpkgs-23.05","url":"https://channels.nixos.org/nixos-23.05","ecosystem":"nixpkgs","default":false,"packages_count":101092,"maintainers_count":2622,"namespaces_count":0,"keywords_count":0,"github":"NixOS","metadata":{"funded_packages_count":151},"icon_url":"https://github.com/NixOS.png","created_at":"2026-01-25T22:30:53.882Z","updated_at":"2026-04-03T06:21:54.798Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-23.05/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-23.05/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-23.05/namespaces"}},{"id":12826139,"name":"python311Packages.dirty-equals","ecosystem":"nixpkgs","description":"Module for doing dirty (but extremely useful) things with equals","homepage":"https://github.com/samuelcolvin/dirty-equals","licenses":"MIT","normalized_licenses":["MIT"],"repository_url":"https://github.com/samuelcolvin/dirty-equals","keywords_array":["python"],"namespace":null,"versions_count":1,"first_release_published_at":"2026-01-26T18:58:50.590Z","latest_release_published_at":"2026-01-26T18:58:50.590Z","latest_release_number":"0.5.0","last_synced_at":"2026-04-03T08:10:28.182Z","created_at":"2026-01-26T18:58:50.322Z","updated_at":"2026-04-03T08:10:28.182Z","registry_url":"https://search.nixos.org/packages?channel=23.05\u0026query=python311Packages.dirty-equals","install_command":"nix-env -iA nixpkgs.python311Packages.dirty-equals","documentation_url":"https://github.com/NixOS/nixpkgs/blob/nixos-23.05/pkgs/development/python-modules/dirty-equals/default.nix#L43","metadata":{"nix_attribute":"python3.11-dirty-equals-0.5.0","position":"pkgs/development/python-modules/dirty-equals/default.nix:43","platforms":["aarch64-linux","armv5tel-linux","armv6l-linux","armv7a-linux","armv7l-linux","i686-linux","loongarch64-linux","m68k-linux","microblaze-linux","microblazeel-linux","mipsel-linux","mips64el-linux","powerpc64-linux","powerpc64le-linux","riscv32-linux","riscv64-linux","s390-linux","s390x-linux","x86_64-linux","x86_64-darwin","i686-darwin","aarch64-darwin","armv7a-darwin"],"broken":false,"insecure":false,"unfree":false,"outputs":["dist","out"],"upstream_ecosystem":"pypi","upstream_name":"dirty-equals","upstream_purl":"pkg:pypi/dirty-equals"},"repo_metadata":{},"repo_metadata_updated_at":null,"dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":0.0,"dependent_packages_count":0.0,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":100},"purl":"pkg:nix/python311Packages.dirty-equals?channel=23.05\u0026repository_url=https://channels.nixos.org/nixos-23.05","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/nixpkgs/python311Packages.dirty-equals","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/nixpkgs/python311Packages.dirty-equals","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/nixpkgs/python311Packages.dirty-equals/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":null,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-23.05/packages/python311Packages.dirty-equals/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-23.05/packages/python311Packages.dirty-equals/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-23.05/packages/python311Packages.dirty-equals/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-23.05/packages/python311Packages.dirty-equals/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-23.05/packages/python311Packages.dirty-equals/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-23.05/packages/python311Packages.dirty-equals/codemeta","maintainers":[{"uuid":"fabaff","login":null,"name":"Fabian Affolter","email":"mail@fabian-affolter.ch","url":"https://github.com/fabaff","packages_count":3335,"html_url":null,"role":null,"created_at":"2026-03-03T07:29:42.762Z","updated_at":"2026-03-03T07:29:42.762Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-23.05/maintainers/fabaff/packages"}],"registry":{"name":"nixpkgs-23.05","url":"https://channels.nixos.org/nixos-23.05","ecosystem":"nixpkgs","default":false,"packages_count":101092,"maintainers_count":2622,"namespaces_count":0,"keywords_count":0,"github":"NixOS","metadata":{"funded_packages_count":151},"icon_url":"https://github.com/NixOS.png","created_at":"2026-01-25T22:30:53.882Z","updated_at":"2026-04-03T06:21:54.798Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-23.05/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-23.05/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-23.05/namespaces"}},{"id":14527616,"name":"devel/py-dirty-equals","ecosystem":"pkgsrc","description":"Core functionality for pydantic","homepage":"https://github.com/samuelcolvin/dirty-equals","licenses":"mit","normalized_licenses":["MIT"],"repository_url":"https://github.com/samuelcolvin/dirty-equals","keywords_array":["devel","python"],"namespace":"devel","versions_count":1,"first_release_published_at":"2026-03-07T03:21:50.000Z","latest_release_published_at":"2026-03-07T03:21:50.000Z","latest_release_number":"0.11","last_synced_at":"2026-05-27T06:37:37.494Z","created_at":"2026-05-27T06:37:37.203Z","updated_at":"2026-05-27T07:07:05.137Z","registry_url":"https://pkgsrc.se/devel/py-dirty-equals","install_command":"pkg_add py311-dirty-equals","documentation_url":"https://pkgsrc.se/devel/py-dirty-equals","metadata":{"pkg_slug":"py-dirty-equals","pkgbase":"py311-dirty-equals","machine_arch":"x86_64","opsys":"NetBSD","pkgname_latest":"py311-dirty-equals-0.11"},"repo_metadata":{},"repo_metadata_updated_at":"2026-05-27T06:37:38.494Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":0.0,"dependent_packages_count":0.0,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":100},"purl":"pkg:pkgsrc/devel/py-dirty-equals?arch=x86_64\u0026os=NetBSD","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/pkgsrc/devel/py-dirty-equals","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/pkgsrc/devel/py-dirty-equals","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/pkgsrc/devel/py-dirty-equals/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":null,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/pkgsrc-netbsd-x86_64-10.1-all/packages/devel%2Fpy-dirty-equals/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/pkgsrc-netbsd-x86_64-10.1-all/packages/devel%2Fpy-dirty-equals/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/pkgsrc-netbsd-x86_64-10.1-all/packages/devel%2Fpy-dirty-equals/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/pkgsrc-netbsd-x86_64-10.1-all/packages/devel%2Fpy-dirty-equals/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/pkgsrc-netbsd-x86_64-10.1-all/packages/devel%2Fpy-dirty-equals/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/pkgsrc-netbsd-x86_64-10.1-all/packages/devel%2Fpy-dirty-equals/codemeta","maintainers":[],"registry":{"name":"pkgsrc-netbsd-x86_64-10.1-all","url":"https://cdn.netbsd.org/pub/pkgsrc/packages/NetBSD/x86_64/10.1/All","ecosystem":"pkgsrc","default":true,"packages_count":19301,"maintainers_count":0,"namespaces_count":42,"keywords_count":305,"github":"pkgsrc","metadata":{"funded_packages_count":48},"icon_url":"https://github.com/pkgsrc.png","created_at":"2026-05-26T08:59:24.518Z","updated_at":"2026-05-29T05:08:52.402Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/pkgsrc-netbsd-x86_64-10.1-all/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/pkgsrc-netbsd-x86_64-10.1-all/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/pkgsrc-netbsd-x86_64-10.1-all/namespaces"}},{"id":13202589,"name":"python312Packages.dirty-equals","ecosystem":"nixpkgs","description":"Module for doing dirty (but extremely useful) things with equals","homepage":"https://github.com/samuelcolvin/dirty-equals","licenses":"MIT","normalized_licenses":["MIT"],"repository_url":"https://github.com/samuelcolvin/dirty-equals","keywords_array":["python"],"namespace":null,"versions_count":1,"first_release_published_at":"2026-02-02T00:53:09.699Z","latest_release_published_at":"2026-02-02T00:53:09.699Z","latest_release_number":"0.7.1-post0","last_synced_at":"2026-03-09T04:06:46.867Z","created_at":"2026-02-02T00:53:00.200Z","updated_at":"2026-03-09T12:33:53.203Z","registry_url":"https://search.nixos.org/packages?channel=24.05\u0026query=python312Packages.dirty-equals","install_command":"nix-env -iA nixpkgs.python312Packages.dirty-equals","documentation_url":"https://github.com/NixOS/nixpkgs/blob/nixos-24.05/pkgs/development/python-modules/dirty-equals/default.nix#L44","metadata":{"nix_attribute":"python3.12-dirty-equals-0.7.1-post0","position":"pkgs/development/python-modules/dirty-equals/default.nix:44","platforms":["aarch64-linux","armv5tel-linux","armv6l-linux","armv7a-linux","armv7l-linux","i686-linux","loongarch64-linux","m68k-linux","microblaze-linux","microblazeel-linux","mips-linux","mips64-linux","mips64el-linux","mipsel-linux","powerpc64-linux","powerpc64le-linux","riscv32-linux","riscv64-linux","s390-linux","s390x-linux","x86_64-linux","x86_64-darwin","i686-darwin","aarch64-darwin","armv7a-darwin","i686-cygwin","x86_64-cygwin","x86_64-windows","i686-windows"],"broken":false,"insecure":false,"unfree":false,"outputs":["dist","out"],"upstream_ecosystem":"pypi","upstream_name":"dirty-equals","upstream_purl":"pkg:pypi/dirty-equals"},"repo_metadata":{},"repo_metadata_updated_at":null,"dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":0.0,"dependent_packages_count":0.0,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":100},"purl":"pkg:nix/python312Packages.dirty-equals?channel=24.05\u0026repository_url=https://channels.nixos.org/nixos-24.05","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/nixpkgs/python312Packages.dirty-equals","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/nixpkgs/python312Packages.dirty-equals","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/nixpkgs/python312Packages.dirty-equals/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":null,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-24.05/packages/python312Packages.dirty-equals/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-24.05/packages/python312Packages.dirty-equals/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-24.05/packages/python312Packages.dirty-equals/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-24.05/packages/python312Packages.dirty-equals/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-24.05/packages/python312Packages.dirty-equals/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-24.05/packages/python312Packages.dirty-equals/codemeta","maintainers":[{"uuid":"fabaff","login":null,"name":"Fabian Affolter","email":"mail@fabian-affolter.ch","url":"https://github.com/fabaff","packages_count":4856,"html_url":null,"role":null,"created_at":"2026-03-09T04:06:47.126Z","updated_at":"2026-03-09T04:06:47.126Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-24.05/maintainers/fabaff/packages"}],"registry":{"name":"nixpkgs-24.05","url":"https://channels.nixos.org/nixos-24.05","ecosystem":"nixpkgs","default":false,"packages_count":116156,"maintainers_count":3383,"namespaces_count":0,"keywords_count":654,"github":"NixOS","metadata":{"funded_packages_count":252},"icon_url":"https://github.com/NixOS.png","created_at":"2026-01-25T22:30:53.309Z","updated_at":"2026-05-29T05:10:13.988Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-24.05/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-24.05/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-24.05/namespaces"}},{"id":13008534,"name":"py3-dirty-equals","ecosystem":"alpine","description":"Doing dirty (but extremely useful) things with equals.","homepage":"https://github.com/samuelcolvin/dirty-equals","licenses":"MIT","normalized_licenses":["MIT"],"repository_url":"https://github.com/samuelcolvin/dirty-equals","keywords_array":[],"namespace":"community","versions_count":1,"first_release_published_at":"2024-10-19T10:40:05.000Z","latest_release_published_at":"2024-10-19T10:40:05.000Z","latest_release_number":"0.8.0-r0","last_synced_at":"2026-04-08T21:07:44.688Z","created_at":"2026-01-31T00:39:37.909Z","updated_at":"2026-04-08T21:07:44.689Z","registry_url":"https://pkgs.alpinelinux.org/package/v3.23/community/x86_64/py3-dirty-equals","install_command":"apk add py3-dirty-equals","documentation_url":null,"metadata":{"repository":"community","architecture":"x86_64"},"repo_metadata":{},"repo_metadata_updated_at":null,"dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":0.0,"dependent_packages_count":0.0,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":100},"purl":"pkg:apk/alpine/py3-dirty-equals?arch=x86_64\u0026repository_url=https://pkgs.alpinelinux.org/packages?branch=v3.23","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/alpine/py3-dirty-equals","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/alpine/py3-dirty-equals","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/alpine/py3-dirty-equals/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":null,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.23/packages/py3-dirty-equals/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.23/packages/py3-dirty-equals/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.23/packages/py3-dirty-equals/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.23/packages/py3-dirty-equals/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.23/packages/py3-dirty-equals/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.23/packages/py3-dirty-equals/codemeta","maintainers":[{"uuid":"alpine@juniorjpdj.pl","login":null,"name":"Jacek Pruciak","email":null,"url":"https://pkgs.alpinelinux.org/packages?maintainer=Jacek Pruciak","packages_count":7,"html_url":"https://pkgs.alpinelinux.org/packages?maintainer=Jacek Pruciak","role":null,"created_at":"2026-03-03T15:29:48.730Z","updated_at":"2026-03-03T15:29:48.730Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.23/maintainers/alpine@juniorjpdj.pl/packages"}],"registry":{"name":"alpine-v3.23","url":"https://pkgs.alpinelinux.org/packages?branch=v3.23","ecosystem":"alpine","default":false,"packages_count":27569,"maintainers_count":428,"namespaces_count":2,"keywords_count":0,"github":"alpinelinux","metadata":{"repos":["main","community"]},"icon_url":"https://github.com/alpinelinux.png","created_at":"2026-01-24T14:35:50.739Z","updated_at":"2026-04-27T18:20:22.382Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.23/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.23/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.23/namespaces"}},{"id":13194306,"name":"python311Packages.dirty-equals","ecosystem":"nixpkgs","description":"Module for doing dirty (but extremely useful) things with equals","homepage":"https://github.com/samuelcolvin/dirty-equals","licenses":"MIT","normalized_licenses":["MIT"],"repository_url":"https://github.com/samuelcolvin/dirty-equals","keywords_array":["python"],"namespace":null,"versions_count":1,"first_release_published_at":"2026-02-02T00:19:29.350Z","latest_release_published_at":"2026-02-02T00:19:29.350Z","latest_release_number":"0.7.1-post0","last_synced_at":"2026-03-09T01:08:30.223Z","created_at":"2026-02-02T00:19:28.470Z","updated_at":"2026-03-09T14:02:07.815Z","registry_url":"https://search.nixos.org/packages?channel=24.05\u0026query=python311Packages.dirty-equals","install_command":"nix-env -iA nixpkgs.python311Packages.dirty-equals","documentation_url":"https://github.com/NixOS/nixpkgs/blob/nixos-24.05/pkgs/development/python-modules/dirty-equals/default.nix#L44","metadata":{"nix_attribute":"python3.11-dirty-equals-0.7.1-post0","position":"pkgs/development/python-modules/dirty-equals/default.nix:44","platforms":["aarch64-linux","armv5tel-linux","armv6l-linux","armv7a-linux","armv7l-linux","i686-linux","loongarch64-linux","m68k-linux","microblaze-linux","microblazeel-linux","mips-linux","mips64-linux","mips64el-linux","mipsel-linux","powerpc64-linux","powerpc64le-linux","riscv32-linux","riscv64-linux","s390-linux","s390x-linux","x86_64-linux","x86_64-darwin","i686-darwin","aarch64-darwin","armv7a-darwin","i686-cygwin","x86_64-cygwin","x86_64-windows","i686-windows"],"broken":false,"insecure":false,"unfree":false,"outputs":["dist","out"],"upstream_ecosystem":"pypi","upstream_name":"dirty-equals","upstream_purl":"pkg:pypi/dirty-equals"},"repo_metadata":{},"repo_metadata_updated_at":null,"dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":0.0,"dependent_packages_count":0.0,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":100},"purl":"pkg:nix/python311Packages.dirty-equals?channel=24.05\u0026repository_url=https://channels.nixos.org/nixos-24.05","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/nixpkgs/python311Packages.dirty-equals","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/nixpkgs/python311Packages.dirty-equals","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/nixpkgs/python311Packages.dirty-equals/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":null,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-24.05/packages/python311Packages.dirty-equals/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-24.05/packages/python311Packages.dirty-equals/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-24.05/packages/python311Packages.dirty-equals/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-24.05/packages/python311Packages.dirty-equals/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-24.05/packages/python311Packages.dirty-equals/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-24.05/packages/python311Packages.dirty-equals/codemeta","maintainers":[{"uuid":"fabaff","login":null,"name":"Fabian Affolter","email":"mail@fabian-affolter.ch","url":"https://github.com/fabaff","packages_count":4856,"html_url":null,"role":null,"created_at":"2026-03-09T01:08:30.391Z","updated_at":"2026-03-09T01:08:30.391Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-24.05/maintainers/fabaff/packages"}],"registry":{"name":"nixpkgs-24.05","url":"https://channels.nixos.org/nixos-24.05","ecosystem":"nixpkgs","default":false,"packages_count":116156,"maintainers_count":3383,"namespaces_count":0,"keywords_count":654,"github":"NixOS","metadata":{"funded_packages_count":252},"icon_url":"https://github.com/NixOS.png","created_at":"2026-01-25T22:30:53.309Z","updated_at":"2026-05-29T05:10:13.988Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-24.05/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-24.05/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-24.05/namespaces"}},{"id":8614850,"name":"github.com/samuelcolvin/dirty-equals","ecosystem":"go","description":null,"homepage":null,"licenses":"mit","normalized_licenses":["MIT"],"repository_url":"https://github.com/samuelcolvin/dirty-equals","keywords_array":[],"namespace":null,"versions_count":15,"first_release_published_at":"2023-12-02T02:15:12.052Z","latest_release_published_at":"2025-11-17T01:44:58.000Z","latest_release_number":"v0.11.0","last_synced_at":"2026-04-27T13:54:59.899Z","created_at":"2023-12-02T02:15:08.508Z","updated_at":"2026-04-27T13:54:59.899Z","registry_url":"https://pkg.go.dev/github.com/samuelcolvin/dirty-equals","install_command":"go get github.com/samuelcolvin/dirty-equals","documentation_url":"https://pkg.go.dev/github.com/samuelcolvin/dirty-equals#section-documentation","metadata":{},"repo_metadata":{"id":36997180,"uuid":"452345017","full_name":"samuelcolvin/dirty-equals","owner":"samuelcolvin","description":"Doing dirty (but extremely useful) things with equals.","archived":false,"fork":false,"pushed_at":"2025-11-17T01:49:48.000Z","size":1593,"stargazers_count":942,"open_issues_count":16,"forks_count":43,"subscribers_count":9,"default_branch":"main","last_synced_at":"2025-12-10T23:50:26.551Z","etag":null,"topics":["pytest","python","testing-tools","unit-testing"],"latest_commit_sha":null,"homepage":"https://dirty-equals.helpmanual.io","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/samuelcolvin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"samuelcolvin"}},"created_at":"2022-01-26T16:10:05.000Z","updated_at":"2025-12-02T17:46:51.000Z","dependencies_parsed_at":"2024-01-12T23:43:05.531Z","dependency_job_id":"b1ec0257-f6d7-4d8d-9041-c350d7e1d39c","html_url":"https://github.com/samuelcolvin/dirty-equals","commit_stats":{"total_commits":133,"total_committers":18,"mean_commits":7.388888888888889,"dds":"0.18796992481203012","last_synced_commit":"065162ac195964df7f5c47288561809e49deac48"},"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/samuelcolvin/dirty-equals","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/samuelcolvin","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/sbom","scorecard":{"id":798334,"data":{"date":"2025-08-11","repo":{"name":"github.com/samuelcolvin/dirty-equals","commit":"31ab5a3b6141106919058c19dc41f0d4e9107d22"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.8,"checks":[{"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":"Code-Review","score":4,"reason":"Found 13/30 approved changesets -- score normalized to 4","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":"Maintained","score":2,"reason":"2 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 2","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"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":"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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ci.yml:1","Warn: topLevel 'statuses' permission set to 'write': .github/workflows/upload-previews.yml:9","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":"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/ci.yml:118: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:122: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:125: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:148: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:165: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:168: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:177: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:185: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:37: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:48: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:57: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:59: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:65: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:74: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:77: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:94: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:106: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/upload-previews.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/upload-previews.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/upload-previews.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/upload-previews.yml/main?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:174","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:43","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:64","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:83","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:87","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:131","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:134","Warn: pipCommand not pinned by hash: .github/workflows/upload-previews.yml:22","Warn: pipCommand not pinned by hash: .github/workflows/upload-previews.yml:23","Info:   0 out of  13 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   7 third-party GitHubAction dependencies pinned","Info:   0 out of   9 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":"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":"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":"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":"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":"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":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"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":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/ci.yml:155"],"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":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 24 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-23T09:39:44.277Z","repository_id":36997180,"created_at":"2025-08-23T09:39:44.277Z","updated_at":"2025-08-23T09:39:44.277Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":27653730,"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-12-11T02:00:11.302Z","response_time":56,"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":"samuelcolvin","name":"Samuel Colvin","uuid":"4039449","kind":"user","description":"The Pydantic Stack: Pydantic Validation, Pydantic AI and Pydantic Logfire","email":"samuel@pydantic.dev","website":"https://pydantic.dev/logfire","location":"London, United Kingdom","twitter":"samuel_colvin","company":"@pydantic","icon_url":"https://avatars.githubusercontent.com/u/4039449?u=42eb3b833047c8c4b4f647a031eaef148c16d93f\u0026v=4","repositories_count":300,"last_synced_at":"2025-10-30T09:42:32.057Z","metadata":{"has_sponsors_listing":true},"html_url":"https://github.com/samuelcolvin","funding_links":["https://github.com/sponsors/samuelcolvin"],"total_stars":7427,"followers":5901,"following":47,"created_at":"2022-11-05T13:50:51.563Z","updated_at":"2025-10-30T09:42:32.057Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/samuelcolvin","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/samuelcolvin/repositories"},"tags":[{"name":"v0.11.0","sha":"e8cd329dfb910a9696edc9cb793e35c2de6c502e","kind":"commit","published_at":"2025-11-17T01:44:58.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.11.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.11.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.11.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.11.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.11.0/manifests"},{"name":"v0.10.0","sha":"32f23d118cae651a91209fbaa651b0adada60c71","kind":"commit","published_at":"2025-09-19T16:03:15.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.10.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.10.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.10.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.10.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.10.0/manifests"},{"name":"v0.9.0","sha":"9e6f0be981f982fdaae16671ab14aefc3ab8664a","kind":"commit","published_at":"2025-01-11T23:20:42.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.9.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.9.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.9.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.9.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.9.0/manifests"},{"name":"v0.8.0","sha":"da29a2db8293c4c974f303974a6e5ffdb462c9b4","kind":"commit","published_at":"2024-08-13T19:53:17.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.8.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.8.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.8.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.8.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.8.0/manifests"},{"name":"v0.7.1-post0","sha":"5da8ed1cfea51c86c2585264d6bec8de2942d029","kind":"commit","published_at":"2023-11-15T04:29:18.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.7.1-post0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.7.1-post0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.7.1-post0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.1-post0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.1-post0/manifests"},{"name":"v0.7.1","sha":"78a992266989f2687eae48f58367906d895af285","kind":"commit","published_at":"2023-11-14T12:38:22.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.7.1","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.7.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.7.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.1/manifests"},{"name":"v0.7.0","sha":"87d4552f76f3a123cf0455f46f89091ade15614f","kind":"commit","published_at":"2023-09-03T14:17:15.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.7.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.7.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.7.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.0/manifests"},{"name":"v0.6.0","sha":"5577ce517e6ede343634e11dd5f397356aefd1d2","kind":"tag","published_at":"2023-04-27T23:55:39.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.6.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.6.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.6.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.6.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.6.0/manifests"},{"name":"v0.5.0","sha":"b65760701f6649b4f188c6a1294b3b91b2d2ba85","kind":"tag","published_at":"2022-08-30T20:05:41.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.5.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.5.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.5.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.5.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.5.0/manifests"},{"name":"v0.4","sha":"2d3c0e5ec4c92c1e336b231343c675f78ac746c8","kind":"commit","published_at":"2022-04-28T15:37:25.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.4","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.4","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.4","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.4/manifests"},{"name":"v0.3","sha":"c128d7cf3aa7d48696433be6b9945cc45fa6b046","kind":"commit","published_at":"2022-04-18T12:08:04.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.3","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.3","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.3","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.3/manifests"},{"name":"v0.2.1","sha":"6eb2932c40452ce7a62e0f3ba832d3712026b606","kind":"commit","published_at":"2022-03-30T11:09:12.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.2.1","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.2.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.2.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.2.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.2.1/manifests"},{"name":"v0.2","sha":"ae3881c6ff78ca608b97cb581d6a733bd974e102","kind":"commit","published_at":"2022-03-29T14:15:56.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.2","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.2/manifests"},{"name":"v0.1","sha":"450492e624f0b42c1addd20cac684b4614f1a78f","kind":"commit","published_at":"2022-02-25T16:37:37.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.1","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.1/manifests"},{"name":"v0.0.5","sha":"35cfacc7dac357cc5b3b8bdd64e2667a0f25691e","kind":"commit","published_at":"2022-02-24T21:26:02.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.0.5","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.0.5","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.0.5","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.5/manifests"},{"name":"v0.0.4","sha":"0a78e042ef9db11d7337966d2c29e4c43251eef1","kind":"commit","published_at":"2022-02-23T20:01:20.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.0.4","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.0.4","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.0.4","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.4/manifests"},{"name":"v0.0.3","sha":"c690abbb32e5893d3bb2634e1345ab30a2f46791","kind":"commit","published_at":"2022-02-22T19:38:42.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.0.3","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.0.3","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.0.3","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.3/manifests"},{"name":"v0.0.2","sha":"1a09de2bb95f4fa903f47adfe1a35dc1fcad8afb","kind":"commit","published_at":"2022-01-28T11:55:35.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.0.2","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.0.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.0.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.2/manifests"},{"name":"v0.0.1","sha":"9fae3910fed3925b9d950afb85ced13a7c3ba4aa","kind":"commit","published_at":"2022-01-27T22:49:09.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.0.1","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.0.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.1/manifests"}]},"repo_metadata_updated_at":"2025-12-11T14:21:22.208Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":10.801592556016239,"dependent_packages_count":9.575730298247606,"stargazers_count":2.289449053094454,"forks_count":3.970841316038783,"docker_downloads_count":null,"average":6.6594033058492705},"purl":"pkg:golang/github.com/samuelcolvin/dirty-equals","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/go/github.com/samuelcolvin/dirty-equals","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/go/github.com/samuelcolvin/dirty-equals","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/go/github.com/samuelcolvin/dirty-equals/dependencies","status":null,"funding_links":["https://github.com/sponsors/samuelcolvin"],"critical":null,"issue_metadata":{"last_synced_at":"2025-11-26T21:09:34.267Z","issues_count":40,"pull_requests_count":85,"avg_time_to_close_issue":9056859.0,"avg_time_to_close_pull_request":3034838.3205128205,"issues_closed_count":25,"pull_requests_closed_count":78,"pull_request_authors_count":24,"issue_authors_count":23,"avg_comments_per_issue":2.775,"avg_comments_per_pull_request":1.6,"merged_pull_requests_count":70,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":5,"past_year_pull_requests_count":8,"past_year_avg_time_to_close_issue":131984.0,"past_year_avg_time_to_close_pull_request":17296.8,"past_year_issues_closed_count":1,"past_year_pull_requests_closed_count":5,"past_year_pull_request_authors_count":4,"past_year_issue_authors_count":5,"past_year_avg_comments_per_issue":1.2,"past_year_avg_comments_per_pull_request":0.625,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":5,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/issues","maintainers":[{"login":"samuelcolvin","count":53,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/samuelcolvin"},{"login":"15r10nk","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/15r10nk"}],"active_maintainers":[{"login":"samuelcolvin","count":5,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/samuelcolvin"}]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fsamuelcolvin%2Fdirty-equals/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fsamuelcolvin%2Fdirty-equals/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fsamuelcolvin%2Fdirty-equals/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fsamuelcolvin%2Fdirty-equals/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fsamuelcolvin%2Fdirty-equals/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages/github.com%2Fsamuelcolvin%2Fdirty-equals/codemeta","maintainers":[],"registry":{"name":"proxy.golang.org","url":"https://proxy.golang.org","ecosystem":"go","default":true,"packages_count":2152555,"maintainers_count":0,"namespaces_count":782439,"keywords_count":112823,"github":"golang","metadata":{"funded_packages_count":53495},"icon_url":"https://github.com/golang.png","created_at":"2022-04-04T15:19:22.939Z","updated_at":"2026-04-19T05:14:45.920Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/proxy.golang.org/namespaces"}},{"id":13083993,"name":"python312Packages.dirty-equals","ecosystem":"nixpkgs","description":"Module for doing dirty (but extremely useful) things with equals","homepage":"https://github.com/samuelcolvin/dirty-equals","licenses":"MIT","normalized_licenses":["MIT"],"repository_url":"https://github.com/samuelcolvin/dirty-equals","keywords_array":["python"],"namespace":null,"versions_count":1,"first_release_published_at":"2026-02-01T17:57:57.916Z","latest_release_published_at":"2026-02-01T17:57:57.916Z","latest_release_number":"0.8.0","last_synced_at":"2026-04-09T15:02:23.543Z","created_at":"2026-02-01T17:57:24.315Z","updated_at":"2026-04-09T15:02:23.544Z","registry_url":"https://search.nixos.org/packages?channel=24.11\u0026query=python312Packages.dirty-equals","install_command":"nix-env -iA nixpkgs.python312Packages.dirty-equals","documentation_url":"https://github.com/NixOS/nixpkgs/blob/nixos-24.11/pkgs/development/python-modules/dirty-equals/default.nix#L45","metadata":{"nix_attribute":"python3.12-dirty-equals-0.8.0","position":"pkgs/development/python-modules/dirty-equals/default.nix:45","platforms":["aarch64-linux","armv5tel-linux","armv6l-linux","armv7a-linux","armv7l-linux","i686-linux","loongarch64-linux","m68k-linux","microblaze-linux","microblazeel-linux","mips-linux","mips64-linux","mips64el-linux","mipsel-linux","powerpc64-linux","powerpc64le-linux","riscv32-linux","riscv64-linux","s390-linux","s390x-linux","x86_64-linux","x86_64-darwin","i686-darwin","aarch64-darwin","armv7a-darwin","i686-cygwin","x86_64-cygwin","aarch64-windows","x86_64-windows","i686-windows","i686-freebsd","x86_64-freebsd"],"broken":false,"insecure":false,"unfree":false,"outputs":["dist","out"],"upstream_ecosystem":"pypi","upstream_name":"dirty-equals","upstream_purl":"pkg:pypi/dirty-equals"},"repo_metadata":{},"repo_metadata_updated_at":null,"dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":0.0,"dependent_packages_count":0.0,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":100},"purl":"pkg:nix/python312Packages.dirty-equals?channel=24.11\u0026repository_url=https://channels.nixos.org/nixos-24.11","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/nixpkgs/python312Packages.dirty-equals","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/nixpkgs/python312Packages.dirty-equals","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/nixpkgs/python312Packages.dirty-equals/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":null,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-24.11/packages/python312Packages.dirty-equals/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-24.11/packages/python312Packages.dirty-equals/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-24.11/packages/python312Packages.dirty-equals/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-24.11/packages/python312Packages.dirty-equals/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-24.11/packages/python312Packages.dirty-equals/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-24.11/packages/python312Packages.dirty-equals/codemeta","maintainers":[{"uuid":"fabaff","login":null,"name":"Fabian Affolter","email":"mail@fabian-affolter.ch","url":"https://github.com/fabaff","packages_count":5052,"html_url":null,"role":null,"created_at":"2026-03-03T18:27:17.693Z","updated_at":"2026-03-03T18:27:17.693Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-24.11/maintainers/fabaff/packages"}],"registry":{"name":"nixpkgs-24.11","url":"https://channels.nixos.org/nixos-24.11","ecosystem":"nixpkgs","default":false,"packages_count":121983,"maintainers_count":3777,"namespaces_count":0,"keywords_count":0,"github":"NixOS","metadata":{"funded_packages_count":228},"icon_url":"https://github.com/NixOS.png","created_at":"2026-01-25T22:30:53.059Z","updated_at":"2026-04-03T06:22:14.703Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-24.11/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-24.11/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-24.11/namespaces"}},{"id":13075128,"name":"python311Packages.dirty-equals","ecosystem":"nixpkgs","description":"Module for doing dirty (but extremely useful) things with equals","homepage":"https://github.com/samuelcolvin/dirty-equals","licenses":"MIT","normalized_licenses":["MIT"],"repository_url":"https://github.com/samuelcolvin/dirty-equals","keywords_array":["python"],"namespace":null,"versions_count":1,"first_release_published_at":"2026-02-01T17:30:11.163Z","latest_release_published_at":"2026-02-01T17:30:11.163Z","latest_release_number":"0.8.0","last_synced_at":"2026-03-06T01:28:04.064Z","created_at":"2026-02-01T17:29:49.569Z","updated_at":"2026-03-06T01:31:36.676Z","registry_url":"https://search.nixos.org/packages?channel=24.11\u0026query=python311Packages.dirty-equals","install_command":"nix-env -iA nixpkgs.python311Packages.dirty-equals","documentation_url":"https://github.com/NixOS/nixpkgs/blob/nixos-24.11/pkgs/development/python-modules/dirty-equals/default.nix#L45","metadata":{"nix_attribute":"python3.11-dirty-equals-0.8.0","position":"pkgs/development/python-modules/dirty-equals/default.nix:45","platforms":["aarch64-linux","armv5tel-linux","armv6l-linux","armv7a-linux","armv7l-linux","i686-linux","loongarch64-linux","m68k-linux","microblaze-linux","microblazeel-linux","mips-linux","mips64-linux","mips64el-linux","mipsel-linux","powerpc64-linux","powerpc64le-linux","riscv32-linux","riscv64-linux","s390-linux","s390x-linux","x86_64-linux","x86_64-darwin","i686-darwin","aarch64-darwin","armv7a-darwin","i686-cygwin","x86_64-cygwin","aarch64-windows","x86_64-windows","i686-windows","i686-freebsd","x86_64-freebsd"],"broken":false,"insecure":false,"unfree":false,"outputs":["dist","out"],"upstream_ecosystem":"pypi","upstream_name":"dirty-equals","upstream_purl":"pkg:pypi/dirty-equals"},"repo_metadata":{},"repo_metadata_updated_at":null,"dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":0.0,"dependent_packages_count":0.0,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":100},"purl":"pkg:nix/python311Packages.dirty-equals?channel=24.11\u0026repository_url=https://channels.nixos.org/nixos-24.11","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/nixpkgs/python311Packages.dirty-equals","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/nixpkgs/python311Packages.dirty-equals","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/nixpkgs/python311Packages.dirty-equals/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":null,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-24.11/packages/python311Packages.dirty-equals/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-24.11/packages/python311Packages.dirty-equals/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-24.11/packages/python311Packages.dirty-equals/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-24.11/packages/python311Packages.dirty-equals/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-24.11/packages/python311Packages.dirty-equals/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-24.11/packages/python311Packages.dirty-equals/codemeta","maintainers":[{"uuid":"fabaff","login":null,"name":"Fabian Affolter","email":"mail@fabian-affolter.ch","url":"https://github.com/fabaff","packages_count":5052,"html_url":null,"role":null,"created_at":"2026-03-06T01:28:04.256Z","updated_at":"2026-03-06T01:28:04.256Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-24.11/maintainers/fabaff/packages"}],"registry":{"name":"nixpkgs-24.11","url":"https://channels.nixos.org/nixos-24.11","ecosystem":"nixpkgs","default":false,"packages_count":121983,"maintainers_count":3777,"namespaces_count":0,"keywords_count":0,"github":"NixOS","metadata":{"funded_packages_count":228},"icon_url":"https://github.com/NixOS.png","created_at":"2026-01-25T22:30:53.059Z","updated_at":"2026-04-03T06:22:14.703Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-24.11/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-24.11/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/nixpkgs-24.11/namespaces"}},{"id":11138523,"name":"py3-dirty-equals","ecosystem":"alpine","description":"Doing dirty (but extremely useful) things with equals.","homepage":"https://github.com/samuelcolvin/dirty-equals","licenses":"MIT","normalized_licenses":["MIT"],"repository_url":"https://github.com/samuelcolvin/dirty-equals","keywords_array":[],"namespace":"community","versions_count":1,"first_release_published_at":"2024-10-19T10:40:05.000Z","latest_release_published_at":"2024-10-19T10:40:05.000Z","latest_release_number":"0.8.0-r0","last_synced_at":"2026-04-10T18:03:15.327Z","created_at":"2024-12-07T12:29:56.023Z","updated_at":"2026-04-10T18:03:15.327Z","registry_url":"https://pkgs.alpinelinux.org/package/v3.21/community/x86_64/py3-dirty-equals","install_command":"apk add py3-dirty-equals","documentation_url":null,"metadata":{"repository":"community","architecture":"x86_64"},"repo_metadata":{"id":36997180,"uuid":"452345017","full_name":"samuelcolvin/dirty-equals","owner":"samuelcolvin","description":"Doing dirty (but extremely useful) things with equals.","archived":false,"fork":false,"pushed_at":"2025-09-17T18:37:13.000Z","size":1558,"stargazers_count":908,"open_issues_count":14,"forks_count":39,"subscribers_count":12,"default_branch":"main","last_synced_at":"2025-09-17T20:57:28.895Z","etag":null,"topics":["pytest","python","testing-tools","unit-testing"],"latest_commit_sha":null,"homepage":"https://dirty-equals.helpmanual.io","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/samuelcolvin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"samuelcolvin"}},"created_at":"2022-01-26T16:10:05.000Z","updated_at":"2025-09-17T18:35:09.000Z","dependencies_parsed_at":"2024-01-12T23:43:05.531Z","dependency_job_id":"b1ec0257-f6d7-4d8d-9041-c350d7e1d39c","html_url":"https://github.com/samuelcolvin/dirty-equals","commit_stats":{"total_commits":133,"total_committers":18,"mean_commits":7.388888888888889,"dds":"0.18796992481203012","last_synced_commit":"065162ac195964df7f5c47288561809e49deac48"},"previous_names":[],"tags_count":17,"template":false,"template_full_name":null,"purl":"pkg:github/samuelcolvin/dirty-equals","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/samuelcolvin","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/sbom","scorecard":{"id":798334,"data":{"date":"2025-08-11","repo":{"name":"github.com/samuelcolvin/dirty-equals","commit":"31ab5a3b6141106919058c19dc41f0d4e9107d22"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.8,"checks":[{"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":"Code-Review","score":4,"reason":"Found 13/30 approved changesets -- score normalized to 4","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":"Maintained","score":2,"reason":"2 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 2","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"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":"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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ci.yml:1","Warn: topLevel 'statuses' permission set to 'write': .github/workflows/upload-previews.yml:9","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":"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/ci.yml:118: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:122: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:125: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:148: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:165: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:168: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:177: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:185: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:37: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:48: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:57: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:59: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:65: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:74: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:77: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:94: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:106: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/upload-previews.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/upload-previews.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/upload-previews.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/upload-previews.yml/main?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:174","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:43","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:64","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:83","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:87","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:131","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:134","Warn: pipCommand not pinned by hash: .github/workflows/upload-previews.yml:22","Warn: pipCommand not pinned by hash: .github/workflows/upload-previews.yml:23","Info:   0 out of  13 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   7 third-party GitHubAction dependencies pinned","Info:   0 out of   9 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":"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":"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":"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":"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":"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":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"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":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/ci.yml:155"],"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":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 24 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-23T09:39:44.277Z","repository_id":36997180,"created_at":"2025-08-23T09:39:44.277Z","updated_at":"2025-08-23T09:39:44.277Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":276036255,"owners_count":25574197,"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-09-20T02:00:10.207Z","response_time":63,"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":"samuelcolvin","name":"Samuel Colvin","uuid":"4039449","kind":"user","description":"The Pydantic Stack: Pydantic Validation, Pydantic AI and Pydantic Logfire","email":"","website":"https://pydantic.dev/logfire","location":"London, United Kingdom","twitter":"samuel_colvin","company":"@pydantic","icon_url":"https://avatars.githubusercontent.com/u/4039449?u=42eb3b833047c8c4b4f647a031eaef148c16d93f\u0026v=4","repositories_count":296,"last_synced_at":"2025-09-08T05:45:27.927Z","metadata":{"has_sponsors_listing":true},"html_url":"https://github.com/samuelcolvin","funding_links":["https://github.com/sponsors/samuelcolvin"],"total_stars":7078,"followers":5829,"following":47,"created_at":"2022-11-05T13:50:51.563Z","updated_at":"2025-09-08T05:45:27.927Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/samuelcolvin","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/samuelcolvin/repositories"},"tags":[{"name":"v0.9.0","sha":"9e6f0be981f982fdaae16671ab14aefc3ab8664a","kind":"commit","published_at":"2025-01-11T23:20:42.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.9.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.9.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.9.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.9.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.9.0/manifests"},{"name":"v0.8.0","sha":"da29a2db8293c4c974f303974a6e5ffdb462c9b4","kind":"commit","published_at":"2024-08-13T19:53:17.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.8.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.8.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.8.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.8.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.8.0/manifests"},{"name":"v0.7.1-post0","sha":"5da8ed1cfea51c86c2585264d6bec8de2942d029","kind":"commit","published_at":"2023-11-15T04:29:18.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.7.1-post0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.7.1-post0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.7.1-post0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.1-post0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.1-post0/manifests"},{"name":"v0.7.1","sha":"78a992266989f2687eae48f58367906d895af285","kind":"commit","published_at":"2023-11-14T12:38:22.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.7.1","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.7.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.7.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.1/manifests"},{"name":"v0.7.0","sha":"87d4552f76f3a123cf0455f46f89091ade15614f","kind":"commit","published_at":"2023-09-03T14:17:15.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.7.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.7.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.7.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.0/manifests"},{"name":"v0.6.0","sha":"5577ce517e6ede343634e11dd5f397356aefd1d2","kind":"tag","published_at":"2023-04-27T23:55:39.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.6.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.6.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.6.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.6.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.6.0/manifests"},{"name":"v0.5.0","sha":"b65760701f6649b4f188c6a1294b3b91b2d2ba85","kind":"tag","published_at":"2022-08-30T20:05:41.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.5.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.5.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.5.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.5.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.5.0/manifests"},{"name":"v0.4","sha":"2d3c0e5ec4c92c1e336b231343c675f78ac746c8","kind":"commit","published_at":"2022-04-28T15:37:25.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.4","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.4","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.4","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.4/manifests"},{"name":"v0.3","sha":"c128d7cf3aa7d48696433be6b9945cc45fa6b046","kind":"commit","published_at":"2022-04-18T12:08:04.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.3","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.3","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.3","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.3/manifests"},{"name":"v0.2.1","sha":"6eb2932c40452ce7a62e0f3ba832d3712026b606","kind":"commit","published_at":"2022-03-30T11:09:12.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.2.1","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.2.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.2.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.2.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.2.1/manifests"},{"name":"v0.2","sha":"ae3881c6ff78ca608b97cb581d6a733bd974e102","kind":"commit","published_at":"2022-03-29T14:15:56.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.2","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.2/manifests"},{"name":"v0.1","sha":"450492e624f0b42c1addd20cac684b4614f1a78f","kind":"commit","published_at":"2022-02-25T16:37:37.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.1","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.1/manifests"},{"name":"v0.0.5","sha":"35cfacc7dac357cc5b3b8bdd64e2667a0f25691e","kind":"commit","published_at":"2022-02-24T21:26:02.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.0.5","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.0.5","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.0.5","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.5/manifests"},{"name":"v0.0.4","sha":"0a78e042ef9db11d7337966d2c29e4c43251eef1","kind":"commit","published_at":"2022-02-23T20:01:20.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.0.4","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.0.4","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.0.4","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.4/manifests"},{"name":"v0.0.3","sha":"c690abbb32e5893d3bb2634e1345ab30a2f46791","kind":"commit","published_at":"2022-02-22T19:38:42.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.0.3","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.0.3","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.0.3","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.3/manifests"},{"name":"v0.0.2","sha":"1a09de2bb95f4fa903f47adfe1a35dc1fcad8afb","kind":"commit","published_at":"2022-01-28T11:55:35.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.0.2","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.0.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.0.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.2/manifests"},{"name":"v0.0.1","sha":"9fae3910fed3925b9d950afb85ced13a7c3ba4aa","kind":"commit","published_at":"2022-01-27T22:49:09.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.0.1","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.0.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.1/manifests"}]},"repo_metadata_updated_at":"2025-12-11T14:21:26.820Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":0.0,"dependent_packages_count":0.0,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":100},"purl":"pkg:apk/alpine/py3-dirty-equals?arch=x86_64\u0026repository_url=https://pkgs.alpinelinux.org/packages?branch=v3.21","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/alpine/py3-dirty-equals","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/alpine/py3-dirty-equals","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/alpine/py3-dirty-equals/dependencies","status":null,"funding_links":["https://github.com/sponsors/samuelcolvin"],"critical":null,"issue_metadata":{"last_synced_at":"2025-08-31T10:20:53.334Z","issues_count":40,"pull_requests_count":76,"avg_time_to_close_issue":12946860.285714285,"avg_time_to_close_pull_request":2745231.0821917807,"issues_closed_count":28,"pull_requests_closed_count":73,"pull_request_authors_count":23,"issue_authors_count":22,"avg_comments_per_issue":3.275,"avg_comments_per_pull_request":1.7894736842105263,"merged_pull_requests_count":65,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":5,"past_year_pull_requests_count":8,"past_year_avg_time_to_close_issue":64540.0,"past_year_avg_time_to_close_pull_request":9876965.8,"past_year_issues_closed_count":1,"past_year_pull_requests_closed_count":5,"past_year_pull_request_authors_count":5,"past_year_issue_authors_count":5,"past_year_avg_comments_per_issue":1.0,"past_year_avg_comments_per_pull_request":0.875,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":5,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/issues","maintainers":[{"login":"samuelcolvin","count":50,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/samuelcolvin"},{"login":"15r10nk","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/15r10nk"}],"active_maintainers":[{"login":"samuelcolvin","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/samuelcolvin"}]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.21/packages/py3-dirty-equals/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.21/packages/py3-dirty-equals/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.21/packages/py3-dirty-equals/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.21/packages/py3-dirty-equals/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.21/packages/py3-dirty-equals/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.21/packages/py3-dirty-equals/codemeta","maintainers":[{"uuid":"alpine@juniorjpdj.pl","login":null,"name":"Jacek Pruciak","email":null,"url":"https://pkgs.alpinelinux.org/packages?maintainer=Jacek Pruciak","packages_count":7,"html_url":"https://pkgs.alpinelinux.org/packages?maintainer=Jacek Pruciak","role":null,"created_at":"2024-12-11T15:12:09.163Z","updated_at":"2024-12-11T15:12:09.163Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.21/maintainers/alpine@juniorjpdj.pl/packages"}],"registry":{"name":"alpine-v3.21","url":"https://pkgs.alpinelinux.org/packages?branch=v3.21","ecosystem":"alpine","default":false,"packages_count":25393,"maintainers_count":413,"namespaces_count":2,"keywords_count":0,"github":"alpinelinux","metadata":{"repos":["main","community"]},"icon_url":"https://github.com/alpinelinux.png","created_at":"2024-12-06T12:06:36.014Z","updated_at":"2026-04-27T18:20:22.676Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.21/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.21/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.21/namespaces"}},{"id":7604789,"name":"py3-dirty-equals-pyc","ecosystem":"alpine","description":"Precompiled Python bytecode for py3-dirty-equals","homepage":"https://github.com/samuelcolvin/dirty-equals","licenses":"MIT","normalized_licenses":["MIT"],"repository_url":"https://github.com/samuelcolvin/dirty-equals","keywords_array":[],"namespace":"community","versions_count":5,"first_release_published_at":"2023-04-19T22:10:20.000Z","latest_release_published_at":"2024-10-19T10:40:05.000Z","latest_release_number":"0.8.0-r0","last_synced_at":"2026-04-10T16:03:13.558Z","created_at":"2023-04-19T22:34:40.350Z","updated_at":"2026-04-10T16:03:13.558Z","registry_url":"https://pkgs.alpinelinux.org/package/edge/community/x86_64/py3-dirty-equals-pyc","install_command":"apk add py3-dirty-equals-pyc","documentation_url":null,"metadata":{"repository":"community","architecture":"x86_64"},"repo_metadata":{"id":36997180,"uuid":"452345017","full_name":"samuelcolvin/dirty-equals","owner":"samuelcolvin","description":"Doing dirty (but extremely useful) things with equals.","archived":false,"fork":false,"pushed_at":"2025-11-17T01:49:48.000Z","size":1593,"stargazers_count":942,"open_issues_count":16,"forks_count":43,"subscribers_count":9,"default_branch":"main","last_synced_at":"2025-12-10T23:50:26.551Z","etag":null,"topics":["pytest","python","testing-tools","unit-testing"],"latest_commit_sha":null,"homepage":"https://dirty-equals.helpmanual.io","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/samuelcolvin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"samuelcolvin"}},"created_at":"2022-01-26T16:10:05.000Z","updated_at":"2025-12-02T17:46:51.000Z","dependencies_parsed_at":"2024-01-12T23:43:05.531Z","dependency_job_id":"b1ec0257-f6d7-4d8d-9041-c350d7e1d39c","html_url":"https://github.com/samuelcolvin/dirty-equals","commit_stats":{"total_commits":133,"total_committers":18,"mean_commits":7.388888888888889,"dds":"0.18796992481203012","last_synced_commit":"065162ac195964df7f5c47288561809e49deac48"},"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/samuelcolvin/dirty-equals","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/samuelcolvin","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/sbom","scorecard":{"id":798334,"data":{"date":"2025-08-11","repo":{"name":"github.com/samuelcolvin/dirty-equals","commit":"31ab5a3b6141106919058c19dc41f0d4e9107d22"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.8,"checks":[{"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":"Code-Review","score":4,"reason":"Found 13/30 approved changesets -- score normalized to 4","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":"Maintained","score":2,"reason":"2 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 2","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"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":"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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ci.yml:1","Warn: topLevel 'statuses' permission set to 'write': .github/workflows/upload-previews.yml:9","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":"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/ci.yml:118: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:122: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:125: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:148: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:165: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:168: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:177: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:185: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:37: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:48: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:57: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:59: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:65: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:74: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:77: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:94: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:106: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/upload-previews.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/upload-previews.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/upload-previews.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/upload-previews.yml/main?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:174","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:43","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:64","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:83","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:87","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:131","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:134","Warn: pipCommand not pinned by hash: .github/workflows/upload-previews.yml:22","Warn: pipCommand not pinned by hash: .github/workflows/upload-previews.yml:23","Info:   0 out of  13 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   7 third-party GitHubAction dependencies pinned","Info:   0 out of   9 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":"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":"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":"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":"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":"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":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"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":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/ci.yml:155"],"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":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 24 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-23T09:39:44.277Z","repository_id":36997180,"created_at":"2025-08-23T09:39:44.277Z","updated_at":"2025-08-23T09:39:44.277Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":27653730,"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-12-11T02:00:11.302Z","response_time":56,"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"},"tags":[{"name":"v0.11.0","sha":"e8cd329dfb910a9696edc9cb793e35c2de6c502e","kind":"commit","published_at":"2025-11-17T01:44:58.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.11.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.11.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.11.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.11.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.11.0/manifests"},{"name":"v0.10.0","sha":"32f23d118cae651a91209fbaa651b0adada60c71","kind":"commit","published_at":"2025-09-19T16:03:15.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.10.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.10.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.10.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.10.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.10.0/manifests"},{"name":"v0.9.0","sha":"9e6f0be981f982fdaae16671ab14aefc3ab8664a","kind":"commit","published_at":"2025-01-11T23:20:42.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.9.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.9.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.9.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.9.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.9.0/manifests"},{"name":"v0.8.0","sha":"da29a2db8293c4c974f303974a6e5ffdb462c9b4","kind":"commit","published_at":"2024-08-13T19:53:17.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.8.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.8.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.8.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.8.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.8.0/manifests"},{"name":"v0.7.1-post0","sha":"5da8ed1cfea51c86c2585264d6bec8de2942d029","kind":"commit","published_at":"2023-11-15T04:29:18.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.7.1-post0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.7.1-post0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.7.1-post0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.1-post0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.1-post0/manifests"},{"name":"v0.7.1","sha":"78a992266989f2687eae48f58367906d895af285","kind":"commit","published_at":"2023-11-14T12:38:22.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.7.1","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.7.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.7.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.1/manifests"},{"name":"v0.7.0","sha":"87d4552f76f3a123cf0455f46f89091ade15614f","kind":"commit","published_at":"2023-09-03T14:17:15.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.7.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.7.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.7.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.0/manifests"},{"name":"v0.6.0","sha":"5577ce517e6ede343634e11dd5f397356aefd1d2","kind":"tag","published_at":"2023-04-27T23:55:39.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.6.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.6.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.6.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.6.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.6.0/manifests"},{"name":"v0.5.0","sha":"b65760701f6649b4f188c6a1294b3b91b2d2ba85","kind":"tag","published_at":"2022-08-30T20:05:41.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.5.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.5.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.5.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.5.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.5.0/manifests"},{"name":"v0.4","sha":"2d3c0e5ec4c92c1e336b231343c675f78ac746c8","kind":"commit","published_at":"2022-04-28T15:37:25.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.4","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.4","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.4","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.4/manifests"},{"name":"v0.3","sha":"c128d7cf3aa7d48696433be6b9945cc45fa6b046","kind":"commit","published_at":"2022-04-18T12:08:04.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.3","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.3","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.3","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.3/manifests"},{"name":"v0.2.1","sha":"6eb2932c40452ce7a62e0f3ba832d3712026b606","kind":"commit","published_at":"2022-03-30T11:09:12.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.2.1","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.2.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.2.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.2.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.2.1/manifests"},{"name":"v0.2","sha":"ae3881c6ff78ca608b97cb581d6a733bd974e102","kind":"commit","published_at":"2022-03-29T14:15:56.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.2","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.2/manifests"},{"name":"v0.1","sha":"450492e624f0b42c1addd20cac684b4614f1a78f","kind":"commit","published_at":"2022-02-25T16:37:37.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.1","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.1/manifests"},{"name":"v0.0.5","sha":"35cfacc7dac357cc5b3b8bdd64e2667a0f25691e","kind":"commit","published_at":"2022-02-24T21:26:02.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.0.5","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.0.5","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.0.5","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.5/manifests"},{"name":"v0.0.4","sha":"0a78e042ef9db11d7337966d2c29e4c43251eef1","kind":"commit","published_at":"2022-02-23T20:01:20.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.0.4","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.0.4","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.0.4","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.4/manifests"},{"name":"v0.0.3","sha":"c690abbb32e5893d3bb2634e1345ab30a2f46791","kind":"commit","published_at":"2022-02-22T19:38:42.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.0.3","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.0.3","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.0.3","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.3/manifests"},{"name":"v0.0.2","sha":"1a09de2bb95f4fa903f47adfe1a35dc1fcad8afb","kind":"commit","published_at":"2022-01-28T11:55:35.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.0.2","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.0.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.0.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.2/manifests"},{"name":"v0.0.1","sha":"9fae3910fed3925b9d950afb85ced13a7c3ba4aa","kind":"commit","published_at":"2022-01-27T22:49:09.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.0.1","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.0.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.1/manifests"}]},"repo_metadata_updated_at":"2025-12-11T14:21:17.414Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":0.0,"dependent_packages_count":14.250941315178945,"stargazers_count":11.989882592774359,"forks_count":22.715089282343616,"average":12.23897829757423},"purl":"pkg:apk/alpine/py3-dirty-equals-pyc?arch=x86_64\u0026repository_url=https://pkgs.alpinelinux.org/packages?branch=edge","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/alpine/py3-dirty-equals-pyc","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/alpine/py3-dirty-equals-pyc","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/alpine/py3-dirty-equals-pyc/dependencies","status":null,"funding_links":["https://github.com/sponsors/samuelcolvin"],"critical":null,"issue_metadata":{"last_synced_at":"2025-11-26T21:09:34.267Z","issues_count":40,"pull_requests_count":85,"avg_time_to_close_issue":9056859.0,"avg_time_to_close_pull_request":3034838.3205128205,"issues_closed_count":25,"pull_requests_closed_count":78,"pull_request_authors_count":24,"issue_authors_count":23,"avg_comments_per_issue":2.775,"avg_comments_per_pull_request":1.6,"merged_pull_requests_count":70,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":5,"past_year_pull_requests_count":8,"past_year_avg_time_to_close_issue":131984.0,"past_year_avg_time_to_close_pull_request":17296.8,"past_year_issues_closed_count":1,"past_year_pull_requests_closed_count":5,"past_year_pull_request_authors_count":4,"past_year_issue_authors_count":5,"past_year_avg_comments_per_issue":1.2,"past_year_avg_comments_per_pull_request":0.625,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":5,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/issues","maintainers":[{"login":"samuelcolvin","count":53,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/samuelcolvin"},{"login":"15r10nk","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/15r10nk"}],"active_maintainers":[{"login":"samuelcolvin","count":5,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/samuelcolvin"}]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-edge/packages/py3-dirty-equals-pyc/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-edge/packages/py3-dirty-equals-pyc/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-edge/packages/py3-dirty-equals-pyc/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-edge/packages/py3-dirty-equals-pyc/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-edge/packages/py3-dirty-equals-pyc/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-edge/packages/py3-dirty-equals-pyc/codemeta","maintainers":[{"uuid":"alpine@juniorjpdj.pl","login":null,"name":"Jacek Pruciak","email":null,"url":"https://pkgs.alpinelinux.org/packages?maintainer=Jacek Pruciak","packages_count":16,"html_url":"https://pkgs.alpinelinux.org/packages?maintainer=Jacek Pruciak","role":null,"created_at":"2023-04-20T05:17:04.353Z","updated_at":"2023-04-20T05:17:04.353Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-edge/maintainers/alpine@juniorjpdj.pl/packages"}],"registry":{"name":"alpine-edge","url":"https://pkgs.alpinelinux.org/packages?branch=edge","ecosystem":"alpine","default":false,"packages_count":39463,"maintainers_count":886,"namespaces_count":3,"keywords_count":0,"github":"alpinelinux","metadata":{"repos":["main","community","testing"]},"icon_url":"https://github.com/alpinelinux.png","created_at":"2023-01-31T17:27:50.616Z","updated_at":"2026-04-27T18:20:22.267Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-edge/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-edge/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-edge/namespaces"}},{"id":11765067,"name":"py3-dirty-equals","ecosystem":"alpine","description":"Doing dirty (but extremely useful) things with equals.","homepage":"https://github.com/samuelcolvin/dirty-equals","licenses":"MIT","normalized_licenses":["MIT"],"repository_url":"https://github.com/samuelcolvin/dirty-equals","keywords_array":[],"namespace":"community","versions_count":1,"first_release_published_at":"2024-10-19T10:40:05.000Z","latest_release_published_at":"2024-10-19T10:40:05.000Z","latest_release_number":"0.8.0-r0","last_synced_at":"2026-04-10T18:02:44.704Z","created_at":"2025-06-07T18:10:41.673Z","updated_at":"2026-04-10T18:02:44.704Z","registry_url":"https://pkgs.alpinelinux.org/package/v3.22/community/x86_64/py3-dirty-equals","install_command":"apk add py3-dirty-equals","documentation_url":null,"metadata":{"repository":"community","architecture":"x86_64"},"repo_metadata":{"id":36997180,"uuid":"452345017","full_name":"samuelcolvin/dirty-equals","owner":"samuelcolvin","description":"Doing dirty (but extremely useful) things with equals.","archived":false,"fork":false,"pushed_at":"2025-11-17T01:49:48.000Z","size":1593,"stargazers_count":942,"open_issues_count":16,"forks_count":43,"subscribers_count":9,"default_branch":"main","last_synced_at":"2025-12-10T23:50:26.551Z","etag":null,"topics":["pytest","python","testing-tools","unit-testing"],"latest_commit_sha":null,"homepage":"https://dirty-equals.helpmanual.io","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/samuelcolvin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"samuelcolvin"}},"created_at":"2022-01-26T16:10:05.000Z","updated_at":"2025-12-02T17:46:51.000Z","dependencies_parsed_at":"2024-01-12T23:43:05.531Z","dependency_job_id":"b1ec0257-f6d7-4d8d-9041-c350d7e1d39c","html_url":"https://github.com/samuelcolvin/dirty-equals","commit_stats":{"total_commits":133,"total_committers":18,"mean_commits":7.388888888888889,"dds":"0.18796992481203012","last_synced_commit":"065162ac195964df7f5c47288561809e49deac48"},"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/samuelcolvin/dirty-equals","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/samuelcolvin","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/sbom","scorecard":{"id":798334,"data":{"date":"2025-08-11","repo":{"name":"github.com/samuelcolvin/dirty-equals","commit":"31ab5a3b6141106919058c19dc41f0d4e9107d22"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.8,"checks":[{"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":"Code-Review","score":4,"reason":"Found 13/30 approved changesets -- score normalized to 4","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":"Maintained","score":2,"reason":"2 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 2","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"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":"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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ci.yml:1","Warn: topLevel 'statuses' permission set to 'write': .github/workflows/upload-previews.yml:9","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":"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/ci.yml:118: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:122: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:125: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:148: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:165: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:168: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:177: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:185: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:37: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:48: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:57: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:59: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:65: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:74: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:77: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:94: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:106: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/upload-previews.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/upload-previews.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/upload-previews.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/upload-previews.yml/main?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:174","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:43","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:64","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:83","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:87","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:131","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:134","Warn: pipCommand not pinned by hash: .github/workflows/upload-previews.yml:22","Warn: pipCommand not pinned by hash: .github/workflows/upload-previews.yml:23","Info:   0 out of  13 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   7 third-party GitHubAction dependencies pinned","Info:   0 out of   9 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":"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":"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":"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":"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":"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":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"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":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/ci.yml:155"],"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":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 24 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-23T09:39:44.277Z","repository_id":36997180,"created_at":"2025-08-23T09:39:44.277Z","updated_at":"2025-08-23T09:39:44.277Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":27666231,"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-12-11T02:00:11.302Z","response_time":56,"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":"samuelcolvin","name":"Samuel Colvin","uuid":"4039449","kind":"user","description":"The Pydantic Stack: Pydantic Validation, Pydantic AI and Pydantic Logfire","email":"samuel@pydantic.dev","website":"https://pydantic.dev/logfire","location":"London, United Kingdom","twitter":"samuel_colvin","company":"@pydantic","icon_url":"https://avatars.githubusercontent.com/u/4039449?u=42eb3b833047c8c4b4f647a031eaef148c16d93f\u0026v=4","repositories_count":300,"last_synced_at":"2025-10-30T09:42:32.057Z","metadata":{"has_sponsors_listing":true},"html_url":"https://github.com/samuelcolvin","funding_links":["https://github.com/sponsors/samuelcolvin"],"total_stars":7427,"followers":5901,"following":47,"created_at":"2022-11-05T13:50:51.563Z","updated_at":"2025-10-30T09:42:32.057Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/samuelcolvin","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/samuelcolvin/repositories"},"tags":[{"name":"v0.11.0","sha":"e8cd329dfb910a9696edc9cb793e35c2de6c502e","kind":"commit","published_at":"2025-11-17T01:44:58.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.11.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.11.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.11.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.11.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.11.0/manifests"},{"name":"v0.10.0","sha":"32f23d118cae651a91209fbaa651b0adada60c71","kind":"commit","published_at":"2025-09-19T16:03:15.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.10.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.10.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.10.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.10.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.10.0/manifests"},{"name":"v0.9.0","sha":"9e6f0be981f982fdaae16671ab14aefc3ab8664a","kind":"commit","published_at":"2025-01-11T23:20:42.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.9.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.9.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.9.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.9.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.9.0/manifests"},{"name":"v0.8.0","sha":"da29a2db8293c4c974f303974a6e5ffdb462c9b4","kind":"commit","published_at":"2024-08-13T19:53:17.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.8.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.8.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.8.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.8.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.8.0/manifests"},{"name":"v0.7.1-post0","sha":"5da8ed1cfea51c86c2585264d6bec8de2942d029","kind":"commit","published_at":"2023-11-15T04:29:18.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.7.1-post0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.7.1-post0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.7.1-post0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.1-post0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.1-post0/manifests"},{"name":"v0.7.1","sha":"78a992266989f2687eae48f58367906d895af285","kind":"commit","published_at":"2023-11-14T12:38:22.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.7.1","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.7.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.7.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.1/manifests"},{"name":"v0.7.0","sha":"87d4552f76f3a123cf0455f46f89091ade15614f","kind":"commit","published_at":"2023-09-03T14:17:15.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.7.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.7.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.7.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.0/manifests"},{"name":"v0.6.0","sha":"5577ce517e6ede343634e11dd5f397356aefd1d2","kind":"tag","published_at":"2023-04-27T23:55:39.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.6.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.6.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.6.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.6.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.6.0/manifests"},{"name":"v0.5.0","sha":"b65760701f6649b4f188c6a1294b3b91b2d2ba85","kind":"tag","published_at":"2022-08-30T20:05:41.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.5.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.5.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.5.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.5.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.5.0/manifests"},{"name":"v0.4","sha":"2d3c0e5ec4c92c1e336b231343c675f78ac746c8","kind":"commit","published_at":"2022-04-28T15:37:25.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.4","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.4","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.4","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.4/manifests"},{"name":"v0.3","sha":"c128d7cf3aa7d48696433be6b9945cc45fa6b046","kind":"commit","published_at":"2022-04-18T12:08:04.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.3","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.3","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.3","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.3/manifests"},{"name":"v0.2.1","sha":"6eb2932c40452ce7a62e0f3ba832d3712026b606","kind":"commit","published_at":"2022-03-30T11:09:12.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.2.1","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.2.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.2.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.2.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.2.1/manifests"},{"name":"v0.2","sha":"ae3881c6ff78ca608b97cb581d6a733bd974e102","kind":"commit","published_at":"2022-03-29T14:15:56.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.2","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.2/manifests"},{"name":"v0.1","sha":"450492e624f0b42c1addd20cac684b4614f1a78f","kind":"commit","published_at":"2022-02-25T16:37:37.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.1","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.1/manifests"},{"name":"v0.0.5","sha":"35cfacc7dac357cc5b3b8bdd64e2667a0f25691e","kind":"commit","published_at":"2022-02-24T21:26:02.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.0.5","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.0.5","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.0.5","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.5/manifests"},{"name":"v0.0.4","sha":"0a78e042ef9db11d7337966d2c29e4c43251eef1","kind":"commit","published_at":"2022-02-23T20:01:20.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.0.4","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.0.4","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.0.4","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.4/manifests"},{"name":"v0.0.3","sha":"c690abbb32e5893d3bb2634e1345ab30a2f46791","kind":"commit","published_at":"2022-02-22T19:38:42.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.0.3","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.0.3","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.0.3","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.3/manifests"},{"name":"v0.0.2","sha":"1a09de2bb95f4fa903f47adfe1a35dc1fcad8afb","kind":"commit","published_at":"2022-01-28T11:55:35.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.0.2","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.0.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.0.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.2/manifests"},{"name":"v0.0.1","sha":"9fae3910fed3925b9d950afb85ced13a7c3ba4aa","kind":"commit","published_at":"2022-01-27T22:49:09.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.0.1","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.0.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.1/manifests"}]},"repo_metadata_updated_at":"2025-12-11T14:22:50.673Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":0.0,"dependent_packages_count":0.0,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":100},"purl":"pkg:apk/alpine/py3-dirty-equals?arch=x86_64\u0026repository_url=https://pkgs.alpinelinux.org/packages?branch=v3.22","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/alpine/py3-dirty-equals","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/alpine/py3-dirty-equals","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/alpine/py3-dirty-equals/dependencies","status":null,"funding_links":["https://github.com/sponsors/samuelcolvin"],"critical":null,"issue_metadata":{"last_synced_at":"2025-11-26T21:09:34.267Z","issues_count":40,"pull_requests_count":85,"avg_time_to_close_issue":9056859.0,"avg_time_to_close_pull_request":3034838.3205128205,"issues_closed_count":25,"pull_requests_closed_count":78,"pull_request_authors_count":24,"issue_authors_count":23,"avg_comments_per_issue":2.775,"avg_comments_per_pull_request":1.6,"merged_pull_requests_count":70,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":5,"past_year_pull_requests_count":8,"past_year_avg_time_to_close_issue":131984.0,"past_year_avg_time_to_close_pull_request":17296.8,"past_year_issues_closed_count":1,"past_year_pull_requests_closed_count":5,"past_year_pull_request_authors_count":4,"past_year_issue_authors_count":5,"past_year_avg_comments_per_issue":1.2,"past_year_avg_comments_per_pull_request":0.625,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":5,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/issues","maintainers":[{"login":"samuelcolvin","count":53,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/samuelcolvin"},{"login":"15r10nk","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/15r10nk"}],"active_maintainers":[{"login":"samuelcolvin","count":5,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/samuelcolvin"}]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.22/packages/py3-dirty-equals/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.22/packages/py3-dirty-equals/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.22/packages/py3-dirty-equals/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.22/packages/py3-dirty-equals/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.22/packages/py3-dirty-equals/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.22/packages/py3-dirty-equals/codemeta","maintainers":[{"uuid":"alpine@juniorjpdj.pl","login":null,"name":"Jacek Pruciak","email":null,"url":"https://pkgs.alpinelinux.org/packages?maintainer=Jacek Pruciak","packages_count":7,"html_url":"https://pkgs.alpinelinux.org/packages?maintainer=Jacek Pruciak","role":null,"created_at":"2025-06-08T14:47:48.692Z","updated_at":"2025-06-08T14:47:48.692Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.22/maintainers/alpine@juniorjpdj.pl/packages"}],"registry":{"name":"alpine-v3.22","url":"https://pkgs.alpinelinux.org/packages?branch=v3.22","ecosystem":"alpine","default":false,"packages_count":26322,"maintainers_count":422,"namespaces_count":2,"keywords_count":0,"github":"alpinelinux","metadata":{"repos":["main","community"]},"icon_url":"https://github.com/alpinelinux.png","created_at":"2025-06-05T10:49:56.987Z","updated_at":"2026-04-27T18:20:22.527Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.22/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.22/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.22/namespaces"}},{"id":8676575,"name":"py3-dirty-equals-pyc","ecosystem":"alpine","description":"Precompiled Python bytecode for py3-dirty-equals","homepage":"https://github.com/samuelcolvin/dirty-equals","licenses":"MIT","normalized_licenses":["MIT"],"repository_url":"https://github.com/samuelcolvin/dirty-equals","keywords_array":[],"namespace":"community","versions_count":1,"first_release_published_at":"2023-07-18T20:29:08.000Z","latest_release_published_at":"2023-07-18T20:29:08.000Z","latest_release_number":"0.6.0-r0","last_synced_at":"2026-04-10T18:04:15.117Z","created_at":"2023-12-20T10:26:58.547Z","updated_at":"2026-04-10T18:04:15.118Z","registry_url":"https://pkgs.alpinelinux.org/package/v3.19/community/x86_64/py3-dirty-equals-pyc","install_command":"apk add py3-dirty-equals-pyc","documentation_url":null,"metadata":{"repository":"community","architecture":"x86_64"},"repo_metadata":{"id":36997180,"uuid":"452345017","full_name":"samuelcolvin/dirty-equals","owner":"samuelcolvin","description":"Doing dirty (but extremely useful) things with equals.","archived":false,"fork":false,"pushed_at":"2025-11-17T01:49:48.000Z","size":1593,"stargazers_count":942,"open_issues_count":16,"forks_count":43,"subscribers_count":9,"default_branch":"main","last_synced_at":"2025-12-10T23:50:26.551Z","etag":null,"topics":["pytest","python","testing-tools","unit-testing"],"latest_commit_sha":null,"homepage":"https://dirty-equals.helpmanual.io","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/samuelcolvin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"samuelcolvin"}},"created_at":"2022-01-26T16:10:05.000Z","updated_at":"2025-12-02T17:46:51.000Z","dependencies_parsed_at":"2024-01-12T23:43:05.531Z","dependency_job_id":"b1ec0257-f6d7-4d8d-9041-c350d7e1d39c","html_url":"https://github.com/samuelcolvin/dirty-equals","commit_stats":{"total_commits":133,"total_committers":18,"mean_commits":7.388888888888889,"dds":"0.18796992481203012","last_synced_commit":"065162ac195964df7f5c47288561809e49deac48"},"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/samuelcolvin/dirty-equals","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/samuelcolvin","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/sbom","scorecard":{"id":798334,"data":{"date":"2025-08-11","repo":{"name":"github.com/samuelcolvin/dirty-equals","commit":"31ab5a3b6141106919058c19dc41f0d4e9107d22"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.8,"checks":[{"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":"Code-Review","score":4,"reason":"Found 13/30 approved changesets -- score normalized to 4","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":"Maintained","score":2,"reason":"2 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 2","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"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":"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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ci.yml:1","Warn: topLevel 'statuses' permission set to 'write': .github/workflows/upload-previews.yml:9","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":"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/ci.yml:118: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:122: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:125: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:148: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:165: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:168: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:177: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:185: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:37: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:48: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:57: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:59: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:65: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:74: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:77: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:94: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:106: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/upload-previews.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/upload-previews.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/upload-previews.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/upload-previews.yml/main?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:174","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:43","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:64","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:83","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:87","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:131","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:134","Warn: pipCommand not pinned by hash: .github/workflows/upload-previews.yml:22","Warn: pipCommand not pinned by hash: .github/workflows/upload-previews.yml:23","Info:   0 out of  13 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   7 third-party GitHubAction dependencies pinned","Info:   0 out of   9 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":"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":"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":"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":"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":"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":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"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":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/ci.yml:155"],"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":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 24 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-23T09:39:44.277Z","repository_id":36997180,"created_at":"2025-08-23T09:39:44.277Z","updated_at":"2025-08-23T09:39:44.277Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":27653730,"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-12-11T02:00:11.302Z","response_time":56,"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"},"tags":[{"name":"v0.11.0","sha":"e8cd329dfb910a9696edc9cb793e35c2de6c502e","kind":"commit","published_at":"2025-11-17T01:44:58.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.11.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.11.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.11.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.11.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.11.0/manifests"},{"name":"v0.10.0","sha":"32f23d118cae651a91209fbaa651b0adada60c71","kind":"commit","published_at":"2025-09-19T16:03:15.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.10.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.10.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.10.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.10.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.10.0/manifests"},{"name":"v0.9.0","sha":"9e6f0be981f982fdaae16671ab14aefc3ab8664a","kind":"commit","published_at":"2025-01-11T23:20:42.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.9.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.9.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.9.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.9.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.9.0/manifests"},{"name":"v0.8.0","sha":"da29a2db8293c4c974f303974a6e5ffdb462c9b4","kind":"commit","published_at":"2024-08-13T19:53:17.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.8.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.8.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.8.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.8.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.8.0/manifests"},{"name":"v0.7.1-post0","sha":"5da8ed1cfea51c86c2585264d6bec8de2942d029","kind":"commit","published_at":"2023-11-15T04:29:18.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.7.1-post0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.7.1-post0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.7.1-post0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.1-post0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.1-post0/manifests"},{"name":"v0.7.1","sha":"78a992266989f2687eae48f58367906d895af285","kind":"commit","published_at":"2023-11-14T12:38:22.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.7.1","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.7.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.7.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.1/manifests"},{"name":"v0.7.0","sha":"87d4552f76f3a123cf0455f46f89091ade15614f","kind":"commit","published_at":"2023-09-03T14:17:15.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.7.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.7.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.7.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.0/manifests"},{"name":"v0.6.0","sha":"5577ce517e6ede343634e11dd5f397356aefd1d2","kind":"tag","published_at":"2023-04-27T23:55:39.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.6.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.6.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.6.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.6.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.6.0/manifests"},{"name":"v0.5.0","sha":"b65760701f6649b4f188c6a1294b3b91b2d2ba85","kind":"tag","published_at":"2022-08-30T20:05:41.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.5.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.5.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.5.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.5.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.5.0/manifests"},{"name":"v0.4","sha":"2d3c0e5ec4c92c1e336b231343c675f78ac746c8","kind":"commit","published_at":"2022-04-28T15:37:25.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.4","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.4","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.4","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.4/manifests"},{"name":"v0.3","sha":"c128d7cf3aa7d48696433be6b9945cc45fa6b046","kind":"commit","published_at":"2022-04-18T12:08:04.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.3","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.3","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.3","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.3/manifests"},{"name":"v0.2.1","sha":"6eb2932c40452ce7a62e0f3ba832d3712026b606","kind":"commit","published_at":"2022-03-30T11:09:12.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.2.1","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.2.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.2.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.2.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.2.1/manifests"},{"name":"v0.2","sha":"ae3881c6ff78ca608b97cb581d6a733bd974e102","kind":"commit","published_at":"2022-03-29T14:15:56.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.2","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.2/manifests"},{"name":"v0.1","sha":"450492e624f0b42c1addd20cac684b4614f1a78f","kind":"commit","published_at":"2022-02-25T16:37:37.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.1","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.1/manifests"},{"name":"v0.0.5","sha":"35cfacc7dac357cc5b3b8bdd64e2667a0f25691e","kind":"commit","published_at":"2022-02-24T21:26:02.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.0.5","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.0.5","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.0.5","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.5/manifests"},{"name":"v0.0.4","sha":"0a78e042ef9db11d7337966d2c29e4c43251eef1","kind":"commit","published_at":"2022-02-23T20:01:20.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.0.4","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.0.4","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.0.4","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.4/manifests"},{"name":"v0.0.3","sha":"c690abbb32e5893d3bb2634e1345ab30a2f46791","kind":"commit","published_at":"2022-02-22T19:38:42.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.0.3","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.0.3","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.0.3","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.3/manifests"},{"name":"v0.0.2","sha":"1a09de2bb95f4fa903f47adfe1a35dc1fcad8afb","kind":"commit","published_at":"2022-01-28T11:55:35.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.0.2","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.0.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.0.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.2/manifests"},{"name":"v0.0.1","sha":"9fae3910fed3925b9d950afb85ced13a7c3ba4aa","kind":"commit","published_at":"2022-01-27T22:49:09.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.0.1","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.0.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.1/manifests"}]},"repo_metadata_updated_at":"2025-12-11T14:21:17.466Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":0.0,"dependent_packages_count":0.0,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":100},"purl":"pkg:apk/alpine/py3-dirty-equals-pyc?arch=x86_64\u0026repository_url=https://pkgs.alpinelinux.org/packages?branch=v3.19","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/alpine/py3-dirty-equals-pyc","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/alpine/py3-dirty-equals-pyc","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/alpine/py3-dirty-equals-pyc/dependencies","status":null,"funding_links":["https://github.com/sponsors/samuelcolvin"],"critical":null,"issue_metadata":{"last_synced_at":"2025-11-26T21:09:34.267Z","issues_count":40,"pull_requests_count":85,"avg_time_to_close_issue":9056859.0,"avg_time_to_close_pull_request":3034838.3205128205,"issues_closed_count":25,"pull_requests_closed_count":78,"pull_request_authors_count":24,"issue_authors_count":23,"avg_comments_per_issue":2.775,"avg_comments_per_pull_request":1.6,"merged_pull_requests_count":70,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":5,"past_year_pull_requests_count":8,"past_year_avg_time_to_close_issue":131984.0,"past_year_avg_time_to_close_pull_request":17296.8,"past_year_issues_closed_count":1,"past_year_pull_requests_closed_count":5,"past_year_pull_request_authors_count":4,"past_year_issue_authors_count":5,"past_year_avg_comments_per_issue":1.2,"past_year_avg_comments_per_pull_request":0.625,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":5,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/issues","maintainers":[{"login":"samuelcolvin","count":53,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/samuelcolvin"},{"login":"15r10nk","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/15r10nk"}],"active_maintainers":[{"login":"samuelcolvin","count":5,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/samuelcolvin"}]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.19/packages/py3-dirty-equals-pyc/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.19/packages/py3-dirty-equals-pyc/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.19/packages/py3-dirty-equals-pyc/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.19/packages/py3-dirty-equals-pyc/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.19/packages/py3-dirty-equals-pyc/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.19/packages/py3-dirty-equals-pyc/codemeta","maintainers":[{"uuid":"alpine@juniorjpdj.pl","login":null,"name":"JuniorJPDJ","email":null,"url":"https://pkgs.alpinelinux.org/packages?maintainer=JuniorJPDJ","packages_count":9,"html_url":"https://pkgs.alpinelinux.org/packages?maintainer=JuniorJPDJ","role":null,"created_at":"2026-03-03T21:59:33.918Z","updated_at":"2026-03-03T21:59:33.918Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.19/maintainers/alpine@juniorjpdj.pl/packages"}],"registry":{"name":"alpine-v3.19","url":"https://pkgs.alpinelinux.org/packages?branch=v3.19","ecosystem":"alpine","default":false,"packages_count":23031,"maintainers_count":392,"namespaces_count":2,"keywords_count":0,"github":"alpinelinux","metadata":{"repos":["main","community"]},"icon_url":"https://github.com/alpinelinux.png","created_at":"2023-12-20T09:51:56.346Z","updated_at":"2026-04-27T18:20:23.384Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.19/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.19/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.19/namespaces"}},{"id":7778496,"name":"py3-dirty-equals","ecosystem":"alpine","description":"Doing dirty (but extremely useful) things with equals.","homepage":"https://github.com/samuelcolvin/dirty-equals","licenses":"MIT","normalized_licenses":["MIT"],"repository_url":"https://github.com/samuelcolvin/dirty-equals","keywords_array":[],"namespace":"community","versions_count":1,"first_release_published_at":"2023-04-19T22:10:20.000Z","latest_release_published_at":"2023-04-19T22:10:20.000Z","latest_release_number":"0.5.0-r2","last_synced_at":"2026-04-10T18:04:04.450Z","created_at":"2023-05-22T14:18:38.411Z","updated_at":"2026-04-10T18:04:04.450Z","registry_url":"https://pkgs.alpinelinux.org/package/v3.18/community/x86_64/py3-dirty-equals","install_command":"apk add py3-dirty-equals","documentation_url":null,"metadata":{"repository":"community","architecture":"x86_64"},"repo_metadata":{"id":36997180,"uuid":"452345017","full_name":"samuelcolvin/dirty-equals","owner":"samuelcolvin","description":"Doing dirty (but extremely useful) things with equals.","archived":false,"fork":false,"pushed_at":"2025-11-17T01:49:48.000Z","size":1593,"stargazers_count":942,"open_issues_count":16,"forks_count":43,"subscribers_count":9,"default_branch":"main","last_synced_at":"2025-12-10T23:50:26.551Z","etag":null,"topics":["pytest","python","testing-tools","unit-testing"],"latest_commit_sha":null,"homepage":"https://dirty-equals.helpmanual.io","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/samuelcolvin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"samuelcolvin"}},"created_at":"2022-01-26T16:10:05.000Z","updated_at":"2025-12-02T17:46:51.000Z","dependencies_parsed_at":"2024-01-12T23:43:05.531Z","dependency_job_id":"b1ec0257-f6d7-4d8d-9041-c350d7e1d39c","html_url":"https://github.com/samuelcolvin/dirty-equals","commit_stats":{"total_commits":133,"total_committers":18,"mean_commits":7.388888888888889,"dds":"0.18796992481203012","last_synced_commit":"065162ac195964df7f5c47288561809e49deac48"},"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/samuelcolvin/dirty-equals","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/samuelcolvin","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/sbom","scorecard":{"id":798334,"data":{"date":"2025-08-11","repo":{"name":"github.com/samuelcolvin/dirty-equals","commit":"31ab5a3b6141106919058c19dc41f0d4e9107d22"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.8,"checks":[{"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":"Code-Review","score":4,"reason":"Found 13/30 approved changesets -- score normalized to 4","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":"Maintained","score":2,"reason":"2 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 2","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"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":"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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ci.yml:1","Warn: topLevel 'statuses' permission set to 'write': .github/workflows/upload-previews.yml:9","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":"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/ci.yml:118: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:122: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:125: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:148: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:165: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:168: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:177: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:185: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:37: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:48: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:57: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:59: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:65: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:74: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:77: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:94: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:106: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/upload-previews.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/upload-previews.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/upload-previews.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/upload-previews.yml/main?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:174","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:43","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:64","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:83","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:87","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:131","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:134","Warn: pipCommand not pinned by hash: .github/workflows/upload-previews.yml:22","Warn: pipCommand not pinned by hash: .github/workflows/upload-previews.yml:23","Info:   0 out of  13 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   7 third-party GitHubAction dependencies pinned","Info:   0 out of   9 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":"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":"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":"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":"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":"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":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"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":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/ci.yml:155"],"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":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 24 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-23T09:39:44.277Z","repository_id":36997180,"created_at":"2025-08-23T09:39:44.277Z","updated_at":"2025-08-23T09:39:44.277Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":27666232,"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-12-11T02:00:11.302Z","response_time":56,"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":"samuelcolvin","name":"Samuel Colvin","uuid":"4039449","kind":"user","description":"The Pydantic Stack: Pydantic Validation, Pydantic AI and Pydantic Logfire","email":"samuel@pydantic.dev","website":"https://pydantic.dev/logfire","location":"London, United Kingdom","twitter":"samuel_colvin","company":"@pydantic","icon_url":"https://avatars.githubusercontent.com/u/4039449?u=42eb3b833047c8c4b4f647a031eaef148c16d93f\u0026v=4","repositories_count":300,"last_synced_at":"2025-10-30T09:42:32.057Z","metadata":{"has_sponsors_listing":true},"html_url":"https://github.com/samuelcolvin","funding_links":["https://github.com/sponsors/samuelcolvin"],"total_stars":7427,"followers":5901,"following":47,"created_at":"2022-11-05T13:50:51.563Z","updated_at":"2025-10-30T09:42:32.057Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/samuelcolvin","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/samuelcolvin/repositories"},"tags":[]},"repo_metadata_updated_at":"2025-12-11T14:22:56.613Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":0.0,"dependent_packages_count":0.0,"stargazers_count":10.019450401476236,"forks_count":20.178544710986984,"docker_downloads_count":null,"average":7.5494987781158045},"purl":"pkg:apk/alpine/py3-dirty-equals?arch=x86_64\u0026repository_url=https://pkgs.alpinelinux.org/packages?branch=v3.18","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/alpine/py3-dirty-equals","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/alpine/py3-dirty-equals","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/alpine/py3-dirty-equals/dependencies","status":null,"funding_links":["https://github.com/sponsors/samuelcolvin"],"critical":null,"issue_metadata":{"last_synced_at":"2025-11-26T21:09:34.267Z","issues_count":40,"pull_requests_count":85,"avg_time_to_close_issue":9056859.0,"avg_time_to_close_pull_request":3034838.3205128205,"issues_closed_count":25,"pull_requests_closed_count":78,"pull_request_authors_count":24,"issue_authors_count":23,"avg_comments_per_issue":2.775,"avg_comments_per_pull_request":1.6,"merged_pull_requests_count":70,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":5,"past_year_pull_requests_count":8,"past_year_avg_time_to_close_issue":131984.0,"past_year_avg_time_to_close_pull_request":17296.8,"past_year_issues_closed_count":1,"past_year_pull_requests_closed_count":5,"past_year_pull_request_authors_count":4,"past_year_issue_authors_count":5,"past_year_avg_comments_per_issue":1.2,"past_year_avg_comments_per_pull_request":0.625,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":5,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/issues","maintainers":[{"login":"samuelcolvin","count":53,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/samuelcolvin"},{"login":"15r10nk","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/15r10nk"}],"active_maintainers":[{"login":"samuelcolvin","count":5,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/samuelcolvin"}]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.18/packages/py3-dirty-equals/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.18/packages/py3-dirty-equals/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.18/packages/py3-dirty-equals/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.18/packages/py3-dirty-equals/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.18/packages/py3-dirty-equals/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.18/packages/py3-dirty-equals/codemeta","maintainers":[{"uuid":"alpine@juniorjpdj.pl","login":null,"name":"JuniorJPDJ","email":null,"url":"https://pkgs.alpinelinux.org/packages?maintainer=JuniorJPDJ","packages_count":9,"html_url":"https://pkgs.alpinelinux.org/packages?maintainer=JuniorJPDJ","role":null,"created_at":"2023-05-23T07:07:05.652Z","updated_at":"2023-05-23T07:07:05.652Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.18/maintainers/alpine@juniorjpdj.pl/packages"}],"registry":{"name":"alpine-v3.18","url":"https://pkgs.alpinelinux.org/packages?branch=v3.18","ecosystem":"alpine","default":false,"packages_count":20068,"maintainers_count":367,"namespaces_count":2,"keywords_count":0,"github":"alpinelinux","metadata":{"repos":["main","community"]},"icon_url":"https://github.com/alpinelinux.png","created_at":"2023-05-22T10:43:30.622Z","updated_at":"2026-04-27T18:20:23.557Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.18/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.18/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.18/namespaces"}},{"id":13472661,"name":"dirty-equals","ecosystem":"ubuntu","description":null,"homepage":"https://github.com/samuelcolvin/dirty-equals","licenses":null,"normalized_licenses":[],"repository_url":"https://github.com/samuelcolvin/dirty-equals","keywords_array":["universe/misc"],"namespace":"universe","versions_count":1,"first_release_published_at":"2026-02-09T23:43:49.906Z","latest_release_published_at":"2026-02-09T23:43:49.906Z","latest_release_number":"0.6.0-1","last_synced_at":"2026-03-10T00:24:37.403Z","created_at":"2026-02-09T23:43:49.645Z","updated_at":"2026-03-10T00:32:07.718Z","registry_url":"https://launchpad.net/ubuntu/+source/dirty-equals","install_command":"apt-get install dirty-equals","documentation_url":null,"metadata":{"component":"universe","architecture":"all","priority":"optional","binary":"python3-dirty-equals","standards_version":"4.6.2","maintainer":"Debian Python Team \u003cteam+python@tracker.debian.org\u003e","build_depends":"debhelper-compat (= 13), dh-sequence-python3, pybuild-plugin-pyproject, python3-all, python3-hatchling, python3-pydantic, python3-pytest \u003c!nocheck\u003e, python3-tz","build_depends_indep":null,"build_depends_arch":null},"repo_metadata":{},"repo_metadata_updated_at":null,"dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":0.0,"dependent_packages_count":0.0,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":100},"purl":"pkg:deb/ubuntu/dirty-equals?arch=source\u0026distro=ubuntu-23.10\u0026repository_url=https://launchpad.net/ubuntu/mantic","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/ubuntu/dirty-equals","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/ubuntu/dirty-equals","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/ubuntu/dirty-equals/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":null,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-23.10/packages/dirty-equals/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-23.10/packages/dirty-equals/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-23.10/packages/dirty-equals/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-23.10/packages/dirty-equals/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-23.10/packages/dirty-equals/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-23.10/packages/dirty-equals/codemeta","maintainers":[],"registry":{"name":"ubuntu-23.10","url":"https://launchpad.net/ubuntu/mantic","ecosystem":"ubuntu","default":false,"packages_count":36642,"maintainers_count":0,"namespaces_count":4,"keywords_count":0,"github":"ubuntu","metadata":{"codename":"mantic","mirror":"http://old-releases.ubuntu.com/ubuntu"},"icon_url":"https://github.com/ubuntu.png","created_at":"2026-02-04T11:01:48.636Z","updated_at":"2026-04-27T18:20:38.051Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-23.10/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-23.10/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/ubuntu-23.10/namespaces"}},{"id":13679986,"name":"dirty-equals","ecosystem":"debian","description":null,"homepage":"https://github.com/samuelcolvin/dirty-equals","licenses":null,"normalized_licenses":[],"repository_url":"https://github.com/samuelcolvin/dirty-equals","keywords_array":["misc"],"namespace":"main","versions_count":1,"first_release_published_at":"2026-02-12T16:51:22.359Z","latest_release_published_at":"2026-02-12T16:51:22.359Z","latest_release_number":"0.6.0-1","last_synced_at":"2026-03-12T18:10:59.708Z","created_at":"2026-02-12T16:51:21.808Z","updated_at":"2026-03-12T18:10:59.708Z","registry_url":"https://tracker.debian.org/pkg/dirty-equals","install_command":"apt-get install dirty-equals","documentation_url":"https://packages.debian.org/bookworm/dirty-equals","metadata":{"component":"main","architecture":"all","priority":"optional","binary":"python3-dirty-equals","standards_version":"4.6.2","maintainer":"Debian Python Team \u003cteam+python@tracker.debian.org\u003e","build_depends":"debhelper-compat (= 13), dh-sequence-python3, pybuild-plugin-pyproject, python3-all, python3-hatchling, python3-pydantic, python3-pytest \u003c!nocheck\u003e, python3-tz","build_depends_indep":null,"build_depends_arch":null},"repo_metadata":{},"repo_metadata_updated_at":"2026-02-12T16:51:23.016Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":0.0,"dependent_packages_count":0.0,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":100},"purl":"pkg:deb/debian/dirty-equals?arch=source\u0026distro=debian-12","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/debian/dirty-equals","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/debian/dirty-equals","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/debian/dirty-equals/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":null,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/debian-12/packages/dirty-equals/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/debian-12/packages/dirty-equals/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/debian-12/packages/dirty-equals/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/debian-12/packages/dirty-equals/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/debian-12/packages/dirty-equals/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/debian-12/packages/dirty-equals/codemeta","maintainers":[],"registry":{"name":"debian-12","url":"https://packages.debian.org/bookworm","ecosystem":"debian","default":true,"packages_count":34734,"maintainers_count":0,"namespaces_count":4,"keywords_count":0,"github":"debian","metadata":{"codename":"bookworm"},"icon_url":"https://github.com/debian.png","created_at":"2026-02-04T11:01:49.459Z","updated_at":"2026-04-27T18:20:38.992Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/debian-12/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/debian-12/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/debian-12/namespaces"}},{"id":12139372,"name":"dirty-equals","ecosystem":"conda","description":"dirty-equals is a python library that (mis)uses the __eq__ method to make python code (generally unit tests) more declarative and therefore easier to read and write.","homepage":"https://dirty-equals.helpmanual.io","licenses":"MIT","normalized_licenses":["MIT"],"repository_url":"https://github.com/samuelcolvin/dirty-equals","keywords_array":[],"namespace":null,"versions_count":1,"first_release_published_at":"2025-09-24T12:30:13.000Z","latest_release_published_at":"2025-09-24T12:30:13.000Z","latest_release_number":"0.10.0","last_synced_at":"2026-04-10T20:00:24.074Z","created_at":"2025-09-24T13:06:39.433Z","updated_at":"2026-04-10T20:00:24.074Z","registry_url":"https://anaconda.org/anaconda/dirty-equals","install_command":"conda install -c anaconda dirty-equals","documentation_url":null,"metadata":{},"repo_metadata":{"id":36997180,"uuid":"452345017","full_name":"samuelcolvin/dirty-equals","owner":"samuelcolvin","description":"Doing dirty (but extremely useful) things with equals.","archived":false,"fork":false,"pushed_at":"2025-11-17T01:49:48.000Z","size":1593,"stargazers_count":942,"open_issues_count":16,"forks_count":43,"subscribers_count":9,"default_branch":"main","last_synced_at":"2025-12-10T23:50:26.551Z","etag":null,"topics":["pytest","python","testing-tools","unit-testing"],"latest_commit_sha":null,"homepage":"https://dirty-equals.helpmanual.io","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/samuelcolvin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"samuelcolvin"}},"created_at":"2022-01-26T16:10:05.000Z","updated_at":"2025-12-02T17:46:51.000Z","dependencies_parsed_at":"2024-01-12T23:43:05.531Z","dependency_job_id":"b1ec0257-f6d7-4d8d-9041-c350d7e1d39c","html_url":"https://github.com/samuelcolvin/dirty-equals","commit_stats":{"total_commits":133,"total_committers":18,"mean_commits":7.388888888888889,"dds":"0.18796992481203012","last_synced_commit":"065162ac195964df7f5c47288561809e49deac48"},"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/samuelcolvin/dirty-equals","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/samuelcolvin","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/sbom","scorecard":{"id":798334,"data":{"date":"2025-08-11","repo":{"name":"github.com/samuelcolvin/dirty-equals","commit":"31ab5a3b6141106919058c19dc41f0d4e9107d22"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.8,"checks":[{"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":"Code-Review","score":4,"reason":"Found 13/30 approved changesets -- score normalized to 4","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":"Maintained","score":2,"reason":"2 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 2","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"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":"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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ci.yml:1","Warn: topLevel 'statuses' permission set to 'write': .github/workflows/upload-previews.yml:9","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":"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/ci.yml:118: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:122: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:125: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:148: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:165: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:168: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:177: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:185: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:37: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:48: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:57: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:59: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:65: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:74: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:77: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:94: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:106: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/upload-previews.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/upload-previews.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/upload-previews.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/upload-previews.yml/main?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:174","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:43","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:64","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:83","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:87","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:131","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:134","Warn: pipCommand not pinned by hash: .github/workflows/upload-previews.yml:22","Warn: pipCommand not pinned by hash: .github/workflows/upload-previews.yml:23","Info:   0 out of  13 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   7 third-party GitHubAction dependencies pinned","Info:   0 out of   9 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":"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":"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":"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":"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":"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":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"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":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/ci.yml:155"],"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":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 24 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-23T09:39:44.277Z","repository_id":36997180,"created_at":"2025-08-23T09:39:44.277Z","updated_at":"2025-08-23T09:39:44.277Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":27653730,"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-12-11T02:00:11.302Z","response_time":56,"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"}},"repo_metadata_updated_at":"2025-12-11T14:21:16.864Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":45.29117379435851,"dependent_packages_count":41.19654231119199,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":43.24385805277525},"purl":"pkg:conda/dirty-equals","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/conda/dirty-equals","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/conda/dirty-equals","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/conda/dirty-equals/dependencies","status":null,"funding_links":["https://github.com/sponsors/samuelcolvin"],"critical":null,"issue_metadata":{"last_synced_at":"2025-11-26T21:09:34.267Z","issues_count":40,"pull_requests_count":85,"avg_time_to_close_issue":9056859.0,"avg_time_to_close_pull_request":3034838.3205128205,"issues_closed_count":25,"pull_requests_closed_count":78,"pull_request_authors_count":24,"issue_authors_count":23,"avg_comments_per_issue":2.775,"avg_comments_per_pull_request":1.6,"merged_pull_requests_count":70,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":5,"past_year_pull_requests_count":8,"past_year_avg_time_to_close_issue":131984.0,"past_year_avg_time_to_close_pull_request":17296.8,"past_year_issues_closed_count":1,"past_year_pull_requests_closed_count":5,"past_year_pull_request_authors_count":4,"past_year_issue_authors_count":5,"past_year_avg_comments_per_issue":1.2,"past_year_avg_comments_per_pull_request":0.625,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":5,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/issues","maintainers":[{"login":"samuelcolvin","count":53,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/samuelcolvin"},{"login":"15r10nk","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/15r10nk"}],"active_maintainers":[{"login":"samuelcolvin","count":5,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/samuelcolvin"}]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/anaconda.org/packages/dirty-equals/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/anaconda.org/packages/dirty-equals/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/anaconda.org/packages/dirty-equals/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/anaconda.org/packages/dirty-equals/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/anaconda.org/packages/dirty-equals/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/anaconda.org/packages/dirty-equals/codemeta","maintainers":[],"registry":{"name":"anaconda.org","url":"https://anaconda.org","ecosystem":"conda","default":true,"packages_count":5150,"maintainers_count":0,"namespaces_count":0,"keywords_count":0,"github":"Anaconda","metadata":{"kind":"anaconda","key":"Main","api":"https://repo.ananconda.com"},"icon_url":"https://github.com/Anaconda.png","created_at":"2022-10-03T15:37:08.736Z","updated_at":"2026-04-27T18:20:20.117Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/anaconda.org/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/anaconda.org/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/anaconda.org/namespaces"}},{"id":13008535,"name":"py3-dirty-equals-pyc","ecosystem":"alpine","description":"Precompiled Python bytecode for py3-dirty-equals","homepage":"https://github.com/samuelcolvin/dirty-equals","licenses":"MIT","normalized_licenses":["MIT"],"repository_url":"https://github.com/samuelcolvin/dirty-equals","keywords_array":[],"namespace":"community","versions_count":1,"first_release_published_at":"2024-10-19T10:40:05.000Z","latest_release_published_at":"2024-10-19T10:40:05.000Z","latest_release_number":"0.8.0-r0","last_synced_at":"2026-04-12T23:02:34.789Z","created_at":"2026-01-31T00:39:39.895Z","updated_at":"2026-04-12T23:02:34.789Z","registry_url":"https://pkgs.alpinelinux.org/package/v3.23/community/x86_64/py3-dirty-equals-pyc","install_command":"apk add py3-dirty-equals-pyc","documentation_url":null,"metadata":{"repository":"community","architecture":"x86_64"},"repo_metadata":{},"repo_metadata_updated_at":null,"dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":0.0,"dependent_packages_count":0.0,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":100},"purl":"pkg:apk/alpine/py3-dirty-equals-pyc?arch=x86_64\u0026repository_url=https://pkgs.alpinelinux.org/packages?branch=v3.23","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/alpine/py3-dirty-equals-pyc","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/alpine/py3-dirty-equals-pyc","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/alpine/py3-dirty-equals-pyc/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":null,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.23/packages/py3-dirty-equals-pyc/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.23/packages/py3-dirty-equals-pyc/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.23/packages/py3-dirty-equals-pyc/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.23/packages/py3-dirty-equals-pyc/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.23/packages/py3-dirty-equals-pyc/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.23/packages/py3-dirty-equals-pyc/codemeta","maintainers":[{"uuid":"alpine@juniorjpdj.pl","login":null,"name":"Jacek Pruciak","email":null,"url":"https://pkgs.alpinelinux.org/packages?maintainer=Jacek Pruciak","packages_count":7,"html_url":"https://pkgs.alpinelinux.org/packages?maintainer=Jacek Pruciak","role":null,"created_at":"2026-03-04T03:55:53.376Z","updated_at":"2026-03-04T03:55:53.376Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.23/maintainers/alpine@juniorjpdj.pl/packages"}],"registry":{"name":"alpine-v3.23","url":"https://pkgs.alpinelinux.org/packages?branch=v3.23","ecosystem":"alpine","default":false,"packages_count":27569,"maintainers_count":428,"namespaces_count":2,"keywords_count":0,"github":"alpinelinux","metadata":{"repos":["main","community"]},"icon_url":"https://github.com/alpinelinux.png","created_at":"2026-01-24T14:35:50.739Z","updated_at":"2026-04-27T18:20:22.382Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.23/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.23/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.23/namespaces"}},{"id":6085099,"name":"py3-dirty-equals","ecosystem":"alpine","description":"Doing dirty (but extremely useful) things with equals.","homepage":"https://github.com/samuelcolvin/dirty-equals","licenses":"MIT","normalized_licenses":["MIT"],"repository_url":"https://github.com/samuelcolvin/dirty-equals","keywords_array":[],"namespace":"community","versions_count":1,"first_release_published_at":"2022-11-21T22:04:17.000Z","latest_release_published_at":"2022-11-21T22:04:17.000Z","latest_release_number":"0.5.0-r0","last_synced_at":"2026-04-10T18:04:32.464Z","created_at":"2023-01-31T20:05:29.226Z","updated_at":"2026-04-10T18:04:32.464Z","registry_url":"https://pkgs.alpinelinux.org/package/v3.17/community/x86_64/py3-dirty-equals","install_command":"apk add py3-dirty-equals","documentation_url":null,"metadata":{"repository":"community","architecture":"x86_64"},"repo_metadata":{"id":36997180,"uuid":"452345017","full_name":"samuelcolvin/dirty-equals","owner":"samuelcolvin","description":"Doing dirty (but extremely useful) things with equals.","archived":false,"fork":false,"pushed_at":"2025-09-17T18:37:13.000Z","size":1558,"stargazers_count":908,"open_issues_count":14,"forks_count":39,"subscribers_count":12,"default_branch":"main","last_synced_at":"2025-09-17T20:57:28.895Z","etag":null,"topics":["pytest","python","testing-tools","unit-testing"],"latest_commit_sha":null,"homepage":"https://dirty-equals.helpmanual.io","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/samuelcolvin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"samuelcolvin"}},"created_at":"2022-01-26T16:10:05.000Z","updated_at":"2025-09-17T18:35:09.000Z","dependencies_parsed_at":"2024-01-12T23:43:05.531Z","dependency_job_id":"b1ec0257-f6d7-4d8d-9041-c350d7e1d39c","html_url":"https://github.com/samuelcolvin/dirty-equals","commit_stats":{"total_commits":133,"total_committers":18,"mean_commits":7.388888888888889,"dds":"0.18796992481203012","last_synced_commit":"065162ac195964df7f5c47288561809e49deac48"},"previous_names":[],"tags_count":17,"template":false,"template_full_name":null,"purl":"pkg:github/samuelcolvin/dirty-equals","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/samuelcolvin","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/sbom","scorecard":{"id":798334,"data":{"date":"2025-08-11","repo":{"name":"github.com/samuelcolvin/dirty-equals","commit":"31ab5a3b6141106919058c19dc41f0d4e9107d22"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.8,"checks":[{"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":"Code-Review","score":4,"reason":"Found 13/30 approved changesets -- score normalized to 4","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":"Maintained","score":2,"reason":"2 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 2","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"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":"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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ci.yml:1","Warn: topLevel 'statuses' permission set to 'write': .github/workflows/upload-previews.yml:9","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":"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/ci.yml:118: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:122: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:125: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:148: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:165: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:168: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:177: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:185: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:37: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:48: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:57: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:59: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:65: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:74: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:77: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:94: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:106: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/upload-previews.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/upload-previews.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/upload-previews.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/samuelcolvin/dirty-equals/upload-previews.yml/main?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:174","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:43","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:64","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:83","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:87","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:131","Warn: pipCommand not pinned by hash: .github/workflows/ci.yml:134","Warn: pipCommand not pinned by hash: .github/workflows/upload-previews.yml:22","Warn: pipCommand not pinned by hash: .github/workflows/upload-previews.yml:23","Info:   0 out of  13 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   7 third-party GitHubAction dependencies pinned","Info:   0 out of   9 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":"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":"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":"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":"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":"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":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"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":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/ci.yml:155"],"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":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 24 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-23T09:39:44.277Z","repository_id":36997180,"created_at":"2025-08-23T09:39:44.277Z","updated_at":"2025-08-23T09:39:44.277Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":276036255,"owners_count":25574197,"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-09-20T02:00:10.207Z","response_time":63,"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":"samuelcolvin","name":"Samuel Colvin","uuid":"4039449","kind":"user","description":"The Pydantic Stack: Pydantic Validation, Pydantic AI and Pydantic Logfire","email":"","website":"https://pydantic.dev/logfire","location":"London, United Kingdom","twitter":"samuel_colvin","company":"@pydantic","icon_url":"https://avatars.githubusercontent.com/u/4039449?u=42eb3b833047c8c4b4f647a031eaef148c16d93f\u0026v=4","repositories_count":296,"last_synced_at":"2025-09-08T05:45:27.927Z","metadata":{"has_sponsors_listing":true},"html_url":"https://github.com/samuelcolvin","funding_links":["https://github.com/sponsors/samuelcolvin"],"total_stars":7078,"followers":5829,"following":47,"created_at":"2022-11-05T13:50:51.563Z","updated_at":"2025-09-08T05:45:27.927Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/samuelcolvin","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/samuelcolvin/repositories"},"tags":[{"name":"v0.9.0","sha":"9e6f0be981f982fdaae16671ab14aefc3ab8664a","kind":"commit","published_at":"2025-01-11T23:20:42.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.9.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.9.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.9.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.9.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.9.0/manifests"},{"name":"v0.8.0","sha":"da29a2db8293c4c974f303974a6e5ffdb462c9b4","kind":"commit","published_at":"2024-08-13T19:53:17.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.8.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.8.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.8.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.8.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.8.0/manifests"},{"name":"v0.7.1-post0","sha":"5da8ed1cfea51c86c2585264d6bec8de2942d029","kind":"commit","published_at":"2023-11-15T04:29:18.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.7.1-post0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.7.1-post0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.7.1-post0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.1-post0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.1-post0/manifests"},{"name":"v0.7.1","sha":"78a992266989f2687eae48f58367906d895af285","kind":"commit","published_at":"2023-11-14T12:38:22.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.7.1","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.7.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.7.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.1/manifests"},{"name":"v0.7.0","sha":"87d4552f76f3a123cf0455f46f89091ade15614f","kind":"commit","published_at":"2023-09-03T14:17:15.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.7.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.7.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.7.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.7.0/manifests"},{"name":"v0.6.0","sha":"5577ce517e6ede343634e11dd5f397356aefd1d2","kind":"tag","published_at":"2023-04-27T23:55:39.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.6.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.6.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.6.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.6.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.6.0/manifests"},{"name":"v0.5.0","sha":"b65760701f6649b4f188c6a1294b3b91b2d2ba85","kind":"tag","published_at":"2022-08-30T20:05:41.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.5.0","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.5.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.5.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.5.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.5.0/manifests"},{"name":"v0.4","sha":"2d3c0e5ec4c92c1e336b231343c675f78ac746c8","kind":"commit","published_at":"2022-04-28T15:37:25.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.4","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.4","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.4","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.4/manifests"},{"name":"v0.3","sha":"c128d7cf3aa7d48696433be6b9945cc45fa6b046","kind":"commit","published_at":"2022-04-18T12:08:04.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.3","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.3","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.3","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.3/manifests"},{"name":"v0.2.1","sha":"6eb2932c40452ce7a62e0f3ba832d3712026b606","kind":"commit","published_at":"2022-03-30T11:09:12.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.2.1","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.2.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.2.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.2.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.2.1/manifests"},{"name":"v0.2","sha":"ae3881c6ff78ca608b97cb581d6a733bd974e102","kind":"commit","published_at":"2022-03-29T14:15:56.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.2","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.2/manifests"},{"name":"v0.1","sha":"450492e624f0b42c1addd20cac684b4614f1a78f","kind":"commit","published_at":"2022-02-25T16:37:37.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.1","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.1/manifests"},{"name":"v0.0.5","sha":"35cfacc7dac357cc5b3b8bdd64e2667a0f25691e","kind":"commit","published_at":"2022-02-24T21:26:02.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.0.5","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.0.5","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.0.5","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.5/manifests"},{"name":"v0.0.4","sha":"0a78e042ef9db11d7337966d2c29e4c43251eef1","kind":"commit","published_at":"2022-02-23T20:01:20.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.0.4","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.0.4","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.0.4","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.4","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.4/manifests"},{"name":"v0.0.3","sha":"c690abbb32e5893d3bb2634e1345ab30a2f46791","kind":"commit","published_at":"2022-02-22T19:38:42.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.0.3","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.0.3","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.0.3","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.3","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.3/manifests"},{"name":"v0.0.2","sha":"1a09de2bb95f4fa903f47adfe1a35dc1fcad8afb","kind":"commit","published_at":"2022-01-28T11:55:35.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.0.2","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.0.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.0.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.2/manifests"},{"name":"v0.0.1","sha":"9fae3910fed3925b9d950afb85ced13a7c3ba4aa","kind":"commit","published_at":"2022-01-27T22:49:09.000Z","download_url":"https://codeload.github.com/samuelcolvin/dirty-equals/tar.gz/v0.0.1","html_url":"https://github.com/samuelcolvin/dirty-equals/releases/tag/v0.0.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/samuelcolvin/dirty-equals@v0.0.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/tags/v0.0.1/manifests"}]},"repo_metadata_updated_at":"2025-12-11T14:21:32.991Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":0.0,"dependent_packages_count":27.253845290221175,"stargazers_count":9.638486583585944,"forks_count":18.895250926237793,"average":13.946895700011229},"purl":"pkg:apk/alpine/py3-dirty-equals?arch=x86_64\u0026repository_url=https://pkgs.alpinelinux.org/packages?branch=v3.17","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/alpine/py3-dirty-equals","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/alpine/py3-dirty-equals","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/alpine/py3-dirty-equals/dependencies","status":null,"funding_links":["https://github.com/sponsors/samuelcolvin"],"critical":null,"issue_metadata":{"last_synced_at":"2025-08-31T10:20:53.334Z","issues_count":40,"pull_requests_count":76,"avg_time_to_close_issue":12946860.285714285,"avg_time_to_close_pull_request":2745231.0821917807,"issues_closed_count":28,"pull_requests_closed_count":73,"pull_request_authors_count":23,"issue_authors_count":22,"avg_comments_per_issue":3.275,"avg_comments_per_pull_request":1.7894736842105263,"merged_pull_requests_count":65,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":5,"past_year_pull_requests_count":8,"past_year_avg_time_to_close_issue":64540.0,"past_year_avg_time_to_close_pull_request":9876965.8,"past_year_issues_closed_count":1,"past_year_pull_requests_closed_count":5,"past_year_pull_request_authors_count":5,"past_year_issue_authors_count":5,"past_year_avg_comments_per_issue":1.0,"past_year_avg_comments_per_pull_request":0.875,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":5,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/issues","maintainers":[{"login":"samuelcolvin","count":50,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/samuelcolvin"},{"login":"15r10nk","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/15r10nk"}],"active_maintainers":[{"login":"samuelcolvin","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/samuelcolvin"}]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.17/packages/py3-dirty-equals/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.17/packages/py3-dirty-equals/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.17/packages/py3-dirty-equals/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.17/packages/py3-dirty-equals/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.17/packages/py3-dirty-equals/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.17/packages/py3-dirty-equals/codemeta","maintainers":[{"uuid":"alpine@juniorjpdj.pl","login":null,"name":"Jacek Pruciak","email":null,"url":"https://pkgs.alpinelinux.org/packages?maintainer=Jacek Pruciak","packages_count":5,"html_url":"https://pkgs.alpinelinux.org/packages?maintainer=Jacek Pruciak","role":null,"created_at":"2023-02-01T05:14:18.085Z","updated_at":"2023-02-01T05:14:18.085Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.17/maintainers/alpine@juniorjpdj.pl/packages"}],"registry":{"name":"alpine-v3.17","url":"https://pkgs.alpinelinux.org/packages?branch=v3.17","ecosystem":"alpine","default":false,"packages_count":17817,"maintainers_count":352,"namespaces_count":2,"keywords_count":0,"github":"alpinelinux","metadata":{"repos":["main","community"]},"icon_url":"https://github.com/alpinelinux.png","created_at":"2023-01-31T17:27:50.642Z","updated_at":"2026-04-27T18:20:23.689Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.17/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.17/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/alpine-v3.17/namespaces"}},{"id":14549004,"name":"devel/py-dirty-equals","ecosystem":"openbsd","description":"simplify asserts in tests by misusing __eq__","homepage":"https://github.com/samuelcolvin/dirty-equals","licenses":null,"normalized_licenses":[],"repository_url":"https://github.com/samuelcolvin/dirty-equals","keywords_array":[],"namespace":"devel","versions_count":1,"first_release_published_at":"2026-04-25T13:29:17.000Z","latest_release_published_at":"2026-04-25T13:29:17.000Z","latest_release_number":"0.11","last_synced_at":"2026-05-28T01:10:54.343Z","created_at":"2026-05-28T01:10:53.993Z","updated_at":"2026-05-28T04:40:06.655Z","registry_url":"https://cvsweb.openbsd.org/cgi-bin/cvsweb/ports/devel/py-dirty-equals/","install_command":"pkg_add py3-dirty-equals-0.11","documentation_url":null,"metadata":{"pkgstem":"py3-dirty-equals","fullpkgname":"py3-dirty-equals-0.11","subpackage":"-"},"repo_metadata":{},"repo_metadata_updated_at":"2026-05-28T04:40:06.628Z","dependent_packages_count":0,"downloads":null,"downloads_period":null,"dependent_repos_count":0,"rankings":{"downloads":null,"dependent_repos_count":0.0,"dependent_packages_count":0.0,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":100},"purl":"pkg:openbsd/devel/py-dirty-equals?arch=amd64","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/openbsd/devel/py-dirty-equals","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/openbsd/devel/py-dirty-equals","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/openbsd/devel/py-dirty-equals/dependencies","status":null,"funding_links":[],"critical":null,"issue_metadata":null,"versions_url":"https://packages.ecosyste.ms/api/v1/registries/openbsd-7.9-amd64/packages/devel%2Fpy-dirty-equals/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/openbsd-7.9-amd64/packages/devel%2Fpy-dirty-equals/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/openbsd-7.9-amd64/packages/devel%2Fpy-dirty-equals/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/openbsd-7.9-amd64/packages/devel%2Fpy-dirty-equals/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/openbsd-7.9-amd64/packages/devel%2Fpy-dirty-equals/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/openbsd-7.9-amd64/packages/devel%2Fpy-dirty-equals/codemeta","maintainers":[{"uuid":"renaud@allard.it","login":null,"name":"Renaud Allard","email":"renaud@allard.it","url":null,"packages_count":27,"html_url":null,"role":null,"created_at":"2026-05-28T01:10:54.570Z","updated_at":"2026-05-28T01:10:54.570Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/openbsd-7.9-amd64/maintainers/renaud@allard.it/packages"}],"registry":{"name":"openbsd-7.9-amd64","url":"https://cdn.openbsd.org/pub/OpenBSD/7.9/packages/amd64","ecosystem":"openbsd","default":true,"packages_count":11808,"maintainers_count":274,"namespaces_count":42,"keywords_count":0,"github":"openbsd","metadata":{"arch":"amd64","sqlports_version":"7.54","funded_packages_count":2},"icon_url":"https://github.com/openbsd.png","created_at":"2026-05-26T11:21:10.750Z","updated_at":"2026-05-29T05:03:08.564Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/openbsd-7.9-amd64/packages","maintainers_url":"https://packages.ecosyste.ms/api/v1/registries/openbsd-7.9-amd64/maintainers","namespaces_url":"https://packages.ecosyste.ms/api/v1/registries/openbsd-7.9-amd64/namespaces"}}],"commits":{"id":3551,"full_name":"samuelcolvin/dirty-equals","default_branch":"main","total_commits":143,"total_committers":20,"total_bot_commits":0,"total_bot_committers":0,"mean_commits":7.15,"dds":0.2027972027972028,"past_year_total_commits":9,"past_year_total_committers":4,"past_year_total_bot_commits":0,"past_year_total_bot_committers":0,"past_year_mean_commits":2.25,"past_year_dds":0.4444444444444444,"last_synced_at":"2026-03-03T17:24:35.361Z","last_synced_commit":"e8cd329dfb910a9696edc9cb793e35c2de6c502e","created_at":"2023-03-07T09:18:04.512Z","updated_at":"2026-03-03T17:24:02.454Z","committers":[{"name":"Samuel Colvin","email":"s@muelcolvin.com","login":"samuelcolvin","count":114},{"name":"Francesco Bruzzesi","email":"42817048+FBruzzesi","login":"FBruzzesi","count":6},{"name":"Alex Darby","email":"63904626+osintalex","login":"osintalex","count":4},{"name":"Alex Hall","email":"alex.mojaki@gmail.com","login":"alexmojaki","count":2},{"name":"Mikhail Shagov","email":"mishaga","login":"mishaga","count":2},{"name":"Barnaby Walters","email":"barnaby@waterpigs.co.uk","login":"barnabywalters","count":1},{"name":"Bruno Alla","email":"browniebroke","login":"browniebroke","count":1},{"name":"Christian Clauss","email":"cclauss@me.com","login":"cclauss","count":1},{"name":"Connor Brinton","email":"connor@brintonium.com","login":"connorbrinton","count":1},{"name":"Edward Betts","email":"edward@4angle.com","login":"EdwardBetts","count":1},{"name":"Frank Hoffmann","email":"44680962+15r10nk","login":"15r10nk","count":1},{"name":"John G G","email":"484246+john-g-g","login":"john-g-g","count":1},{"name":"Lucas Colley","email":"lucas.colley8@gmail.com","login":"lucascolley","count":1},{"name":"Marco Kaulea","email":"78022140+Marco-Kaulea","login":"Marco-Kaulea","count":1},{"name":"MeggyCal","email":"MeggyCal","login":"MeggyCal","count":1},{"name":"Michał Górny","email":"mgorny@gentoo.org","login":"mgorny","count":1},{"name":"Mustafa Çınar","email":"53943169+cinarizasyon","login":"cinarizasyon","count":1},{"name":"Silas Sewell","email":"silas@sewell.org","login":"silas","count":1},{"name":"Yevhenii Hyzyla","email":"hyzyla@gmail.com","login":"hyzyla","count":1},{"name":"evstrat","email":"evstrat.bg@mail.ru","login":"evstratbg","count":1}],"past_year_committers":[{"name":"Samuel Colvin","email":"s@muelcolvin.com","login":"samuelcolvin","count":5},{"name":"Francesco Bruzzesi","email":"42817048+FBruzzesi","login":"FBruzzesi","count":2},{"name":"Lucas Colley","email":"lucas.colley8@gmail.com","login":"lucascolley","count":1},{"name":"Connor Brinton","email":"connor@brintonium.com","login":"connorbrinton","count":1}],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-03-04T00:00:12.294Z","repositories_count":6184573,"commits_count":930632487,"contributors_count":36043938,"owners_count":1146406,"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":{"table":{"full_name":"samuelcolvin/dirty-equals","html_url":"https://github.com/samuelcolvin/dirty-equals","last_synced_at":"2026-03-04T22:01:07.519Z","status":"active","issues_count":40,"pull_requests_count":87,"avg_time_to_close_issue":9056859.0,"avg_time_to_close_pull_request":3034838.3205128205,"issues_closed_count":25,"pull_requests_closed_count":78,"pull_request_authors_count":26,"issue_authors_count":23,"avg_comments_per_issue":2.775,"avg_comments_per_pull_request":1.5632183908045978,"merged_pull_requests_count":70,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":5,"past_year_pull_requests_count":7,"past_year_avg_time_to_close_issue":131984.0,"past_year_avg_time_to_close_pull_request":28691.333333333332,"past_year_issues_closed_count":1,"past_year_pull_requests_closed_count":3,"past_year_pull_request_authors_count":5,"past_year_issue_authors_count":5,"past_year_avg_comments_per_issue":1.2,"past_year_avg_comments_per_pull_request":0.2857142857142857,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":3,"created_at":"2023-05-10T18:41:44.455Z","updated_at":"2026-03-04T22:01:07.520Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/samuelcolvin%2Fdirty-equals/issues","issue_labels_count":{"table":{"question":1}},"pull_request_labels_count":{"table":{}},"issue_author_associations_count":{"table":{"NONE":20,"CONTRIBUTOR":14,"OWNER":5,"COLLABORATOR":1}},"pull_request_author_associations_count":{"table":{"OWNER":48,"CONTRIBUTOR":29,"NONE":9,"COLLABORATOR":1}},"issue_authors":{"table":{"mgorny":6,"samuelcolvin":5,"FBruzzesi":2,"alexmojaki":2,"jd-solanki":2,"musicinmybrain":2,"soxofaan":2,"gjcarneiro":2,"qweeze":2,"kloczek":2,"Marco-Kaulea":1,"gotmax23":1,"StefanBRas":1,"silas":1,"IvanKirpichnikov":1,"auxarne":1,"ncopa":1,"Kludex":1,"NewSouthMjos":1,"hyzyla":1,"15r10nk":1,"connorbrinton":1,"slafs":1}},"pull_request_authors":{"table":{"samuelcolvin":48,"FBruzzesi":9,"osintalex":4,"15r10nk":2,"EdwardBetts":2,"alexmojaki":2,"connorbrinton":1,"john-g-g":1,"mishaga":1,"shazhou2015":1,"Marco-Kaulea":1,"lkadian":1,"SamWarden":1,"evstratbg":1,"MeggyCal":1,"hyzyla":1,"adriangb":1,"bysiber":1,"cclauss":1,"browniebroke":1,"silas":1,"barnabywalters":1,"soxofaan":1,"cinarizasyon":1,"nullr0ute":1,"mgorny":1}},"host":{"table":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-03-11T00:00:08.908Z","repositories_count":13659943,"issues_count":34676334,"pull_requests_count":113188198,"authors_count":11192300,"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":{"table":{}},"past_year_pull_request_labels_count":{"table":{}},"past_year_issue_author_associations_count":{"table":{"NONE":4,"CONTRIBUTOR":1}},"past_year_pull_request_author_associations_count":{"table":{"NONE":3,"OWNER":3,"CONTRIBUTOR":1}},"past_year_issue_authors":{"table":{"auxarne":1,"connorbrinton":1,"IvanKirpichnikov":1,"musicinmybrain":1,"slafs":1}},"past_year_pull_request_authors":{"table":{"samuelcolvin":3,"bysiber":1,"connorbrinton":1,"nullr0ute":1,"SamWarden":1}},"maintainers":[{"table":{"login":"samuelcolvin","count":53,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/samuelcolvin"}},{"table":{"login":"15r10nk","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/15r10nk"}}],"active_maintainers":[{"table":{"login":"samuelcolvin","count":3,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/samuelcolvin"}}]}},"events":{"total":{"ReleaseEvent":2,"DeleteEvent":3,"PullRequestEvent":5,"ForkEvent":3,"IssuesEvent":7,"WatchEvent":118,"IssueCommentEvent":17,"PushEvent":12,"CreateEvent":5},"last_year":{"ReleaseEvent":1,"DeleteEvent":2,"PullRequestEvent":3,"ForkEvent":2,"IssuesEvent":6,"WatchEvent":68,"IssueCommentEvent":16,"PushEvent":9,"CreateEvent":3}},"keywords":["pytest","python","testing-tools","unit-testing"],"dependencies":[{"ecosystem":"pypi","filepath":"pyproject.toml","sha":null,"kind":"manifest","created_at":"2022-07-13T09:00:39.727Z","updated_at":"2022-07-13T09:00:39.727Z","repository_link":"https://github.com/samuelcolvin/dirty-equals/blob/main/pyproject.toml","dependencies":[{"id":215082122,"package_name":"python","ecosystem":"pypi","requirements":"^3.7.0","direct":true,"kind":"runtime","optional":false},{"id":215082123,"package_name":"typing-extensions","ecosystem":"pypi","requirements":"^4.0.1","direct":true,"kind":"runtime","optional":false},{"id":215082124,"package_name":"pytz","ecosystem":"pypi","requirements":"\u003e=2021.3","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/ci.yml","sha":null,"kind":"manifest","created_at":"2023-01-17T12:16:47.548Z","updated_at":"2023-01-17T12:16:47.548Z","repository_link":"https://github.com/samuelcolvin/dirty-equals/blob/main/.github/workflows/ci.yml","dependencies":[{"id":6989496303,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false},{"id":6989496304,"package_name":"actions/setup-python","ecosystem":"actions","requirements":"v4","direct":true,"kind":"composite","optional":false},{"id":6989496305,"package_name":"actions/cache","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false},{"id":6989496306,"package_name":"codecov/codecov-action","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false},{"id":6989496307,"package_name":"pre-commit/action","ecosystem":"actions","requirements":"v3.0.0","direct":true,"kind":"composite","optional":false},{"id":6989496308,"package_name":"actions/upload-artifact","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false},{"id":6989496309,"package_name":"actions/download-artifact","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false},{"id":6989496310,"package_name":"JamesIves/github-pages-deploy-action","ecosystem":"actions","requirements":"v4","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/upload-previews.yml","sha":null,"kind":"manifest","created_at":"2023-01-17T12:16:48.163Z","updated_at":"2023-01-17T12:16:48.163Z","repository_link":"https://github.com/samuelcolvin/dirty-equals/blob/main/.github/workflows/upload-previews.yml","dependencies":[{"id":6989499629,"package_name":"actions/setup-python","ecosystem":"actions","requirements":"v1","direct":true,"kind":"composite","optional":false},{"id":6989499668,"package_name":"dawidd6/action-download-artifact","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"pypi","filepath":"uv.lock","sha":null,"kind":"lockfile","created_at":"2025-12-23T11:04:57.864Z","updated_at":"2025-12-23T11:04:57.864Z","repository_link":"https://github.com/samuelcolvin/dirty-equals/blob/main/uv.lock","dependencies":[{"id":25776700278,"package_name":"annotated-types","ecosystem":"pypi","requirements":"0.7.0","direct":false,"kind":"runtime","optional":false},{"id":25776700279,"package_name":"babel","ecosystem":"pypi","requirements":"2.17.0","direct":false,"kind":"runtime","optional":false},{"id":25776700280,"package_name":"black","ecosystem":"pypi","requirements":"25.9.0","direct":false,"kind":"runtime","optional":false},{"id":25776700281,"package_name":"certifi","ecosystem":"pypi","requirements":"2025.8.3","direct":false,"kind":"runtime","optional":false},{"id":25776700282,"package_name":"charset-normalizer","ecosystem":"pypi","requirements":"3.4.3","direct":false,"kind":"runtime","optional":false},{"id":25776700283,"package_name":"click","ecosystem":"pypi","requirements":"8.1.8","direct":false,"kind":"runtime","optional":false},{"id":25776700284,"package_name":"click","ecosystem":"pypi","requirements":"8.3.0","direct":false,"kind":"runtime","optional":false},{"id":25776700285,"package_name":"colorama","ecosystem":"pypi","requirements":"0.4.6","direct":false,"kind":"runtime","optional":false},{"id":25776700286,"package_name":"coverage","ecosystem":"pypi","requirements":"7.10.6","direct":false,"kind":"runtime","optional":false},{"id":25776700287,"package_name":"dirty-equals","ecosystem":"pypi","requirements":"*","direct":false,"kind":"runtime","optional":false},{"id":25776700288,"package_name":"exceptiongroup","ecosystem":"pypi","requirements":"1.3.0","direct":false,"kind":"runtime","optional":false},{"id":25776700289,"package_name":"ghp-import","ecosystem":"pypi","requirements":"2.1.0","direct":false,"kind":"runtime","optional":false},{"id":25776700290,"package_name":"griffe","ecosystem":"pypi","requirements":"1.14.0","direct":false,"kind":"runtime","optional":false},{"id":25776700291,"package_name":"idna","ecosystem":"pypi","requirements":"3.10","direct":false,"kind":"runtime","optional":false},{"id":25776700292,"package_name":"importlib-metadata","ecosystem":"pypi","requirements":"8.7.0","direct":false,"kind":"runtime","optional":false},{"id":25776700293,"package_name":"importlib-resources","ecosystem":"pypi","requirements":"6.5.2","direct":false,"kind":"runtime","optional":false},{"id":25776700294,"package_name":"iniconfig","ecosystem":"pypi","requirements":"2.1.0","direct":false,"kind":"runtime","optional":false},{"id":25776700295,"package_name":"jinja2","ecosystem":"pypi","requirements":"3.1.6","direct":false,"kind":"runtime","optional":false},{"id":25776700296,"package_name":"markdown","ecosystem":"pypi","requirements":"3.9","direct":false,"kind":"runtime","optional":false},{"id":25776700297,"package_name":"markdown-it-py","ecosystem":"pypi","requirements":"3.0.0","direct":false,"kind":"runtime","optional":false},{"id":25776700298,"package_name":"markdown-it-py","ecosystem":"pypi","requirements":"4.0.0","direct":false,"kind":"runtime","optional":false},{"id":25776700299,"package_name":"markupsafe","ecosystem":"pypi","requirements":"3.0.2","direct":false,"kind":"runtime","optional":false},{"id":25776700300,"package_name":"mdurl","ecosystem":"pypi","requirements":"0.1.2","direct":false,"kind":"runtime","optional":false},{"id":25776700301,"package_name":"mergedeep","ecosystem":"pypi","requirements":"1.3.4","direct":false,"kind":"runtime","optional":false},{"id":25776700302,"package_name":"mike","ecosystem":"pypi","requirements":"2.1.3","direct":false,"kind":"runtime","optional":false},{"id":25776700303,"package_name":"mkdocs","ecosystem":"pypi","requirements":"1.6.0","direct":false,"kind":"runtime","optional":false},{"id":25776700304,"package_name":"mkdocs-autorefs","ecosystem":"pypi","requirements":"1.0.1","direct":false,"kind":"runtime","optional":false},{"id":25776700305,"package_name":"mkdocs-get-deps","ecosystem":"pypi","requirements":"0.2.0","direct":false,"kind":"runtime","optional":false},{"id":25776700306,"package_name":"mkdocs-material","ecosystem":"pypi","requirements":"9.5.31","direct":false,"kind":"runtime","optional":false},{"id":25776700307,"package_name":"mkdocs-material-extensions","ecosystem":"pypi","requirements":"1.3.1","direct":false,"kind":"runtime","optional":false},{"id":25776700308,"package_name":"mkdocs-simple-hooks","ecosystem":"pypi","requirements":"0.1.5","direct":false,"kind":"runtime","optional":false},{"id":25776700309,"package_name":"mkdocstrings","ecosystem":"pypi","requirements":"0.25.2","direct":false,"kind":"runtime","optional":false},{"id":25776700310,"package_name":"mkdocstrings-python","ecosystem":"pypi","requirements":"1.10.9","direct":false,"kind":"runtime","optional":false},{"id":25776700311,"package_name":"mypy","ecosystem":"pypi","requirements":"1.18.2","direct":false,"kind":"runtime","optional":false},{"id":25776700312,"package_name":"mypy-extensions","ecosystem":"pypi","requirements":"1.1.0","direct":false,"kind":"runtime","optional":false},{"id":25776700313,"package_name":"packaging","ecosystem":"pypi","requirements":"25.0","direct":false,"kind":"runtime","optional":false},{"id":25776700314,"package_name":"paginate","ecosystem":"pypi","requirements":"0.5.7","direct":false,"kind":"runtime","optional":false},{"id":25776700315,"package_name":"pathspec","ecosystem":"pypi","requirements":"0.12.1","direct":false,"kind":"runtime","optional":false},{"id":25776700316,"package_name":"platformdirs","ecosystem":"pypi","requirements":"4.4.0","direct":false,"kind":"runtime","optional":false},{"id":25776700317,"package_name":"pluggy","ecosystem":"pypi","requirements":"1.6.0","direct":false,"kind":"runtime","optional":false},{"id":25776700318,"package_name":"pydantic","ecosystem":"pypi","requirements":"2.12.4","direct":false,"kind":"runtime","optional":false},{"id":25776700319,"package_name":"pydantic-core","ecosystem":"pypi","requirements":"2.41.5","direct":false,"kind":"runtime","optional":false},{"id":25776700320,"package_name":"pygments","ecosystem":"pypi","requirements":"2.19.2","direct":false,"kind":"runtime","optional":false},{"id":25776700321,"package_name":"pymdown-extensions","ecosystem":"pypi","requirements":"10.16.1","direct":false,"kind":"runtime","optional":false},{"id":25776700322,"package_name":"pyparsing","ecosystem":"pypi","requirements":"3.2.4","direct":false,"kind":"runtime","optional":false},{"id":25776700323,"package_name":"pytest","ecosystem":"pypi","requirements":"8.4.2","direct":false,"kind":"runtime","optional":false},{"id":25776700324,"package_name":"pytest-examples","ecosystem":"pypi","requirements":"0.0.18","direct":false,"kind":"runtime","optional":false},{"id":25776700325,"package_name":"pytest-pretty","ecosystem":"pypi","requirements":"1.3.0","direct":false,"kind":"runtime","optional":false},{"id":25776700326,"package_name":"python-dateutil","ecosystem":"pypi","requirements":"2.9.0.post0","direct":false,"kind":"runtime","optional":false},{"id":25776700327,"package_name":"pytokens","ecosystem":"pypi","requirements":"0.1.10","direct":false,"kind":"runtime","optional":false},{"id":25776700328,"package_name":"pyyaml","ecosystem":"pypi","requirements":"6.0.2","direct":false,"kind":"runtime","optional":false},{"id":25776700329,"package_name":"pyyaml-env-tag","ecosystem":"pypi","requirements":"1.1","direct":false,"kind":"runtime","optional":false},{"id":25776700330,"package_name":"regex","ecosystem":"pypi","requirements":"2025.9.18","direct":false,"kind":"runtime","optional":false},{"id":25776700331,"package_name":"requests","ecosystem":"pypi","requirements":"2.32.5","direct":false,"kind":"runtime","optional":false},{"id":25776700332,"package_name":"rich","ecosystem":"pypi","requirements":"14.1.0","direct":false,"kind":"runtime","optional":false},{"id":25776700333,"package_name":"ruff","ecosystem":"pypi","requirements":"0.13.1","direct":false,"kind":"runtime","optional":false},{"id":25776700334,"package_name":"six","ecosystem":"pypi","requirements":"1.17.0","direct":false,"kind":"runtime","optional":false},{"id":25776700335,"package_name":"tomli","ecosystem":"pypi","requirements":"2.2.1","direct":false,"kind":"runtime","optional":false},{"id":25776700336,"package_name":"types-pytz","ecosystem":"pypi","requirements":"2025.2.0.20250809","direct":false,"kind":"runtime","optional":false},{"id":25776700337,"package_name":"typing-extensions","ecosystem":"pypi","requirements":"4.15.0","direct":false,"kind":"runtime","optional":false},{"id":25776700338,"package_name":"typing-inspection","ecosystem":"pypi","requirements":"0.4.2","direct":false,"kind":"runtime","optional":false},{"id":25776700339,"package_name":"urllib3","ecosystem":"pypi","requirements":"2.5.0","direct":false,"kind":"runtime","optional":false},{"id":25776700340,"package_name":"verspec","ecosystem":"pypi","requirements":"0.1.0","direct":false,"kind":"runtime","optional":false},{"id":25776700341,"package_name":"watchdog","ecosystem":"pypi","requirements":"6.0.0","direct":false,"kind":"runtime","optional":false},{"id":25776700342,"package_name":"zipp","ecosystem":"pypi","requirements":"3.23.0","direct":false,"kind":"runtime","optional":false}]}],"score":24.712308863252826,"created_at":"2025-12-20T09:42:06.758Z","updated_at":"2026-05-30T16:01:19.406Z","avatar_url":"https://github.com/samuelcolvin.png","language":"Python","codemeta":null,"publiccode":null,"project_url":"https://summary.ecosyste.ms/api/v1/projects/370002","html_url":"https://summary.ecosyste.ms/projects/370002"}