{"id":13626171,"url":"https://github.com/sbdchd/squawk","last_synced_at":"2026-04-27T06:04:15.666Z","repository":{"id":37793353,"uuid":"270156402","full_name":"sbdchd/squawk","owner":"sbdchd","description":"🐘 Linter for Postgres migrations \u0026 SQL","archived":false,"fork":false,"pushed_at":"2026-04-22T01:18:39.000Z","size":14832,"stargazers_count":1057,"open_issues_count":41,"forks_count":62,"subscribers_count":4,"default_branch":"master","last_synced_at":"2026-04-22T03:03:38.653Z","etag":null,"topics":["linter","postgres","postgresql","rust","sql"],"latest_commit_sha":null,"homepage":"https://squawkhq.com","language":"PLpgSQL","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sbdchd.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE-APACHE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-06-07T01:28:56.000Z","updated_at":"2026-04-22T01:18:42.000Z","dependencies_parsed_at":"2026-01-31T08:05:04.009Z","dependency_job_id":"1feb7ec6-8fa7-4104-aff8-90406b053c67","html_url":"https://github.com/sbdchd/squawk","commit_stats":{"total_commits":271,"total_committers":29,"mean_commits":9.344827586206897,"dds":0.5904059040590406,"last_synced_commit":"0917fe45fc68bfe0863bfe73551a122143d6e433"},"previous_names":[],"tags_count":120,"template":false,"template_full_name":null,"purl":"pkg:github/sbdchd/squawk","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sbdchd%2Fsquawk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sbdchd%2Fsquawk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sbdchd%2Fsquawk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sbdchd%2Fsquawk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sbdchd","download_url":"https://codeload.github.com/sbdchd/squawk/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sbdchd%2Fsquawk/sbom","scorecard":{"id":65133,"data":{"date":"2025-08-04","repo":{"name":"github.com/sbdchd/squawk","commit":"94089787eb77d9a5e96ec26c912806a432cd39ed"},"scorecard":{"version":"v5.2.1-28-gc1d103a9","commit":"c1d103a9bb9f635ec7260bf9aa0699466fa4be0e"},"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/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#dangerous-workflow"}},{"name":"Code-Review","score":9,"reason":"Found 29/30 approved changesets -- score normalized to 9","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/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#code-review"}},{"name":"Maintained","score":10,"reason":"30 commit(s) and 22 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: jobLevel 'contents' permission set to 'write': .github/workflows/python.yml:143","Info: jobLevel 'contents' permission set to 'read': .github/workflows/rust.yml:184","Warn: no topLevel permission defined: .github/workflows/js.yml:1","Info: topLevel 'contents' permission set to 'read': .github/workflows/python.yml:13","Warn: no topLevel permission defined: .github/workflows/rust.yml:1","Warn: no topLevel permission defined: .github/workflows/vscode.yml:1"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#token-permissions"}},{"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/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#cii-best-practices"}},{"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/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#binary-artifacts"}},{"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/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#security-policy"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE-APACHE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE-APACHE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/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/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#fuzzing"}},{"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/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#branch-protection"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v2.22.0 not signed: https://api.github.com/repos/sbdchd/squawk/releases/238470710","Warn: release artifact v2.21.1 not signed: https://api.github.com/repos/sbdchd/squawk/releases/235051674","Warn: release artifact v2.21.0 not signed: https://api.github.com/repos/sbdchd/squawk/releases/234725406","Warn: release artifact v2.20.0 not signed: https://api.github.com/repos/sbdchd/squawk/releases/231994951","Warn: release artifact v2.19.0 not signed: https://api.github.com/repos/sbdchd/squawk/releases/231308569","Warn: release artifact v2.22.0 does not have provenance: https://api.github.com/repos/sbdchd/squawk/releases/238470710","Warn: release artifact v2.21.1 does not have provenance: https://api.github.com/repos/sbdchd/squawk/releases/235051674","Warn: release artifact v2.21.0 does not have provenance: https://api.github.com/repos/sbdchd/squawk/releases/234725406","Warn: release artifact v2.20.0 does not have provenance: https://api.github.com/repos/sbdchd/squawk/releases/231994951","Warn: release artifact v2.19.0 does not have provenance: https://api.github.com/repos/sbdchd/squawk/releases/231308569"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#signed-releases"}},{"name":"Pinned-Dependencies","score":3,"reason":"dependency not pinned by hash detected -- score normalized to 3","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/js.yml:29: update your workflow using https://app.stepsecurity.io/secureworkflow/sbdchd/squawk/js.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/js.yml:31: update your workflow using https://app.stepsecurity.io/secureworkflow/sbdchd/squawk/js.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/js.yml:46: update your workflow using https://app.stepsecurity.io/secureworkflow/sbdchd/squawk/js.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/js.yml:48: update your workflow using https://app.stepsecurity.io/secureworkflow/sbdchd/squawk/js.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/js.yml:63: update your workflow using https://app.stepsecurity.io/secureworkflow/sbdchd/squawk/js.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/js.yml:65: update your workflow using https://app.stepsecurity.io/secureworkflow/sbdchd/squawk/js.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/python.yml:77: update your workflow using https://app.stepsecurity.io/secureworkflow/sbdchd/squawk/python.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/python.yml:79: update your workflow using https://app.stepsecurity.io/secureworkflow/sbdchd/squawk/python.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/python.yml:86: update your workflow using https://app.stepsecurity.io/secureworkflow/sbdchd/squawk/python.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/python.yml:104: update your workflow using https://app.stepsecurity.io/secureworkflow/sbdchd/squawk/python.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/python.yml:106: update your workflow using https://app.stepsecurity.io/secureworkflow/sbdchd/squawk/python.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/python.yml:113: update your workflow using https://app.stepsecurity.io/secureworkflow/sbdchd/squawk/python.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/python.yml:124: update your workflow using https://app.stepsecurity.io/secureworkflow/sbdchd/squawk/python.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/python.yml:126: update your workflow using https://app.stepsecurity.io/secureworkflow/sbdchd/squawk/python.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/python.yml:132: update your workflow using https://app.stepsecurity.io/secureworkflow/sbdchd/squawk/python.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/python.yml:147: update your workflow using https://app.stepsecurity.io/secureworkflow/sbdchd/squawk/python.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/python.yml:149: update your workflow using https://app.stepsecurity.io/secureworkflow/sbdchd/squawk/python.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/python.yml:47: update your workflow using https://app.stepsecurity.io/secureworkflow/sbdchd/squawk/python.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/python.yml:49: update your workflow using https://app.stepsecurity.io/secureworkflow/sbdchd/squawk/python.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/python.yml:59: update your workflow using https://app.stepsecurity.io/secureworkflow/sbdchd/squawk/python.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/rust.yml:74: update your workflow using https://app.stepsecurity.io/secureworkflow/sbdchd/squawk/rust.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/rust.yml:110: update your workflow using https://app.stepsecurity.io/secureworkflow/sbdchd/squawk/rust.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/rust.yml:130: update your workflow using https://app.stepsecurity.io/secureworkflow/sbdchd/squawk/rust.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/rust.yml:135: update your workflow using https://app.stepsecurity.io/secureworkflow/sbdchd/squawk/rust.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/rust.yml:150: update your workflow using https://app.stepsecurity.io/secureworkflow/sbdchd/squawk/rust.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/rust.yml:170: update your workflow using https://app.stepsecurity.io/secureworkflow/sbdchd/squawk/rust.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/rust.yml:171: update your workflow using https://app.stepsecurity.io/secureworkflow/sbdchd/squawk/rust.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/rust.yml:234: update your workflow using https://app.stepsecurity.io/secureworkflow/sbdchd/squawk/rust.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/rust.yml:242: update your workflow using https://app.stepsecurity.io/secureworkflow/sbdchd/squawk/rust.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/rust.yml:245: update your workflow using https://app.stepsecurity.io/secureworkflow/sbdchd/squawk/rust.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/rust.yml:261: update your workflow using https://app.stepsecurity.io/secureworkflow/sbdchd/squawk/rust.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/rust.yml:283: update your workflow using https://app.stepsecurity.io/secureworkflow/sbdchd/squawk/rust.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/rust.yml:308: update your workflow using https://app.stepsecurity.io/secureworkflow/sbdchd/squawk/rust.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/rust.yml:326: update your workflow using https://app.stepsecurity.io/secureworkflow/sbdchd/squawk/rust.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/rust.yml:327: update your workflow using https://app.stepsecurity.io/secureworkflow/sbdchd/squawk/rust.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/rust.yml:193: update your workflow using https://app.stepsecurity.io/secureworkflow/sbdchd/squawk/rust.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/rust.yml:204: update your workflow using https://app.stepsecurity.io/secureworkflow/sbdchd/squawk/rust.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/rust.yml:216: update your workflow using https://app.stepsecurity.io/secureworkflow/sbdchd/squawk/rust.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/rust.yml:219: update your workflow using https://app.stepsecurity.io/secureworkflow/sbdchd/squawk/rust.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/rust.yml:340: update your workflow using https://app.stepsecurity.io/secureworkflow/sbdchd/squawk/rust.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/rust.yml:342: update your workflow using https://app.stepsecurity.io/secureworkflow/sbdchd/squawk/rust.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/rust.yml:346: update your workflow using https://app.stepsecurity.io/secureworkflow/sbdchd/squawk/rust.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/rust.yml:356: update your workflow using https://app.stepsecurity.io/secureworkflow/sbdchd/squawk/rust.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/vscode.yml:29: update your workflow using https://app.stepsecurity.io/secureworkflow/sbdchd/squawk/vscode.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/vscode.yml:31: update your workflow using https://app.stepsecurity.io/secureworkflow/sbdchd/squawk/vscode.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/vscode.yml:35: update your workflow using https://app.stepsecurity.io/secureworkflow/sbdchd/squawk/vscode.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/vscode.yml:54: update your workflow using https://app.stepsecurity.io/secureworkflow/sbdchd/squawk/vscode.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/vscode.yml:56: update your workflow using https://app.stepsecurity.io/secureworkflow/sbdchd/squawk/vscode.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/vscode.yml:60: update your workflow using https://app.stepsecurity.io/secureworkflow/sbdchd/squawk/vscode.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/vscode.yml:79: update your workflow using https://app.stepsecurity.io/secureworkflow/sbdchd/squawk/vscode.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/vscode.yml:81: update your workflow using https://app.stepsecurity.io/secureworkflow/sbdchd/squawk/vscode.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/vscode.yml:85: update your workflow using https://app.stepsecurity.io/secureworkflow/sbdchd/squawk/vscode.yml/master?enable=pin","Warn: containerImage not pinned by hash: Dockerfile:2","Warn: containerImage not pinned by hash: Dockerfile:28: pin your Docker image by updating debian:bookworm-slim to debian:bookworm-slim@sha256:2424c1850714a4d94666ec928e24d86de958646737b1d113f5b2207be44d37d8","Warn: downloadThenRun not pinned by hash: .github/workflows/rust.yml:241","Info:   0 out of  37 GitHub-owned GitHubAction dependencies pinned","Info:  13 out of  28 third-party GitHubAction dependencies pinned","Info:   0 out of   2 containerImage dependencies pinned","Info:   0 out of   1 downloadThenRun 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/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#pinned-dependencies"}},{"name":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/rust.yml:179"],"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/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/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 30 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":0,"reason":"156 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-xffm-g5w8-qvg7","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-67mh-4wv8-2f99","Warn: Project is vulnerable to: RUSTSEC-2021-0139","Warn: Project is vulnerable to: RUSTSEC-2021-0145 / GHSA-g98v-hv3f-hcfr","Warn: Project is vulnerable to: RUSTSEC-2024-0375","Warn: Project is vulnerable to: RUSTSEC-2022-0078 / GHSA-f85w-wvc7-crwc","Warn: Project is vulnerable to: RUSTSEC-2022-0041 / GHSA-qc84-gqf4-9926","Warn: Project is vulnerable to: RUSTSEC-2019-0036 / RUSTSEC-2020-0036 / GHSA-jq66-xh47-j9f3 / GHSA-r98r-j25q-rmpr","Warn: Project is vulnerable to: RUSTSEC-2023-0034 / GHSA-f8vr-r385-rh5r","Warn: Project is vulnerable to: RUSTSEC-2024-0003 / GHSA-8r5v-vm4m-4g25","Warn: Project is vulnerable to: RUSTSEC-2024-0332 / GHSA-q6cp-qfwq-4gcv","Warn: Project is vulnerable to: RUSTSEC-2021-0079 / GHSA-5h46-h7hh-c6x9","Warn: Project is vulnerable to: RUSTSEC-2021-0078 / GHSA-f3pg-qwvg-p99c","Warn: Project is vulnerable to: RUSTSEC-2022-0022 / GHSA-f67m-9j94-qv9j","Warn: Project is vulnerable to: RUSTSEC-2024-0421 / GHSA-h97m-ww89-6jmq","Warn: Project is vulnerable to: RUSTSEC-2024-0384","Warn: Project is vulnerable to: RUSTSEC-2020-0070 / GHSA-5wg8-7c9q-794v / GHSA-gmv4-vmx3-x9f3 / GHSA-hj9h-wrgg-hgmx / GHSA-ppj3-7jw3-8vc4 / GHSA-vh4p-6j7g-f4j9","Warn: Project is vulnerable to: RUSTSEC-2023-0045 / GHSA-wfg4-322g-9vqv","Warn: Project is vulnerable to: RUSTSEC-2020-0016","Warn: Project is vulnerable to: RUSTSEC-2023-0022 / GHSA-3gxf-9r58-2ghg","Warn: Project is vulnerable to: RUSTSEC-2023-0024 / GHSA-6hcf-g6gr-hhcr","Warn: Project is vulnerable to: RUSTSEC-2023-0023 / GHSA-9qwg-crg9-m2vc","Warn: Project is vulnerable to: RUSTSEC-2023-0044 / GHSA-xcf7-rvmh-g6q4","Warn: Project is vulnerable to: RUSTSEC-2023-0072 / GHSA-xphf-cx8h-7q9g","Warn: Project is vulnerable to: GHSA-q445-7m23-qrmw","Warn: Project is vulnerable to: RUSTSEC-2024-0357","Warn: Project is vulnerable to: RUSTSEC-2025-0004 / GHSA-rpmj-rpgj-qmpm","Warn: Project is vulnerable to: GHSA-4fcv-w3qc-ppgg","Warn: Project is vulnerable to: RUSTSEC-2025-0022","Warn: Project is vulnerable to: RUSTSEC-2024-0370","Warn: Project is vulnerable to: RUSTSEC-2023-0018 / GHSA-mc8h-8q98-g5hr","Warn: Project is vulnerable to: RUSTSEC-2025-0010","Warn: Project is vulnerable to: GHSA-4p46-pwfr-66x6","Warn: Project is vulnerable to: RUSTSEC-2025-0009","Warn: Project is vulnerable to: GHSA-c86p-w88r-qvqr","Warn: Project is vulnerable to: RUSTSEC-2020-0071 / GHSA-wcg3-cvx6-7396","Warn: Project is vulnerable to: RUSTSEC-2021-0124 / GHSA-fg7r-2g4j-5cgr","Warn: Project is vulnerable to: GHSA-968p-4wvh-cqc8","Warn: Project is vulnerable to: GHSA-67hx-6x53-jw92","Warn: Project is vulnerable to: GHSA-c2jc-4fpr-4vhg","Warn: Project is vulnerable to: GHSA-vpf5-82c8-9v36","Warn: Project is vulnerable to: GHSA-whgm-jr23-g3j9","Warn: Project is vulnerable to: GHSA-93q8-gq69-wqmw","Warn: Project is vulnerable to: GHSA-fwr7-v2mv-hh25","Warn: Project is vulnerable to: GHSA-cph5-m8f7-6c5x","Warn: Project is vulnerable to: GHSA-wf5p-g6vw-rhxx","Warn: Project is vulnerable to: GHSA-jr5f-v2jv-69x6","Warn: Project is vulnerable to: GHSA-qwcr-r2fm-qrc7","Warn: Project is vulnerable to: GHSA-grv7-fg5c-xmjg","Warn: Project is vulnerable to: GHSA-x9w5-v3q2-3rhw","Warn: Project is vulnerable to: GHSA-w8qv-6jwh-64r5","Warn: Project is vulnerable to: GHSA-257v-vj4p-3w2h","Warn: Project is vulnerable to: GHSA-pxg6-pf52-xh8x","Warn: Project is vulnerable to: GHSA-7gc6-qh9x-w6h8","Warn: Project is vulnerable to: GHSA-3xgq-45jj-v275","Warn: Project is vulnerable to: GHSA-w573-4hg7-7wgq","Warn: Project is vulnerable to: GHSA-3wcq-x3mq-6r9p","Warn: Project is vulnerable to: GHSA-phwq-j96m-2c2q","Warn: Project is vulnerable to: GHSA-ghr5-ch3p-vcr6","Warn: Project is vulnerable to: GHSA-434g-2637-qmqr","Warn: Project is vulnerable to: GHSA-49q7-c7j4-3p7m","Warn: Project is vulnerable to: GHSA-977x-g7h5-7qgw","Warn: Project is vulnerable to: GHSA-f7q4-pwc6-w24p","Warn: Project is vulnerable to: GHSA-fc9h-whq2-v747","Warn: Project is vulnerable to: GHSA-vjh7-7g9h-fjfh","Warn: Project is vulnerable to: GHSA-mf6x-hrgr-658f","Warn: Project is vulnerable to: GHSA-xrh7-m5pp-39r6","Warn: Project is vulnerable to: GHSA-6h5x-7c5m-7cr7","Warn: Project is vulnerable to: GHSA-rv95-896h-c2vc","Warn: Project is vulnerable to: GHSA-qw6h-vgh9-j6wx","Warn: Project is vulnerable to: GHSA-74fj-2j2h-c42q","Warn: Project is vulnerable to: GHSA-pw2r-vq6v-hr8c","Warn: Project is vulnerable to: GHSA-jchw-25xp-jwwc","Warn: Project is vulnerable to: GHSA-cxjh-pqwp-8mfp","Warn: Project is vulnerable to: GHSA-ww39-953v-wcq6","Warn: Project is vulnerable to: GHSA-pfrx-2q88-qq97","Warn: Project is vulnerable to: GHSA-rc47-6667-2j5j","Warn: Project is vulnerable to: GHSA-c7qv-q95q-8v27","Warn: Project is vulnerable to: GHSA-78xj-cgh5-2h22","Warn: Project is vulnerable to: GHSA-2p57-rm9w-gvfp","Warn: Project is vulnerable to: GHSA-7r28-3m3f-r2pr","Warn: Project is vulnerable to: GHSA-r8j5-h5cx-65gg","Warn: Project is vulnerable to: GHSA-9c47-m6qq-7p4h","Warn: Project is vulnerable to: GHSA-76p3-8jx3-jpfq","Warn: Project is vulnerable to: GHSA-3rfm-jhwj-7488","Warn: Project is vulnerable to: GHSA-hhq3-ff78-jv3g","Warn: Project is vulnerable to: GHSA-29mw-wpgm-hmr9","Warn: Project is vulnerable to: GHSA-35jh-r3h4-6jhm","Warn: Project is vulnerable to: GHSA-p6mc-m468-83gw","Warn: Project is vulnerable to: GHSA-952p-6rrq-rcjv","Warn: Project is vulnerable to: GHSA-f8q6-p94x-37v3","Warn: Project is vulnerable to: GHSA-xvch-5gv4-984h","Warn: Project is vulnerable to: GHSA-r683-j2x4-v87g","Warn: Project is vulnerable to: GHSA-5rrq-pxf6-6jx5","Warn: Project is vulnerable to: GHSA-8fr3-hfg3-gpgp","Warn: Project is vulnerable to: GHSA-gf8q-jrpm-jvxq","Warn: Project is vulnerable to: GHSA-2r2c-g63r-vccr","Warn: Project is vulnerable to: GHSA-cfm4-qjh2-4765","Warn: Project is vulnerable to: GHSA-x4jg-mjrx-434g","Warn: Project is vulnerable to: GHSA-px4h-xg32-q955","Warn: Project is vulnerable to: GHSA-rp65-9cf3-cjxr","Warn: Project is vulnerable to: GHSA-76c9-3jph-rj3q","Warn: Project is vulnerable to: GHSA-hj48-42vr-x3v9","Warn: Project is vulnerable to: GHSA-9wv6-86v2-598j","Warn: Project is vulnerable to: GHSA-rhx6-c78j-4q9w","Warn: Project is vulnerable to: GHSA-h7cp-r72f-jxh6","Warn: Project is vulnerable to: GHSA-v62p-rq8g-8h59","Warn: Project is vulnerable to: GHSA-566m-qj78-rww5","Warn: Project is vulnerable to: GHSA-hwj9-h5mp-3pm3","Warn: Project is vulnerable to: GHSA-7fh5-64p2-3v2j","Warn: Project is vulnerable to: GHSA-gj77-59wh-66hg","Warn: Project is vulnerable to: GHSA-hqhp-5p83-hx96","Warn: Project is vulnerable to: GHSA-3949-f494-cm99","Warn: Project is vulnerable to: GHSA-x7hr-w5r2-h6wg","Warn: Project is vulnerable to: GHSA-hrpp-h998-j3pp","Warn: Project is vulnerable to: GHSA-5q6m-3h65-w53x","Warn: Project is vulnerable to: GHSA-c2qf-rxjj-qqgw","Warn: Project is vulnerable to: GHSA-m6fv-jmcg-4jfg","Warn: Project is vulnerable to: GHSA-cm22-4g7w-348p","Warn: Project is vulnerable to: GHSA-g4rg-993r-mgx7","Warn: Project is vulnerable to: GHSA-4rq4-32rv-6wp6","Warn: Project is vulnerable to: GHSA-64g7-mvw6-v9qj","Warn: Project is vulnerable to: GHSA-vx3p-948g-6vhq","Warn: Project is vulnerable to: GHSA-3jfq-g458-7qm9","Warn: Project is vulnerable to: GHSA-r628-mhmh-qjhw","Warn: Project is vulnerable to: GHSA-9r2w-394v-53qc","Warn: Project is vulnerable to: GHSA-5955-9wpr-37jh","Warn: Project is vulnerable to: GHSA-qq89-hq3f-393p","Warn: Project is vulnerable to: GHSA-f5x3-32g6-xq36","Warn: Project is vulnerable to: GHSA-4wf5-vphf-c2xc","Warn: Project is vulnerable to: GHSA-52f5-9888-hmc6","Warn: Project is vulnerable to: GHSA-w5p7-h5w8-2hfq","Warn: Project is vulnerable to: GHSA-fhg7-m89q-25r3","Warn: Project is vulnerable to: GHSA-9m6j-fcg5-2442","Warn: Project is vulnerable to: GHSA-hh27-ffr2-f2jc","Warn: Project is vulnerable to: GHSA-rqff-837h-mm52","Warn: Project is vulnerable to: GHSA-8v38-pw62-9cw2","Warn: Project is vulnerable to: GHSA-hgjh-723h-mx2j","Warn: Project is vulnerable to: GHSA-jf5r-8hm2-f872","Warn: Project is vulnerable to: GHSA-wr3j-pwj9-hqq6","Warn: Project is vulnerable to: GHSA-4v9v-hfq4-rm2v","Warn: Project is vulnerable to: GHSA-9jgg-88mc-972h","Warn: Project is vulnerable to: GHSA-6fc8-4gx4-v693","Warn: Project is vulnerable to: GHSA-3h5v-q93c-6h6q","Warn: Project is vulnerable to: GHSA-x574-m823-4x7w","Warn: Project is vulnerable to: GHSA-4r4m-qw57-chr8","Warn: Project is vulnerable to: GHSA-xcj6-pq6g-qj4x","Warn: Project is vulnerable to: GHSA-356w-63v5-8wf4","Warn: Project is vulnerable to: GHSA-859w-5945-r5v3","Warn: Project is vulnerable to: GHSA-fjxv-7rqg-78g4","Warn: Project is vulnerable to: GHSA-v88g-cgmw-v5xw","Warn: Project is vulnerable to: GHSA-gxpj-cx7g-858c","Warn: Project is vulnerable to: GHSA-43f8-2h32-f4cj","Warn: Project is vulnerable to: GHSA-w7rc-rwvf-8q5r","Warn: Project is vulnerable to: GHSA-j8xg-fqg3-53r7"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-15T02:26:16.116Z","repository_id":37793353,"created_at":"2025-08-15T02:26:16.117Z","updated_at":"2025-08-15T02:26:16.117Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32208477,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-24T03:15:14.334Z","status":"ssl_error","status_checked_at":"2026-04-24T03:15:11.608Z","response_time":64,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["linter","postgres","postgresql","rust","sql"],"created_at":"2024-08-01T21:02:11.781Z","updated_at":"2026-04-27T06:04:15.629Z","avatar_url":"https://github.com/sbdchd.png","language":"PLpgSQL","funding_links":[],"categories":["PLpgSQL","Rust"],"sub_categories":[],"readme":"# squawk [![npm](https://img.shields.io/npm/v/squawk-cli)](https://www.npmjs.com/package/squawk-cli)\n\n\u003e Linter for Postgres migrations \u0026 SQL\n\n[Quick Start](https://squawkhq.com/docs/) | [Playground](https://play.squawkhq.com) | [Rules Documentation](https://squawkhq.com/docs/rules) | [GitHub Action](https://github.com/sbdchd/squawk-action) | [DIY GitHub Integration](https://squawkhq.com/docs/github_app)\n\n## Why?\n\nPrevent unexpected downtime caused by database migrations and encourage best\npractices around Postgres schemas and SQL.\n\n## Install\n\n```shell\nnpm install -g squawk-cli\n\n# or via PYPI\npip install squawk-cli\n\n# or install binaries directly via the releases page\nhttps://github.com/sbdchd/squawk/releases\n```\n\n### Or via Docker\n\nYou can also run Squawk using Docker. The official image is available on GitHub Container Registry.\n\n```shell\n# Assuming you want to check sql files in the current directory\ndocker run --rm -v $(pwd):/data ghcr.io/sbdchd/squawk:latest *.sql\n```\n\n### Or via the Playground\n\nUse the WASM powered playground to check your SQL locally in the browser!\n\n\u003chttps://play.squawkhq.com\u003e\n\n### Or via VSCode\n\n\u003chttps://marketplace.visualstudio.com/items?itemName=sbdchd.squawk\u003e\n\n## Usage\n\n```shell\n❯ squawk example.sql\nwarning[prefer-bigint-over-int]: Using 32-bit integer fields can result in hitting the max `int` limit.\n  ╭▸ example.sql:6:10\n  │\n6 │     \"id\" serial NOT NULL PRIMARY KEY,\n  │          ━━━━━━\n  │\n  ├ help: Use 64-bit integer values instead to prevent hitting this limit.\n  ╭╴\n6 │     \"id\" bigserial NOT NULL PRIMARY KEY,\n  ╰╴         +++\nwarning[prefer-identity]: Serial types make schema, dependency, and permission management difficult.\n  ╭▸ example.sql:6:10\n  │\n6 │     \"id\" serial NOT NULL PRIMARY KEY,\n  │          ━━━━━━\n  │\n  ├ help: Use an `IDENTITY` column instead.\n  ╭╴\n6 -     \"id\" serial NOT NULL PRIMARY KEY,\n6 +     \"id\" integer generated by default as identity NOT NULL PRIMARY KEY,\n  ╰╴\nwarning[prefer-text-field]: Changing the size of a `varchar` field requires an `ACCESS EXCLUSIVE` lock, that will prevent all reads and writes to the table.\n  ╭▸ example.sql:7:13\n  │\n7 │     \"alpha\" varchar(100) NOT NULL\n  │             ━━━━━━━━━━━━\n  │\n  ├ help: Use a `TEXT` field with a `CHECK` constraint.\n  ╭╴\n7 -     \"alpha\" varchar(100) NOT NULL\n7 +     \"alpha\" text NOT NULL\n  ╰╴\nwarning[require-concurrent-index-creation]: During normal index creation, table updates are blocked, but reads are still allowed.\n   ╭▸ example.sql:10:1\n   │\n10 │ CREATE INDEX \"field_name_idx\" ON \"table_name\" (\"field_name\");\n   │ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ├ help: Use `concurrently` to avoid blocking writes.\n   ╭╴\n10 │ CREATE INDEX concurrently \"field_name_idx\" ON \"table_name\" (\"field_name\");\n   ╰╴             ++++++++++++\nwarning[constraint-missing-not-valid]: By default new constraints require a table scan and block writes to the table while that scan occurs.\n   ╭▸ example.sql:12:24\n   │\n12 │ ALTER TABLE table_name ADD CONSTRAINT field_name_constraint UNIQUE (field_name);\n   │                        ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: Use `NOT VALID` with a later `VALIDATE CONSTRAINT` call.\nwarning[disallowed-unique-constraint]: Adding a `UNIQUE` constraint requires an `ACCESS EXCLUSIVE` lock which blocks reads and writes to the table while the index is built.\n   ╭▸ example.sql:12:28\n   │\n12 │ ALTER TABLE table_name ADD CONSTRAINT field_name_constraint UNIQUE (field_name);\n   │                            ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n   │\n   ╰ help: Create an index `CONCURRENTLY` and create the constraint using the index.\n\nFind detailed examples and solutions for each rule at https://squawkhq.com/docs/rules\nFound 6 issues in 1 file (checked 1 source file)\n```\n\n### `squawk --help`\n\n```\nsquawk\nFind problems in your SQL\n\nUSAGE:\n    squawk [FLAGS] [OPTIONS] [path]... [SUBCOMMAND]\n\nFLAGS:\n        --assume-in-transaction\n            Assume that a transaction will wrap each SQL file when run by a migration tool\n\n            Use --no-assume-in-transaction to override this setting in any config file that exists\n    -h, --help\n            Prints help information\n\n    -V, --version\n            Prints version information\n\n        --verbose\n            Enable debug logging output\n\n\nOPTIONS:\n    -c, --config \u003cconfig-path\u003e\n            Path to the squawk config file (.squawk.toml)\n\n        --debug \u003cformat\u003e\n            Output debug info [possible values: Lex, Parse]\n\n        --exclude-path \u003cexcluded-path\u003e...\n            Paths to exclude\n\n            For example: --exclude-path=005_user_ids.sql --exclude-path=009_account_emails.sql\n\n            --exclude-path='*user_ids.sql'\n\n    -e, --exclude \u003crule\u003e...\n            Exclude specific warnings\n\n            For example: --exclude=require-concurrent-index-creation,ban-drop-database\n\n        --pg-version \u003cpg-version\u003e\n            Specify postgres version\n\n            For example: --pg-version=13.0\n        --reporter \u003creporter\u003e\n            Style of error reporting [possible values: Tty, Gcc, Json]\n\n        --stdin-filepath \u003cfilepath\u003e\n            Path to use in reporting for stdin\n\n\nARGS:\n    \u003cpath\u003e...\n            Paths to search\n\n\nSUBCOMMANDS:\n    help                Prints this message or the help of the given subcommand(s)\n    upload-to-github    Comment on a PR with Squawk's results\n```\n\n## Rules\n\nIndividual rules can be disabled via the `--exclude` flag\n\n```shell\nsquawk --exclude=adding-field-with-default,disallowed-unique-constraint example.sql\n```\n\n### Disabling rules via comments\n\nRule violations can be ignored via the `squawk-ignore` comment:\n\n```sql\n-- squawk-ignore ban-drop-column\nalter table t drop column c cascade;\n```\n\nYou can also ignore multiple rules by making a comma seperated list:\n\n```sql\n-- squawk-ignore ban-drop-column, renaming-column,ban-drop-database\nalter table t drop column c cascade;\n```\n\nTo ignore a rule for the entire file, use `squawk-ignore-file`:\n\n```sql\n-- squawk-ignore-file ban-drop-column\nalter table t drop column c cascade;\n-- also ignored!\nalter table t drop column d cascade;\n```\n\nOr leave off the rule names to ignore all rules for the file\n\n```sql\n-- squawk-ignore-file\nalter table t drop column c cascade;\ncreate table t (a int);\n```\n\n### Configuration file\n\nRules can also be disabled with a configuration file.\n\nBy default, Squawk will traverse up from the current directory to find a `.squawk.toml` configuration file. You may specify a custom path with the `-c` or `--config` flag.\n\n```shell\nsquawk --config=~/.squawk.toml example.sql\n```\n\nThe `--exclude` flag will always be prioritized over the configuration file.\n\n**Example `.squawk.toml`**\n\n```toml\nexcluded_rules = [\n    \"require-concurrent-index-creation\",\n    \"require-concurrent-index-deletion\",\n]\n```\n\nSee the [Squawk website](https://squawkhq.com/docs/rules) for documentation on each rule with examples and reasoning.\n\n## Bot Setup\n\nSquawk works as a CLI tool but can also create comments on GitHub Pull\nRequests using the `upload-to-github` subcommand.\n\nHere's an example comment created by `squawk` using the `example.sql` in the repo:\n\n\u003chttps://github.com/sbdchd/squawk/pull/14#issuecomment-647009446\u003e\n\nSee the [\"GitHub Integration\" docs](https://squawkhq.com/docs/github_app) for more information.\n\n## `pre-commit` hook\n\nIntegrate Squawk into Git workflow with [pre-commit](https://pre-commit.com/). Add the following\nto your project's `.pre-commit-config.yaml`:\n\n```yaml\nrepos:\n  - repo: https://github.com/sbdchd/squawk\n    rev: 2.42.0\n    hooks:\n      - id: squawk\n        files: path/to/postgres/migrations/written/in/sql\n```\n\nNote the `files` parameter as it specifies the location of the files to be linted.\n\n## Prior Art / Related\n\n- \u003chttps://github.com/erik/squabble\u003e\n- \u003chttps://github.com/yandex/zero-downtime-migrations\u003e\n- \u003chttps://github.com/tbicr/django-pg-zero-downtime-migrations\u003e\n- \u003chttps://github.com/3YOURMIND/django-migration-linter\u003e\n- \u003chttps://github.com/ankane/strong_migrations\u003e\n- \u003chttps://github.com/AdmTal/PostgreSQL-Query-Lock-Explainer\u003e\n- \u003chttps://github.com/stripe/pg-schema-diff\u003e\n- \u003chttps://github.com/kristiandupont/schemalint\u003e\n- \u003chttps://github.com/supabase-community/postgres-language-server\u003e\n- \u003chttps://github.com/premium-minds/sonar-postgres-plugin\u003e\n- \u003chttps://engineering.fb.com/2022/11/30/data-infrastructure/static-analysis-sql-queries/\u003e\n- \u003chttps://github.com/xNaCly/sqleibniz\u003e\n- \u003chttps://github.com/sqlfluff/sqlfluff\u003e\n- \u003chttps://atlasgo.io/lint/analyzers\u003e\n- \u003chttps://github.com/tobymao/sqlglot\u003e\n- \u003chttps://github.com/paupino/pg_parse\u003e\n- \u003chttps://github.com/sql-formatter-org/sql-formatter\u003e\n- \u003chttps://github.com/darold/pgFormatter\u003e\n- \u003chttps://github.com/sqls-server/sqls\u003e\n- \u003chttps://github.com/joe-re/sql-language-server\u003e\n- \u003chttps://github.com/nene/sql-parser-cst\u003e\n  - \u003chttps://github.com/nene/prettier-plugin-sql-cst\u003e\n- \u003chttps://www.sqlstyle.guide\u003e\n- \u003chttps://github.com/ivank/potygen\u003e\n\n## Related Blog Posts / SE Posts / PG Docs\n\n- \u003chttps://www.braintreepayments.com/blog/safe-operations-for-high-volume-postgresql/\u003e\n- \u003chttps://gocardless.com/blog/zero-downtime-postgres-migrations-the-hard-parts/\u003e\n- \u003chttps://www.citusdata.com/blog/2018/02/22/seven-tips-for-dealing-with-postgres-locks/\u003e\n- \u003chttps://realpython.com/create-django-index-without-downtime/#non-atomic-migrations\u003e\n- \u003chttps://dba.stackexchange.com/questions/158499/postgres-how-is-set-not-null-more-efficient-than-check-constraint\u003e\n- \u003chttps://www.postgresql.org/docs/10/sql-altertable.html#SQL-ALTERTABLE-NOTES\u003e\n- \u003chttps://www.postgresql.org/docs/current/explicit-locking.html\u003e\n- \u003chttps://benchling.engineering/move-fast-and-migrate-things-how-we-automated-migrations-in-postgres-d60aba0fc3d4\u003e\n- \u003chttps://medium.com/paypal-tech/postgresql-at-scale-database-schema-changes-without-downtime-20d3749ed680\u003e\n\n## Dev\n\n```shell\ncargo install\ncargo run\n./s/test\n./s/lint\n./s/fmt\n```\n\n... or with nix:\n\n```\n$ nix develop\n[nix-shell]$ cargo run\n[nix-shell]$ cargo insta review\n[nix-shell]$ ./s/test\n[nix-shell]$ ./s/lint\n[nix-shell]$ ./s/fmt\n```\n\n### Adding a New Rule\n\nWhen adding a new rule, running `cargo xtask new-rule` will create stubs for your rule in the Rust crate and in Documentation site.\n\n```bash\ncargo xtask new-rule 'prefer big serial'\n```\n\n### Releasing a New Version\n\n1. Run `s/update-version`\n\n   ```bash\n   # update version in squawk/Cargo.toml, package.json, flake.nix to 4.5.3\n   s/update-version 4.5.3\n   ```\n\n2. Update the `CHANGELOG.md`\n\n   Include a description of any fixes / additions. Make sure to include the PR numbers and credit the authors.\n\n3. Create a new release on GitHub\n\n   Use the text and version from the `CHANGELOG.md`\n\n### Algolia\n\nThe squawkhq.com Algolia index can be found on [the crawler website](https://crawler.algolia.com/admin/crawlers/9bf0dffb-bc5a-4d46-9b8d-2f1197285213/overview). Algolia reindexes the site every day at 5:30 (UTC).\n\n## How it Works\n\nSquawk uses its parser (based on rust-analyzer's parser) to create a CST. The\nlinters then use an AST layered on top of the CST to navigate and record\nwarnings, which are then pretty printed!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsbdchd%2Fsquawk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsbdchd%2Fsquawk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsbdchd%2Fsquawk/lists"}