{"id":44880698,"url":"https://github.com/corpix/clistruct","last_synced_at":"2026-02-17T16:04:47.744Z","repository":{"id":57515026,"uuid":"88553209","full_name":"corpix/clistruct","owner":"corpix","description":"Addon for github.com/urfave/cli to generate flags from structs and set flags data into structs","archived":false,"fork":false,"pushed_at":"2017-07-17T20:00:49.000Z","size":212,"stargazers_count":5,"open_issues_count":1,"forks_count":1,"subscribers_count":4,"default_branch":"master","last_synced_at":"2024-06-20T07:57:16.551Z","etag":null,"topics":["cli","go-packages","golang"],"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/corpix.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}},"created_at":"2017-04-17T21:40:47.000Z","updated_at":"2021-07-30T08:24:47.000Z","dependencies_parsed_at":"2022-09-26T18:31:54.025Z","dependency_job_id":null,"html_url":"https://github.com/corpix/clistruct","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/corpix/clistruct","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/corpix%2Fclistruct","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/corpix%2Fclistruct/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/corpix%2Fclistruct/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/corpix%2Fclistruct/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/corpix","download_url":"https://codeload.github.com/corpix/clistruct/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/corpix%2Fclistruct/sbom","scorecard":{"id":305225,"data":{"date":"2025-08-11","repo":{"name":"github.com/corpix/clistruct","commit":"9c908d235a64f1137a3830237329c9fba212b078"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"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":"SAST","score":0,"reason":"no SAST tool detected","details":["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":"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":"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":"Code-Review","score":0,"reason":"Found 0/19 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":-1,"reason":"No tokens found","details":null,"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":"Dangerous-Workflow","score":-1,"reason":"no workflows found","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":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"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":"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":"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":"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 'master'"],"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"}}]},"last_synced_at":"2025-08-17T21:51:50.637Z","repository_id":57515026,"created_at":"2025-08-17T21:51:50.637Z","updated_at":"2025-08-17T21:51:50.637Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29549244,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-17T14:33:00.708Z","status":"ssl_error","status_checked_at":"2026-02-17T14:32:58.657Z","response_time":100,"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","go-packages","golang"],"created_at":"2026-02-17T16:04:47.248Z","updated_at":"2026-02-17T16:04:47.738Z","avatar_url":"https://github.com/corpix.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"clistruct\n-------\n\n[![Build Status](https://travis-ci.org/corpix/clistruct.svg?branch=master)](https://travis-ci.org/corpix/clistruct)\n\nGo struct mapper for [urfave/cli](https://github.com/urfave/cli).\n\n## Mapping what?\n\n- Structure fields into flag declarations\n- Parsed flags values into structure fields\n\n## Limitations\n\n- Has no support for `github.com/urfave/cli.Global*` getters(idk how to map them, don't think you will ever need to do this, if you need then tell me your case)\n- You can't pass default value for [generic](https://github.com/urfave/cli/blob/6a87e37dffb000993f7c2831579e271d8fb298aa/flag.go#L99) at this time, clear solution required(at this time it will return an error about incompatible types)\n\n\u003e Also, reflection is full of shit so... there could be bugs.\n\u003e Feel free to send pull requests or open an issue if you have problems.\n\n## Example\n\nLet's write a simple program which will accept two special flags:\n\n- `--debug`\n- `--say`\n\n``` go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/corpix/clistruct\"\n\t\"github.com/urfave/cli\"\n)\n\nvar (\n\tflags = \u0026Flags{}\n)\n\ntype Flags struct {\n\tDebug bool   `usage:\"Enable debug mode\"`\n\tSay   string `usage:\"Tell me what to say\" value:\"I could say nothing\"`\n}\n\nfunc rootAction(context *cli.Context) error {\n\tif flags.Debug {\n\t\tfmt.Println(\"I am in debug mode\")\n\t}\n\n\tfmt.Println(\n\t\t\"Here is what I say:\",\n\t\tflags.Say,\n\t)\n\n\treturn nil\n}\n\nfunc main() {\n\tcliFlags, err := clistruct.FlagsFromStruct(flags)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tapp := cli.NewApp()\n\tapp.Flags = cliFlags\n\tapp.Before = func(context *cli.Context) error {\n\t\treturn clistruct.FlagsToStruct(context, flags)\n\t}\n\tapp.Action = rootAction\n\n\tapp.RunAndExitOnError()\n}\n```\n\nNow let's run it:\n\n``` shell\ngo run examples/simple/main.go --say=\"hello\"\nHere is what I say: hello\n```\n\nWe define a `bool` `--debug` flag, let's try to run application with it:\n\n``` shell\ngo run examples/simple/main.go --say=\"hello\" --debug\nI am in debug mode\nHere is what I say: hello\n```\n\nThat's it. Little summary:\n\n- You could use `FlagsFromStruct` to construct flags from the structure.\n- You could use `FlagsToStruct` to write parsed flags into the structure.\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcorpix%2Fclistruct","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcorpix%2Fclistruct","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcorpix%2Fclistruct/lists"}