{"id":30504956,"url":"https://github.com/victorpopkov/go-cask","last_synced_at":"2025-08-25T14:15:12.234Z","repository":{"id":96350028,"uuid":"98745688","full_name":"victorpopkov/go-cask","owner":"victorpopkov","description":"[in development] Go library for working with Homebrew-Cask casks.","archived":false,"fork":false,"pushed_at":"2018-06-17T19:06:31.000Z","size":174,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-06-20T11:12:45.641Z","etag":null,"topics":["cask","go","golang","golang-library","homebrew-cask"],"latest_commit_sha":null,"homepage":null,"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/victorpopkov.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":"2017-07-29T16:38:35.000Z","updated_at":"2018-06-17T19:06:33.000Z","dependencies_parsed_at":"2023-05-26T21:15:15.758Z","dependency_job_id":null,"html_url":"https://github.com/victorpopkov/go-cask","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/victorpopkov/go-cask","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/victorpopkov%2Fgo-cask","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/victorpopkov%2Fgo-cask/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/victorpopkov%2Fgo-cask/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/victorpopkov%2Fgo-cask/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/victorpopkov","download_url":"https://codeload.github.com/victorpopkov/go-cask/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/victorpopkov%2Fgo-cask/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":272077795,"owners_count":24869310,"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","status":"online","status_checked_at":"2025-08-25T02:00:12.092Z","response_time":1107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["cask","go","golang","golang-library","homebrew-cask"],"created_at":"2025-08-25T14:15:06.805Z","updated_at":"2025-08-25T14:15:12.224Z","avatar_url":"https://github.com/victorpopkov.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# go-cask\n\n[![Build Status](https://travis-ci.org/victorpopkov/go-cask.svg?branch=master)](https://travis-ci.org/victorpopkov/go-cask)\n[![Coverage Status](https://coveralls.io/repos/github/victorpopkov/go-cask/badge.svg?branch=master)](https://coveralls.io/github/victorpopkov/go-cask?branch=master)\n[![Report Card](https://goreportcard.com/badge/github.com/victorpopkov/go-cask)](https://goreportcard.com/report/github.com/victorpopkov/go-cask)\n[![GoDoc](https://godoc.org/github.com/victorpopkov/go-cask?status.svg)](https://godoc.org/github.com/victorpopkov/go-cask)\n\n**NOTICE:** Currently in development.\n\nThis library provides functionality for working with [Homebrew-Cask](https://github.com/caskroom/homebrew-cask)\ncasks.\n\n- [What \"cask\" means?](#what-cask-means)\n- [Why is this library needed and what it does?](#why-is-this-library-needed-and-what-it-does)\n- [Supported stanzas](#supported-stanzas)\n- [Examples](#examples)\n\n## What \"cask\" means?\n\nThe \"cask\" is a small Ruby block in a separate file that is used to describe the\napplication in [Homebrew-Cask](https://github.com/caskroom/homebrew-cask)\nproject. You can learn more about them by reading through the\n[Homebrew-Cask \"Synopsis\"](https://github.com/caskroom/homebrew-cask/blob/master/doc/cask_language_reference/readme.md#synopsis).\n\n## Why is this library needed and what it does?\n\nThis library attempts to provide a way of parsing and extracting basic\ninformation from casks for later use in Go. It parses the cask Ruby block and\ncreates the corresponding `cask.Cask` struct.\n\n### Features\n\n- [x] Conditional statements\n  - [x] MacOS.version\n- [ ] Language blocks\n- [x] String interpolations\n  - [x] `#{version}`\n  - [ ] `#{language}`\n\n## Supported stanzas\n\nBelow you can find a list of all supported cask stanzas that this library can\nunderstand and recognize during the parsing phase. If the checkbox next to the\nstanza is not ticked, that stanza is not supported yet.\n\n\u003e To learn more about all available cask stanzas check out the\n[Homebrew-Cask \"All stanzas\"](https://github.com/caskroom/homebrew-cask/blob/master/doc/cask_language_reference/all_stanzas.md).\n\n### Required\n\n- [x] `version`\n- [x] `sha256`\n- [x] `url`\n- [x] `name`\n- [x] `homepage`\n\n### Artifacts\n\n- [x] `app`\n  - [x] `target:`\n- [x] `pkg`\n  - [x] `allow_untrusted:`\n- [x] `binary`\n  - [x] `target:`\n- [ ] `colorpicker`\n- [ ] `dictionary`\n- [ ] `font`\n- [ ] `input_method`\n- [ ] `internet_plugin`\n- [ ] `prefpane`\n- [ ] `qlplugin`\n- [ ] `screen_saver`\n- [ ] `service`\n- [ ] `audio_unit_plugin`\n- [ ] `vst_plugin`\n- [ ] `vst3_plugin`\n- [ ] `suite`\n- [ ] `artifact`\n- [ ] `installer`\n- [ ] `stage_only`\n\n### Optional\n\n- [ ] `uninstall`\n- [ ] `zap`\n- [x] `appcast`\n- [ ] `depends_on`\n- [ ] `conflicts_with`\n- [ ] `caveats`\n  - [ ] indented heredoc (`\u003c\u003c-EOS`)\n  - [ ] \"squiggly\" heredoc (`\u003c\u003c~EOS`)\n- [ ] `preflight`\n- [ ] `postflight`\n- [ ] `uninstall_preflight`\n- [ ] `uninstall_postflight`\n- [ ] `language`\n- [ ] `accessibility_access`\n- [ ] `container nested:`\n- [ ] `container type:`\n- [ ] `gpg`\n- [ ] `auto_updates`\n\n## Examples\n\n### First example\n\nFor the first example we will parse the [example-one.rb](https://github.com/victorpopkov/go-cask/blob/master/testdata/example-one.rb)\ncask from our testdata directory.\n\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/victorpopkov/go-cask\"\n)\n\nfunc main() {\n\t// for this example we will load the cask from our testdata directory\n\tcontent := string(getTestdata(\"example-one.rb\"))\n\n\t// example\n\tc := cask.NewCask(content)\n\terr := c.Parse()\n\n\tif err == nil {\n\t\tfmt.Println(\"Token:\", c.Token)\n\t\tfor i, v := range c.Variants {\n\t\t\tfmt.Printf(\"Variant #%d:\\n\", i+1)\n\t\t\tfmt.Printf(\"%10s: %s\\n\", \"version\", v.GetVersion())\n\t\t\tfmt.Printf(\"%10s: %s\\n\", \"sha256\", v.GetSHA256())\n\t\t\tfmt.Printf(\"%10s: %s\\n\", \"url\", v.GetURL())\n\t\t\tfmt.Printf(\"%10s: %s\\n\", \"appcast\", v.GetAppcast().URL)\n\t\t\tfmt.Printf(\"%10s: %v\\n\", \"names\", v.GetNames())\n\t\t\tfmt.Printf(\"%10s: %s\\n\", \"homepage\", v.GetHomepage())\n\n\t\t\t// artifacts\n\t\t\tfmt.Printf(\"%10s: \", \"artifacts\")\n\t\t\tif len(v.GetArtifacts()) \u003e 0 {\n\t\t\t\tfor i, a := range v.GetArtifacts() {\n\t\t\t\t\tif i == 0 {\n\t\t\t\t\t\tfmt.Printf(\"%s\\n\", a.String())\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfmt.Printf(\"%12s%s\\n\", \"\", a.String())\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfmt.Printf(\"%v\\n\", v.GetArtifacts())\n\t\t\t}\n\n\t\t\t// macOS\n\t\t\tfmt.Printf(\"%10s: %s [minimum]\\n\", \"macOS\", v.MinimumSupportedMacOS)\n\t\t\tfmt.Printf(\"%12s%s [maximum]\\n\", \"\", v.MaximumSupportedMacOS)\n\t\t}\n\t}\n\n\t// Output:\n\t// Token: example-one\n\t// Variant #1:\n\t//    version: 2.0.0\n\t//     sha256: f22abd6773ab232869321ad4b1e47ac0c908febf4f3a2bd10c8066140f741261\n\t//        url: https://example.com/app_2.0.0.dmg\n\t//    appcast: https://example.com/sparkle/2/appcast.xml\n\t//      names: [Example Example One]\n\t//   homepage: https://example.com/\n\t//  artifacts: app, Example 2.0.app =\u003e Example.app\n\t//             app, Example 2.0 Uninstaller.app\n\t//             binary, #{appdir}/Example 2.0.app/Contents/MacOS/example-one =\u003e example\n\t//      macOS: macOS High Sierra (10.13) [minimum]\n\t//             macOS High Sierra (10.13) [maximum]\n}\n```\n\n### Second example\n\nFor the second example we will parse the [example-two.rb](https://github.com/victorpopkov/go-cask/blob/master/testdata/example-two.rb)\ncask from our testdata directory.\n\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/victorpopkov/go-cask\"\n)\n\nfunc main() {\n\t// for this example we will load the cask from our testdata directory\n\tcontent := string(getTestdata(\"example-two.rb\"))\n\n\t// example\n\tc := cask.NewCask(content)\n\terr := c.Parse()\n\n\tif err == nil {\n\t\tfmt.Println(\"Token:\", c.Token)\n\t\tfor i, v := range c.Variants {\n\t\t\tfmt.Printf(\"Variant #%d:\\n\", i+1)\n\t\t\tfmt.Printf(\"%10s: %s\\n\", \"version\", v.GetVersion())\n\t\t\tfmt.Printf(\"%10s: %s\\n\", \"sha256\", v.GetSHA256())\n\t\t\tfmt.Printf(\"%10s: %s\\n\", \"url\", v.GetURL())\n\t\t\tfmt.Printf(\"%10s: %s\\n\", \"appcast\", v.GetAppcast().URL)\n\t\t\tfmt.Printf(\"%10s: %v\\n\", \"names\", v.GetNames())\n\t\t\tfmt.Printf(\"%10s: %s\\n\", \"homepage\", v.GetHomepage())\n\n\t\t\t// artifacts\n\t\t\tfmt.Printf(\"%10s: \", \"artifacts\")\n\t\t\tif len(v.GetArtifacts()) \u003e 0 {\n\t\t\t\tfor i, a := range v.GetArtifacts() {\n\t\t\t\t\tif i == 0 {\n\t\t\t\t\t\tfmt.Printf(\"%s\\n\", a.String())\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfmt.Printf(\"%12s%s\\n\", \"\", a.String())\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfmt.Printf(\"%v\\n\", v.GetArtifacts())\n\t\t\t}\n\n\t\t\t// macOS\n\t\t\tfmt.Printf(\"%10s: %s [minimum]\\n\", \"macOS\", v.MinimumSupportedMacOS)\n\t\t\tfmt.Printf(\"%12s%s [maximum]\\n\", \"\", v.MaximumSupportedMacOS)\n\t\t}\n\t}\n\n\t// Output:\n\t// Token: example-two\n\t// Variant #1:\n\t//    version: 1.5.0\n\t//     sha256: 1f4dc096d58f7d21e3875671aee6f29b120ab84218fa47db2cb53bc9eb5b4dac\n\t//        url: https://example.com/app_1.5.0.pkg\n\t//    appcast: https://example.com/sparkle/1/el_capitan.xml\n\t//      names: [Example Example Two]\n\t//   homepage: https://example.com/\n\t//  artifacts: pkg, app_1.5.0.pkg, allow_untrusted: true\n\t//      macOS: Mac OS X Tiger (10.4) [minimum]\n\t//             OS X El Capitan (10.11) [maximum]\n\t// Variant #2:\n\t//    version: 2.0.0\n\t//     sha256: f22abd6773ab232869321ad4b1e47ac0c908febf4f3a2bd10c8066140f741261\n\t//        url: https://example.com/app_2.0.0.pkg\n\t//    appcast: https://example.com/sparkle/2/appcast.xml\n\t//      names: [Example Example Two]\n\t//   homepage: https://example.com/\n\t//  artifacts: pkg, app_2.0.0.pkg, allow_untrusted: true\n\t//      macOS: macOS High Sierra (10.13) [minimum]\n\t//             macOS High Sierra (10.13) [maximum]\n}\n```\n\n## License\n\nReleased under the [MIT License](https://opensource.org/licenses/MIT).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvictorpopkov%2Fgo-cask","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvictorpopkov%2Fgo-cask","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvictorpopkov%2Fgo-cask/lists"}