{"id":42437138,"url":"https://github.com/bengarrett/sauce","last_synced_at":"2026-02-08T01:02:24.705Z","repository":{"id":57641120,"uuid":"433971959","full_name":"bengarrett/sauce","owner":"bengarrett","description":"Package sauce is a Go module that parses SAUCE metadata.","archived":false,"fork":false,"pushed_at":"2026-02-05T03:03:52.000Z","size":171,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-02-05T13:42:29.759Z","etag":null,"topics":["ansi","art","ascii","metadata","msdos","sauce","text","textart"],"latest_commit_sha":null,"homepage":"","language":"Go","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/bengarrett.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":"bengarrett","ko_fi":"codebyben"}},"created_at":"2021-12-01T20:17:08.000Z","updated_at":"2026-02-05T03:03:55.000Z","dependencies_parsed_at":"2024-02-27T05:28:41.233Z","dependency_job_id":"fff25fd9-724d-46d5-b484-4d8bcb9c06d0","html_url":"https://github.com/bengarrett/sauce","commit_stats":null,"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/bengarrett/sauce","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bengarrett%2Fsauce","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bengarrett%2Fsauce/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bengarrett%2Fsauce/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bengarrett%2Fsauce/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bengarrett","download_url":"https://codeload.github.com/bengarrett/sauce/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bengarrett%2Fsauce/sbom","scorecard":{"id":232468,"data":{"date":"2025-08-11","repo":{"name":"github.com/bengarrett/sauce","commit":"27167872bc29f56932f22f779d5cfe2648a77ee7"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.8,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"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":1,"reason":"2 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 1","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":0,"reason":"Found 0/9 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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/go.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":"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/go.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/bengarrett/sauce/go.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/go.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/bengarrett/sauce/go.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/go.yml:29: update your workflow using https://app.stepsecurity.io/secureworkflow/bengarrett/sauce/go.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/go.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/bengarrett/sauce/go.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/go.yml:43: update your workflow using https://app.stepsecurity.io/secureworkflow/bengarrett/sauce/go.yml/main?enable=pin","Info:   0 out of   2 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   3 third-party GitHubAction 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":"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":"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":"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: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"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":"SAST","score":5,"reason":"SAST tool is not run on all commits -- score normalized to 5","details":["Warn: 12 commits out of 21 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-17T05:05:19.860Z","repository_id":57641120,"created_at":"2025-08-17T05:05:19.860Z","updated_at":"2025-08-17T05:05:19.860Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29215879,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-08T00:10:47.190Z","status":"ssl_error","status_checked_at":"2026-02-08T00:10:43.589Z","response_time":63,"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":["ansi","art","ascii","metadata","msdos","sauce","text","textart"],"created_at":"2026-01-28T05:44:49.802Z","updated_at":"2026-02-08T01:02:24.695Z","avatar_url":"https://github.com/bengarrett.png","language":"Go","funding_links":["https://github.com/sponsors/bengarrett","https://ko-fi.com/codebyben"],"categories":[],"sub_categories":[],"readme":"[![Go Reference](https://pkg.go.dev/badge/github.com/bengarrett/sauce.svg)](https://pkg.go.dev/github.com/bengarrett/sauce) \u0026nbsp; [![Go Report Card](https://goreportcard.com/badge/github.com/bengarrett/sauce)](https://goreportcard.com/report/github.com/bengarrett/sauce)\n![Coverage](https://img.shields.io/badge/Coverage-91.6%25-brightgreen)\n\n# Package sauce\n\nPackage sauce is a [Go module](https://go.dev/) that parses SAUCE (Standard Architecture for Universal Comment Extensions) metadata.\n\n## Features\n\n- Parse SAUCE metadata from files\n- Extract comprehensive file information (title, author, group, date, etc.)\n- Support multiple file types and data types\n- Extract type-specific information\n- Parse comment blocks\n- Serialize to JSON format\n- Format dates and sizes for human readability\n- Provide comprehensive error handling\n\n\u003e The Standard Architecture for Universal Comment Extensions, or SAUCE as it is\nmore commonly known, is an architecture or protocol for attaching metadata\nor comments about files. Primarily designed for [ANSI art files](https://en.wikipedia.org/wiki/ANSI_art), SAUCE supports\nmany different file types.\n\nFor the complete specification see:\u003cbr\u003e\nhttp://www.acid.org/info/sauce/sauce.htm\u003cbr\u003e\nhttps://github.com/radman1/sauce\u003cbr\u003e\n\n## Quick usage\n\n\n[Go Package with docs and examples.](https://pkg.go.dev/github.com/bengarrett/sauce)\n\n```go\n// Open a file\nfile, err := os.Open(\"artwork.ans\")\nif err != nil {\n    log.Fatal(err)\n}\ndefer file.Close()\n\n// Read the file and create a SAUCE record\nsr, err := sauce.Read(file)\nif err != nil {\n    log.Println(err)\n    return\n}\n\n// print specific SAUCE fields\nfmt.Printf(\"%q\\n\", sr.Title)\nfmt.Printf(\"Author:\\t%s.\\n\", sr.Author)\nfmt.Printf(\"Group:\\t%s.\\n\", sr.Group)\nfmt.Printf(\"Date:\\t%s.\\n\", sr.Date.Time.Format(time.ANSIC))\n\n// print the SAUCE data as indented JSON\njs, err := sr.JSONIndent(\"  \")\nif err != nil {\n    log.Println(err)\n    return\n}\nfmt.Printf(\"%s\", js)\n```\n\n## SAUCE as an API reference\n\n- `id`\u003cbr\u003e\nSAUCE identification. This should be equal to `SAUCE`.\n\n- `version`\u003cbr\u003e\nSAUCE version number, should be `00`.\n\n- `title`\u003cbr\u003e\nTitle of the file.\n\n- `author`\u003cbr\u003e\nThe nick, name or handle of the creator of the file.\n\n- `group`\u003cbr\u003e\nThe name of the group or company the creator is employed by.\n\n- `date` - The date the file was created.\n- - `value` - SAUCE date format, CCYYMMDD (century, year, month, day).\n- - `iso` -  `value` as an ISO 8601 date.\n- - `epoch`- `value` as Unix time, the number of seconds since 1 Jan 1970.\n\n- `fileSize`\n- - `bytes` - The reported file size not including the SAUCE information.\n- - `decimal` - `bytes` returned as a base 10 value (kilo, mega...).\n- - `binary` - `bytes` returned as a base 2 value (kibi, mebi...).\n\n- `dataType` - Type of data.\n- - `type` - `DataType` value.\n- - `name` - `DataType` name.\n\n- `fileType` - Type of file.\n- - `type` - `FileType` value.\n- - `name` - `FileType` name.\n\n- `typeInfo` - Type-dependent information, see http://www.acid.org/info/sauce/sauce.htm#FileType\n  - `1`\n    - `value` - Value of `TInfo1`\n    - `info` - Human-readable description of the value\n  - `2`\n    - `value` - Value of `TInfo2`\n    - `info` - Human-readable description of the value\n  - `3`\n    - `value` - Value of `TInfo3`\n    - `info` - Human-readable description of the value\n\n- `flags` - Type-dependent flags\n  - `decimal` - Value as an unsigned integer\n  - `binary` - Value in binary notation\n  - `nonBlinkMode` - Request ANSI non-blink mode (iCE Color)\n    - `flag` - Value as binary bit boolean (\"0\" or \"1\")\n    - `interpretation` - Human-readable description of the value\n  - `letterSpacing` - ANSI letter-spacing to request 8 or 9 pixel font selection\n    - `flag` - Value as a 2-bit binary string (\"00\", \"01\", \"10\")\n    - `interpretation` - Human-readable description of the value\n  - `aspectRatio` - ANSI aspect ratio to request LCD square or CRT monitor style pixels\n    - `flag` - Value as a 2-bit binary string (\"00\", \"01\", \"10\")\n    - `interpretation` - Human-readable description of the value\n- `fontName` - The creator's preferred font to view the ANSI artwork, see http://www.acid.org/info/sauce/sauce.htm#FontName\n\n- `comments` - Comments or notes from the creator\n  - `id` - SAUCE comment block identification, this should be \"COMNT\"\n  - `count` - The reported number of lines in the SAUCE comment block\n  - `lines` - Lines of text, each line should comprise 64 characters\n\n---\n\n### Similar projects and languages\n\n- Go, [textmodes sauce](https://github.com/textmodes/sauce)\n- Python, [Parser for SAUCE](https://pypi.org/project/sauce/)\n- Elixir, [Saucexages](https://hexdocs.pm/saucexages/overview.html)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbengarrett%2Fsauce","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbengarrett%2Fsauce","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbengarrett%2Fsauce/lists"}