{"id":44448203,"url":"https://github.com/fractalqb/texst","last_synced_at":"2026-02-12T16:04:48.682Z","repository":{"id":57565749,"uuid":"338112110","full_name":"fractalqb/texst","owner":"fractalqb","description":"Check texts against reference text specifications","archived":false,"fork":false,"pushed_at":"2024-07-13T06:30:13.000Z","size":153,"stargazers_count":0,"open_issues_count":3,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2024-07-13T07:37:49.312Z","etag":null,"topics":["go","golang","golden-master","testing"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fractalqb.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":"2021-02-11T18:13:10.000Z","updated_at":"2024-07-13T07:37:59.921Z","dependencies_parsed_at":"2024-07-13T07:37:42.220Z","dependency_job_id":null,"html_url":"https://github.com/fractalqb/texst","commit_stats":null,"previous_names":[],"tags_count":17,"template":false,"template_full_name":null,"purl":"pkg:github/fractalqb/texst","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fractalqb%2Ftexst","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fractalqb%2Ftexst/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fractalqb%2Ftexst/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fractalqb%2Ftexst/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fractalqb","download_url":"https://codeload.github.com/fractalqb/texst/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fractalqb%2Ftexst/sbom","scorecard":{"id":408718,"data":{"date":"2025-08-11","repo":{"name":"github.com/fractalqb/texst","commit":"2d0380bdce9e4fa9447a6d037431d7e3001b3001"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.1,"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":"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/fractalqb/texst/codeql-analysis.yml/main?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/fractalqb/texst/codeql-analysis.yml/main?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/fractalqb/texst/codeql-analysis.yml/main?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/fractalqb/texst/codeql-analysis.yml/main?enable=pin","Info:   0 out of   4 GitHub-owned 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":"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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/codeql-analysis.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":"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":"Code-Review","score":0,"reason":"Found 0/27 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":"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":"SAST","score":10,"reason":"SAST tool detected: CodeQL","details":["Info: SAST configuration detected: CodeQL","Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"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: GNU Affero General Public License v3.0: 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"}}]},"last_synced_at":"2025-08-18T22:03:58.224Z","repository_id":57565749,"created_at":"2025-08-18T22:03:58.224Z","updated_at":"2025-08-18T22:03:58.224Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29371480,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-12T08:51:36.827Z","status":"ssl_error","status_checked_at":"2026-02-12T08:51:26.849Z","response_time":55,"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"}},"keywords":["go","golang","golden-master","testing"],"created_at":"2026-02-12T16:04:47.892Z","updated_at":"2026-02-12T16:04:48.675Z","avatar_url":"https://github.com/fractalqb.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# texst – Text Tests\n[![Build](https://travis-ci.com/fractalqb/texst.svg?branch=main)](https://travis-ci.com/github/fractalqb/texst)\n[![codecov](https://codecov.io/gh/fractalqb/texst/branch/master/graph/badge.svg)](https://codecov.io/gh/fractalqb/texst)\n[![Go Report Card](https://goreportcard.com/badge/github.com/fractalqb/texst)](https://goreportcard.com/report/github.com/fractalqb/texst)\n[![Go Reference](https://pkg.go.dev/badge/github.com/fractalqb/texst.svg)](https://pkg.go.dev/github.com/fractalqb/texst)\n[![License: AGPL v3](https://img.shields.io/badge/License-AGPL%20v3-blue.svg)](http://www.gnu.org/licenses/agpl-3.0)\n\nPackage texst checks text files against a reference text\nspecifications. The simplest reference text would be the verbatim text\nwith each line prefixed with a 'reference text' line tag, e.g. \"\u003e\n\". This would only match exactly the verbatim text. To do more complex\nmatching one can add other line types to the reference text\nspecification.\n\nLine types are recognised by the rune in the first column of each line\nin the reference text specification. There are line types that serve\ndifferent purposes.\n\nMost often one might need to mark parts of a reference line that do\nnot need to match exactly to the checked “subject” text. texst does\nnot embed markers into the reference text line because it would need\nsome very sophisticated escaping to make arbitrary reference text\nfeasible.  Instead each reference text line may be followed by\nargument lines, that modify the way the reference text is matched\nagainst the checked text. Argument lines start with ' ' (U+0020). Some\ntypes of argument lines are used to mark segments of the reference\ntext to not match exactly to the subject text:\n\n```\n\u003e This is some reference text content\n .        xxxx\n```\n\nThe above example says that the four runes above the non-space part of\nthe argument line, i.e. \"some\", are not compared to the checked\ntext. The '.' identifies the specific type of argument line (see Types\nof argument lines). So the text\n\n```\nThis is blue reference text content\n```\n\nwould perfectly match the reference text example. Argument lines can\nbe stacked and are applied in order to their reference text line up to\nthe next non-argument line.\n\n```\n\u003e This is some reference text content\n .        xxxx\n .                       yyyy\n```\n\nwould be the same as\n\n```\n\u003e This is some reference text content\n .        xxxx           yyyy\n```\n\nFor some files, e.g. log files, it would be rather tedious if one had\nto mark each timestamp in the reference text line:\n\n```\nJun 27 21:58:11.112 INFO  [thread1] create `localization dir:test1/test.xCuf/l10n`\nJun 27 21:58:11.113 INFO  [thread2] load state from `file:test1/test.xCuf/bcplus.json`\n…\n```\n\nTo solve this one can set a global mask line after the preamble and\nbetween reference text specifications. For our example one would\nwrite:\n\n```\n*.ttt tt tt tt tt ttt\n\u003e Jun 27 21:58:11.112 INFO  [thread1] create `localization dir:test1/test.xCuf/l10n`\n\u003e Jun 27 21:58:11.113 INFO  [thread2] load state from `file:test1/test.xCuf/bcplus.json`\n\u003e Jun 27 18:58:11.125 DEBUG [thread1] clearing maps\n\u003e …\n```\n\nWith a little attention, you notice that the log lines are from\ndifferent threads. I.e. one cannot rely on the order of lines in the\nreference text specification. But at least the lines from one thread\nshall be in exactly the same order as given in the reference.\n\nWe declare two “interleaving groups” '1' and '2' in the preamble and\nmark the reference text lines to be in the specific group:\n\n```\n%%12\n*.ttt tt tt tt tt ttt\n\u003e1Jun 27 21:58:11.112 INFO  [thread1] create `localization dir:test1/test.xCuf/l10n`\n\u003e2Jun 27 21:58:11.113 INFO  [thread2] load state from `file:test1/test.xCuf/bcplus.json`\n\u003e1Jun 27 18:58:11.125 DEBUG [thread1] clearing maps\n\u003e …\n```\n\nNow, both subjects\n\n```\nJun 27 21:58:11.112 INFO  [thread1] create `localization dir:test1/test.xCuf/l10n`\nJun 27 21:58:11.113 INFO  [thread2] load state from `file:test1/test.xCuf/bcplus.json`\nJun 27 18:58:11.125 DEBUG [thread1] clearing maps\n…\n```\n\nand\n\n```\nJun 27 21:58:11.112 INFO  [thread1] create `localization dir:test1/test.xCuf/l10n`\nJun 27 18:58:11.125 DEBUG [thread1] clearing maps\nJun 27 21:58:11.113 INFO  [thread2] load state from `file:test1/test.xCuf/bcplus.json`\n…\n```\n\nmatch the reference. For more details use [the reference documentation](https://pkg.go.dev/github.com/fractalqb/texst).","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffractalqb%2Ftexst","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffractalqb%2Ftexst","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffractalqb%2Ftexst/lists"}