{"id":28645083,"url":"https://github.com/harens/seaport","last_synced_at":"2026-03-01T09:32:28.208Z","repository":{"id":38304293,"uuid":"323965918","full_name":"harens/seaport","owner":"harens","description":"🌊 The modern MacPorts portfile updater 🌊","archived":false,"fork":false,"pushed_at":"2025-12-13T18:17:01.000Z","size":2485,"stargazers_count":15,"open_issues_count":20,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-12-15T12:31:11.043Z","etag":null,"topics":["checksums","clipboard","livecheck","macports","macports-ports","portfile","pypi"],"latest_commit_sha":null,"homepage":"https://seaport.rtfd.io","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/harens.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2020-12-23T17:41:45.000Z","updated_at":"2025-06-08T00:07:37.000Z","dependencies_parsed_at":"2025-06-13T00:33:59.471Z","dependency_job_id":"7599914a-e4f0-468a-8f83-e41327e4e8e2","html_url":"https://github.com/harens/seaport","commit_stats":null,"previous_names":[],"tags_count":16,"template":false,"template_full_name":null,"purl":"pkg:github/harens/seaport","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/harens%2Fseaport","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/harens%2Fseaport/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/harens%2Fseaport/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/harens%2Fseaport/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/harens","download_url":"https://codeload.github.com/harens/seaport/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/harens%2Fseaport/sbom","scorecard":{"id":455738,"data":{"date":"2025-08-11","repo":{"name":"github.com/harens/seaport","commit":"8bb98aee8e9a0da2ca61054f6210dc48ec686382"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.2,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/6 approved changesets -- score normalized to 0","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":"Security-Policy","score":9,"reason":"security policy file detected","details":["Info: security policy file detected: SECURITY.md:1","Info: Found linked content: SECURITY.md:1","Warn: One or no descriptive hints of disclosure, vulnerability, and/or timelines in security policy","Info: Found text in security policy: SECURITY.md:1"],"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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/codeql-analysis.yml:1","Warn: no topLevel permission defined: .github/workflows/shellcheck.yml:1","Warn: no topLevel permission defined: .github/workflows/test.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"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":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"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/codeql-analysis.yml:38: update your workflow using https://app.stepsecurity.io/secureworkflow/harens/seaport/codeql-analysis.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:42: update your workflow using https://app.stepsecurity.io/secureworkflow/harens/seaport/codeql-analysis.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:53: update your workflow using https://app.stepsecurity.io/secureworkflow/harens/seaport/codeql-analysis.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:67: update your workflow using https://app.stepsecurity.io/secureworkflow/harens/seaport/codeql-analysis.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/shellcheck.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/harens/seaport/shellcheck.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/shellcheck.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/harens/seaport/shellcheck.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:47: update your workflow using https://app.stepsecurity.io/secureworkflow/harens/seaport/test.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:49: update your workflow using https://app.stepsecurity.io/secureworkflow/harens/seaport/test.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test.yml:54: update your workflow using https://app.stepsecurity.io/secureworkflow/harens/seaport/test.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test.yml:64: update your workflow using https://app.stepsecurity.io/secureworkflow/harens/seaport/test.yml/master?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/test.yml:57","Info:   0 out of   7 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   3 third-party GitHubAction dependencies pinned","Info:   0 out of   1 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"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":"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":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: BSD 3-Clause \"New\" or \"Revised\" License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v0.10.1 not signed: https://api.github.com/repos/harens/seaport/releases/103735403","Warn: release artifact v0.10.0 not signed: https://api.github.com/repos/harens/seaport/releases/103734785","Warn: release artifact v0.9.0 not signed: https://api.github.com/repos/harens/seaport/releases/92140048","Warn: release artifact v0.10.1 does not have provenance: https://api.github.com/repos/harens/seaport/releases/103735403","Warn: release artifact v0.10.0 does not have provenance: https://api.github.com/repos/harens/seaport/releases/103734785","Warn: release artifact v0.9.0 does not have provenance: https://api.github.com/repos/harens/seaport/releases/92140048"],"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":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":7,"reason":"SAST tool detected but not run on all commits","details":["Info: SAST configuration detected: CodeQL","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"}},{"name":"Vulnerabilities","score":0,"reason":"25 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: PYSEC-2024-48 / GHSA-fj7x-q9j7-g6q6","Warn: Project is vulnerable to: PYSEC-2024-230 / GHSA-248v-346w-9cwc","Warn: Project is vulnerable to: PYSEC-2023-135 / GHSA-xqr8-7jwr-rhp7","Warn: Project is vulnerable to: PYSEC-2024-60 / GHSA-jjg7-2v4v-x38h","Warn: Project is vulnerable to: GHSA-cpwx-vrp4-4pq7","Warn: Project is vulnerable to: GHSA-gmj6-6f8f-6699","Warn: Project is vulnerable to: GHSA-h5c8-rqwp-cp95","Warn: Project is vulnerable to: GHSA-h75v-3vvj-5mfj","Warn: Project is vulnerable to: GHSA-q2x7-8rv6-6q7h","Warn: Project is vulnerable to: GHSA-9hjg-9r4m-mvj7","Warn: Project is vulnerable to: GHSA-9wx4-h78v-vm56","Warn: Project is vulnerable to: PYSEC-2025-49 / GHSA-5rjg-fvgr-3xxf","Warn: Project is vulnerable to: GHSA-cx63-2mw6-8hw5","Warn: Project is vulnerable to: GHSA-753j-mpmx-qq6g","Warn: Project is vulnerable to: GHSA-7cx3-6m66-7c5m","Warn: Project is vulnerable to: GHSA-8w49-h785-mj3c","Warn: Project is vulnerable to: PYSEC-2023-75 / GHSA-hj3f-6gcp-jg8j","Warn: Project is vulnerable to: GHSA-qppv-j76h-2rpx","Warn: Project is vulnerable to: GHSA-w235-7p84-xx57","Warn: Project is vulnerable to: GHSA-34jh-p97f-mpxf","Warn: Project is vulnerable to: PYSEC-2023-212 / GHSA-g4mx-q9vg-27p4","Warn: Project is vulnerable to: GHSA-pq67-6m6q-mj2v","Warn: Project is vulnerable to: PYSEC-2023-192 / GHSA-v845-jxx5-vc9f","Warn: Project is vulnerable to: PYSEC-2024-187 / GHSA-rqc4-2hc7-8c8v","Warn: Project is vulnerable to: GHSA-jfmj-5v4g-7637"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-19T09:34:58.498Z","repository_id":38304293,"created_at":"2025-08-19T09:34:58.499Z","updated_at":"2025-08-19T09:34:58.499Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29965605,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-01T06:55:38.174Z","status":"ssl_error","status_checked_at":"2026-03-01T06:53:04.810Z","response_time":124,"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":["checksums","clipboard","livecheck","macports","macports-ports","portfile","pypi"],"created_at":"2025-06-13T00:33:37.377Z","updated_at":"2026-03-01T09:32:28.190Z","avatar_url":"https://github.com/harens.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"🌊 seaport\n==========\n\n|ci-badge| |rtd-badge| |cov-badge|\n\nThe modern `MacPorts \u003chttps://www.macports.org\u003e`_ portfile updater.\n\n.. code-block::\n\n    \u003e seaport clip gping\n    🌊 Starting seaport...\n    👍 New version is 1.2.0-post\n    🔻 Downloading from https://github.com/orf/gping/tarball/v1.2.0-post/gping-1.2.0-post.tar.gz\n    🔎 Checksums:\n    Old rmd160: 8b274132c8389ec560f213007368c7f521fdf682\n    New rmd160: 4a614e35d4e1e496871ee2b270ba8836f84650c6\n    Old sha256: 1879b37f811c09e43d3759ccd97d9c8b432f06c75a27025cfa09404abdeda8f5\n    New sha256: 1008306e8293e7c59125de02e2baa6a17bc1c10de1daba2247bfc789eaf34ff5\n    Old size: 853432\n    New size: 853450\n    ⏪️ Changing revision numbers\n    No changes necessary\n    📋 The contents of the portfile have been copied to your clipboard!\n\nInstallation\n------------\n\nMacPorts 🍎\n************\n\n.. code-block::\n\n    sudo port install seaport\n\nPyPi 🐍\n********\n\n.. code-block::\n\n    pip3 install seaport\n    # Optionally, install GitHub CLI to send PRs\n    sudo port install gh\n\n⚡️ Features\n--------------\n\n🖥 `Command Line Tool \u003chttps://seaport.readthedocs.io/en/stable/overview.html\u003e`_\n*********************************************************************************\n\n* ⏩ **Automatically determines new version numbers and checksums** for MacPorts portfiles.\n* 📋 **Copies the changes to your clipboard**, and optionally **sends a PR to update them**.\n* 🔎 Contains **additional checking functionality**, such as running tests, linting and installing the updated program.\n\n🐍 `Python API \u003chttps://seaport.readthedocs.io/en/stable/reference.html\u003e`_\n****************************************************************************\n\n* 📚 Library for convenient access to portfile information. Easily import as a Python module for your project.\n* ⌨️ `PEP 561 compatible \u003chttps://www.python.org/dev/peps/pep-0561\u003e`_, with built in support for type checking.\n*  📦 Works out of the box with all `supported Python versions \u003chttps://endoflife.date/python\u003e`_ (3.7-3.11).\n\nTo find out more, please read the `Documentation \u003chttps://seaport.rtfd.io/\u003e`_.\n\n🤔 How to use seaport\n----------------------\n\nFor simple ports with straightforward updates, use :code:`seaport pr example_port`.\nThis sends a PR with the updated portfile and automatically fills in the PR template for you.\n\nFor ports that require some manual changes, use :code:`seaport clip example_port`.\nThis updates the version number and checksums so you don't have to. 😎\n\nBe sure to check out the `flags overview \u003chttps://seaport.readthedocs.io/en/stable/overview.html\u003e`_ for information on additional features.\n\n🔥 seaport vs port bump\n-------------------------\n\n.. list-table::\n   :widths: 25 25 25\n   :header-rows: 1\n\n   * - Features\n     - 🌊 seaport\n     - 🛼 port bump\n   * - 🔒 Updates checksums\n     - ✅\n     - ✅\n   * - 📚 Updates the revision number\n     - ✅\n     - ✅\n   * - 📝 Can write changes to the original file\n     - ✅\n     - ✅\n   * - ⏮ Can update portfile to a specific version\n     - ✅\n     - ✅\n   * - 🔮 Updates the version number via livecheck\n     - ✅\n     - ❌\n   * - 🚀 Can send a pull request (both for updated and new ports)\n     - ✅\n     - ❌\n   * - 🧪 Can lint/test/install the port to check if the update works\n     - ✅\n     - ❌\n   * - 📋 Copies changes to clipboard\n     - ✅\n     - ❌\n   * - 🌎 Can both manually and automatically set the url to download from\n     - ✅\n     - ❌\n\n🔨 Contributing\n---------------\n\n- Issue Tracker: `\u003chttps://github.com/harens/seaport/issues\u003e`_\n- Source Code: `\u003chttps://github.com/harens/seaport\u003e`_\n\nAny change, big or small, that you think can help improve this project is more than welcome 🎉.\n\nAs well as this, feel free to open an issue with any new suggestions or bug reports. Every contribution is appreciated.\n\nFor more information, please read our `contributing page \u003chttps://seaport.readthedocs.io/en/latest/contributing.html\u003e`_ on how to get started.\n\n©️ License\n----------\n\nSimilar to other MacPorts-based projects, seaport is licensed under the `BSD 3-Clause \"New\" or \"Revised\" License \u003chttps://github.com/harens/seaport/blob/master/LICENSE\u003e`_.\n\n📒 Notice of Non-Affiliation and Disclaimer\n-------------------------------------------\n\nThis project is not affiliated, associated, authorized, endorsed by, or in any way officially connected with the MacPorts Project, or any of its subsidiaries or its affiliates. The official MacPorts Project website can be found at `\u003chttps://www.macports.org\u003e`_.\n\nThe name MacPorts as well as related names, marks, emblems and images are registered trademarks of their respective owners.\n\n.. |ci-badge| image:: https://img.shields.io/github/actions/workflow/status/harens/seaport/test.yml?logo=github\u0026style=flat-square\n   :target: https://github.com/harens/seaport/actions\n   :alt: GitHub Workflow Status\n.. |rtd-badge| image:: https://img.shields.io/readthedocs/seaport?logo=read%20the%20docs\u0026style=flat-square\n   :target: https://seaport.rtfd.io/\n   :alt: Read the Docs\n.. |cov-badge| image:: https://img.shields.io/codecov/c/github/harens/seaport?logo=codecov\u0026style=flat-square\n   :target: https://codecov.io/gh/harens/seaport\n   :alt: Codecov\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fharens%2Fseaport","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fharens%2Fseaport","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fharens%2Fseaport/lists"}