{"id":18909967,"url":"https://github.com/jonasbn/yak","last_synced_at":"2026-01-27T01:03:26.047Z","repository":{"id":29407442,"uuid":"317939711","full_name":"jonasbn/yak","owner":"jonasbn","description":"Overall repository for the Yak project","archived":false,"fork":false,"pushed_at":"2025-01-24T16:15:29.000Z","size":150,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-02-15T05:27:24.404Z","etag":null,"topics":["specification","tool","yak","yak-shaving"],"latest_commit_sha":null,"homepage":"https://jonasbn.github.io/yak/","language":"SCSS","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/jonasbn.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":"2020-12-02T17:29:38.000Z","updated_at":"2025-01-24T16:15:33.000Z","dependencies_parsed_at":"2024-06-17T11:33:46.358Z","dependency_job_id":"bc0df76b-ed50-4918-8582-d2ef47f1bed5","html_url":"https://github.com/jonasbn/yak","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jonasbn%2Fyak","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jonasbn%2Fyak/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jonasbn%2Fyak/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jonasbn%2Fyak/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jonasbn","download_url":"https://codeload.github.com/jonasbn/yak/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239898462,"owners_count":19715212,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["specification","tool","yak","yak-shaving"],"created_at":"2024-11-08T09:38:49.870Z","updated_at":"2026-01-27T01:03:26.011Z","avatar_url":"https://github.com/jonasbn.png","language":"SCSS","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Yak\n\nThis is the Yak specification v.0.1.\n\nThis repository is the overall Yak specification repository, it's goal is to outline the Yak specification.\n\nThe Yak specification outlines the requirements for a tool aimed at assisting in maintenance across repositories. It is a supplement to tools like [Dependabot] and [Renovate], it is however not as advanced at this time, which is reflected in this specification.\n\nYak is not intended to be language specific, it is aimed at assisting with all of the files, which are not related to a certain language.\n\nYak can for example help you to check if:\n\n- A certain file is present\n- A certain file holds specific contents based on a checksum\n- A certain file holds specific contents based on another file (_template_) available on the local file system (when used locally)\n- A certain file holds specific contents based on another file (_template_) available via a URL\n\nAn example:\n\n\u003e Make sure your repository contains a Code of Conduct\n\n1. Add a data file named `.yaksums.json` to your repository\n2. Add the following below contents\n\n```json\n{\n    \"CODE_OF_CONDUCT.md\": true\n}\n```\n\nRunning Yak on your repository now checks for the contents of a `CODE_OF_CONDUCT.md`, would indicate that the file is not present as required.\n\nAn example implementation:\n\n```text\n❗️CODE_OF_CONDUCT.md is not present\n```\n\nWhen you add the `CODE_OF_CONDUCT.md` a new run will report a success:\n\n```text\n👍🏻./CODE_OF_CONDUCT.md is present\n```\n\nIf you want to be more specific about the version of your `CODE_OF_CONDUCT.md`, there are a few options available:\n\n1. You can specify a checksum for the code of conduct, then Yak will check if the file in the repository holds the same checksum as your canonical version\n2. Alternatively you can specify a path to a file in your filesystem, so the checksum is calculated dynamically\n\nLets start with the first option:\n\n```json\n{\n    \"CODE_OF_CONDUCT.md\": \"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\"\n}\n```\n\nA Yak check would report the following, for a file with a different checksum\n\n```text\n❗️CODE_OF_CONDUCT.md not matching\n```\n\nFor a file with a similar checksum\n\n```text\n👍🏻./CODE_OF_CONDUCT.md matching\n```\n\nThe checksum is a standard checksum based on SHA256.\n\n```shell\nsha256sum CODE_OF_CONDUCT.md\ne3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855  CODE_OF_CONDUCT.md\n```\n\nThe second option would look as follows:\n\n```json\n{\n    \"CODE_OF_CONDUCT.md\": \"file://CODE_OF_CONDUCT.md\"\n}\n```\n\nThis points to a file in the configuration directory of Yak, meaning that canonical versions can easily be maintained in this directory as files and the repositories specified to this file, will report a failure if and when the file is updated and the file can easily be copied to the relevant repositories.\n\nThe path for the file has to be unique, so the configuration has to complete paths working from the root of the given repository in which\n\n```json\n{\n    \".github/dependabot.yml\": true\n}\n```\n\n## About the project\n\nIt will only hold the specification and will link to relevant resources and implementations.\n\n## Data File\n\nThe data file is named: `.yaksums.json`\n\nIt contains a JSON structure with the following format.\n\n```text\n{\n    filename =\u003e boolean | checksum | filename | URL\n}\n```\n\n## Configuration\n\nChecking a deep directory structure can be expensive so an _ignore file_ can be specified.\n\nThe file should be named: `.yakignore`.\n\nIt should follow the specification of the commonly available implementation of [git ignore][gitignore].\n\nThe ignore pattern also works from the root of the directory structure.\n\n## Checksum\n\nThe checksum is based on SHA256.\n\nA commonly available tool to calculate the SHA256 checksum is: `sha256sum`.\n\n## Outcome Matrix\n\n| Type     | File        | Success  | Failure      | Note                    |\n|----------|-------------|----------|--------------|-------------------------|\n| Boolean  | Present     | Present  |              |                         |\n| Boolean  | Not Present |          | Not present  |                         |\n| File     | Present     | Matching |              | file://                 |\n| File     | Present     |          | Not matching | file://                 |\n| File     | Not present |          | Not present  | file://                 |\n| Checksum | Present     | Matching |              | SHA256                  |\n| Checksum | Present     |          | Not matching | SHA256                  |\n| Checksum | Not present |          | Not present  | SHA256                  |\n| URL      | Present     | Matching |              | `http://` or `https://` |\n| URL      | Present     |          | Not matching | `http://` or `https://` |\n| URL      | Not present |          | Not present  | `http://` or `https://` |\n\nIn addition different error scenarios are left up to the implementation.\n\n- Permission issue: File cannot be read from file system, meaning checksum cannot be calculated\n- Network issue: File cannot be read from URL, meaning checksum cannot be calculated\n\n## Implementations\n\n1. Perl implementation: [App::Yak] this also acts as the initial prototype, this is still in alpha.\n\n### Additional Yak Tools\n\n1. [The GitHub Yak Action](https://github.com/jonasbn/github-action-yak), based on the Perl implementation: [App::Yak], this is still in alpha.\n\n## License and Copyright\n\nYak and related works are (C) by Jonas B., (jonasbn) 2018-2022\n\n[Image](https://unsplash.com/photos/3b3O75X0Jzg) used on the website is under copyright by [Shane Aldendorff](https://unsplash.com/@pluyar)\n\n## Resources and References\n\n- [Dependabot]\n- [gitignore]\n- [JSON.org][JSON]\n- [JSON Schema]\n- [YAML.org][YAML]\n- [Renovate]\n- [sha256sum man page][sha256sum]\n\n[JSON]: https://www.json.org/json-en.html\n[Dependabot]: https://dependabot.com/\n[App::Yak]: https://github.com/jonasbn/perl-app-yak\n[gitignore]: https://git-scm.com/docs/gitignore\n[sha256sum]: https://linux.die.net/man/1/sha256sum\n[YAML]: https://yaml.org/\n[JSON Schema]: https://json-schema.org/\n[Renovate]: https://www.mend.io/free-developer-tools/renovate/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjonasbn%2Fyak","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjonasbn%2Fyak","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjonasbn%2Fyak/lists"}