{"id":18560964,"url":"https://github.com/utilyre/summer","last_synced_at":"2026-02-10T03:01:29.623Z","repository":{"id":187241912,"uuid":"676549045","full_name":"utilyre/summer","owner":"utilyre","description":"🔥 High-performance utility for generating checksums in parallel","archived":false,"fork":false,"pushed_at":"2025-02-06T19:55:56.000Z","size":5883,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-10T18:12:33.708Z","etag":null,"topics":["cli","digest","library","md5","parallel-computing","performance","sha1","sha256","sha512","tool","utility"],"latest_commit_sha":null,"homepage":"https://pkg.go.dev/github.com/utilyre/summer","language":"Go","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/utilyre.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-08-09T13:04:41.000Z","updated_at":"2025-02-06T19:55:59.000Z","dependencies_parsed_at":"2023-08-09T15:11:46.462Z","dependency_job_id":"7eaa5b73-a2e9-4693-abb8-ee252b4ff1d3","html_url":"https://github.com/utilyre/summer","commit_stats":null,"previous_names":["utilyre/summer"],"tags_count":15,"template":false,"template_full_name":null,"purl":"pkg:github/utilyre/summer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/utilyre%2Fsummer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/utilyre%2Fsummer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/utilyre%2Fsummer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/utilyre%2Fsummer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/utilyre","download_url":"https://codeload.github.com/utilyre/summer/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/utilyre%2Fsummer/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29289899,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-10T02:32:08.756Z","status":"ssl_error","status_checked_at":"2026-02-10T02:30:31.937Z","response_time":65,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","digest","library","md5","parallel-computing","performance","sha1","sha256","sha512","tool","utility"],"created_at":"2024-11-06T22:05:18.770Z","updated_at":"2026-02-10T03:01:29.606Z","avatar_url":"https://github.com/utilyre.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003ch1\u003e\n    summer\n    \u003cbr /\u003e\n    \u003ca href=\"https://github.com/utilyre/summer/releases/latest\"\u003e\n      \u003cimg alt=\"license\" src=\"https://img.shields.io/github/v/tag/utilyre/summer?label=version\" /\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://go.dev\"\u003e\n      \u003cimg alt=\"downloads\" src=\"https://img.shields.io/github/go-mod/go-version/utilyre/summer?label=go\" /\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://github.com/utilyre/summer/issues\"\u003e\n      \u003cimg alt=\"issues\" src=\"https://img.shields.io/github/issues/utilyre/bevy_prank?label=issues\" /\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://github.com/utilyre/summer/actions/workflows/ci.yaml\"\u003e\n      \u003cimg alt=\"version\" src=\"https://img.shields.io/github/actions/workflow/status/utilyre/summer/ci.yaml?label=ci\" /\u003e\n    \u003c/a\u003e\n  \u003c/h1\u003e\n  \u003cp\u003e\n    High-performance utility for generating checksums in parallel, capable of\n    handling a 5GB database in less than 2 seconds.\n  \u003c/p\u003e\n\u003c/div\u003e\n\n## Installation\n\n- [Latest Release](https://github.com/utilyre/summer/releases/latest)\n\n- Manual\n\n  ```bash\n  go install github.com/utilyre/summer/cmd/summer@latest\n  ```\n\n## Usage\n\nFor starters, you can run the `generate` command on any file:\n\n```\n$ summer generate foo bar\n764efa883dda1e11db47671c4a3bbd9e  foo\n081ecc5e6dd6ba0d150fc4bc0e62ec50  bar\n```\n\nAdd the `-r` flag to generate checksums for directories recursively:\n\n```\n$ summer generate -r bar nested\n081ecc5e6dd6ba0d150fc4bc0e62ec50  bar\n168065a0236e2e64c9c6cdd086c55f63  nested/baz\n```\n\nTo utilize more cores of your CPU, pass `--open-file-jobs=n` and\n`--digest-jobs=m` flags, where `n` and `m` are the number of jobs used for each\ntask respectively.\n\nRun `summer help generate` to learn more about different flags.\n\n## API\n\nIt is possible to call the API of this utility directly in your own\napplication. Here's an example:\n\n```go\npackage main\n\nimport (\n\t\"context\"\n\t\"log\"\n\n\t\"github.com/utilyre/summer/pkg/summer\"\n)\n\nfunc main() {\n\ts, err := summer.New()\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\n\tchecksums, err := s.Sum(context.TODO(), \"foo\", \"bar\")\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\n\tfor cs := range checksums {\n\t\tif cs.Err != nil {\n\t\t\tlog.Println(result.Err)\n\t\t\tcontinue\n\t\t}\n\n\t\t// use cs\n\t}\n}\n```\n\nFor more information visit the [Documentation][docs].\n\n[docs]: https://pkg.go.dev/github.com/utilyre/summer\n\n## How It Works\n\nThis CLI tool efficiently calculates checksums by processing files in parallel\nusing a multi-stage pipeline. The pipeline architecture allows different tasks\nto be processed concurrently, optimizing performance. The process consists of\nthe following stages:\n\n1. **Walk:** The tool recursively scans the given files and\n   directories, identifying all regular files. Each discovered file name is\n   then passed to the next stage.\n\n2. **Open File:** The file names are used to open the corresponding files,\n   producing data streams for their contents. These streams are then sent to\n   the next stage.\n\n3. **Digest:** Each data stream is processed to compute its hash.\n\nFinally, all the calculated hashes are aggregated and streamed as checksums.\n\nThe [`pipeline`][pipeline] package handles data flow and parallel execution,\nensuring efficient processing. The Data Flow Diagram (DFD) below visually\nrepresents the process:\n\n![Data Flow Diagram](./docs/dfd.png)\n\nBy leveraging this pipeline-based approach, the tool efficiently computes\nchecksums for large sets of files with minimal overhead.\n\n[pipeline]: https://pkg.go.dev/github.com/utilyre/summer/pkg/pipeline\n\n## License\n\nThis project is licensed under the [Apache License 2.0][license]. You are free\nto use, modify, and distribute it under the terms of this license.\n\n[license]: https://www.apache.org/licenses/LICENSE-2.0\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Futilyre%2Fsummer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Futilyre%2Fsummer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Futilyre%2Fsummer/lists"}