{"id":29140059,"url":"https://github.com/aagumin/goflint","last_synced_at":"2026-02-25T21:37:57.283Z","repository":{"id":287364213,"uuid":"963460611","full_name":"aagumin/goflint","owner":"aagumin","description":"Spark-submit golang wrapper","archived":false,"fork":false,"pushed_at":"2025-05-06T13:37:06.000Z","size":117,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-08-01T03:19:46.356Z","etag":null,"topics":["apache-spark","cli-wrapper","go","golang","spark","spark-submit"],"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/aagumin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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}},"created_at":"2025-04-09T18:04:04.000Z","updated_at":"2025-05-05T17:14:45.000Z","dependencies_parsed_at":"2025-04-12T10:45:47.541Z","dependency_job_id":null,"html_url":"https://github.com/aagumin/goflint","commit_stats":null,"previous_names":["aagumin/goflint"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/aagumin/goflint","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aagumin%2Fgoflint","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aagumin%2Fgoflint/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aagumin%2Fgoflint/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aagumin%2Fgoflint/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aagumin","download_url":"https://codeload.github.com/aagumin/goflint/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aagumin%2Fgoflint/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29841603,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-25T21:18:31.832Z","status":"ssl_error","status_checked_at":"2026-02-25T21:18:29.265Z","response_time":61,"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":["apache-spark","cli-wrapper","go","golang","spark","spark-submit"],"created_at":"2025-06-30T16:02:03.089Z","updated_at":"2026-02-25T21:37:57.261Z","avatar_url":"https://github.com/aagumin.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# GoFlint 🔥\n\n[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=aagumin_goflint\u0026metric=alert_status)](https://sonarcloud.io/summary/new_code?id=aagumin_goflint)\n[![Go build](https://github.com/aagumin/goflint/actions/workflows/go.yml/badge.svg)](https://github.com/aagumin/goflint/actions/workflows/go.yml)\n[![Go Report Card](https://goreportcard.com/badge/github.com/aagumin/goflint)](https://goreportcard.com/report/github.com/aagumin/goflint)\n[![Maintainability](https://api.codeclimate.com/v1/badges/aabaf6a2d52511b3d581/maintainability)](https://codeclimate.com/github/aagumin/goflint/maintainability)\n[![Test Coverage](https://api.codeclimate.com/v1/badges/aabaf6a2d52511b3d581/test_coverage)](https://codeclimate.com/github/aagumin/goflint/test_coverage)\n[![Known Vulnerabilities](https://snyk.io/test/github/aagumin/goflint/badge.svg)](https://app.snyk.io/org/aagumin/project/f1c4783a-33e3-4ad8-8c2d-1dc1f67e1866)\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Faagumin%2Fgoflint.svg?type=shield\u0026issueType=license)](https://app.fossa.com/projects/git%2Bgithub.com%2Faagumin%2Fgoflint?ref=badge_shield\u0026issueType=license)\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Faagumin%2Fgoflint.svg?type=shield\u0026issueType=security)](https://app.fossa.com/projects/git%2Bgithub.com%2Faagumin%2Fgoflint?ref=badge_shield\u0026issueType=security)\n\n\u003e **[WIP]** Project in active dev state.\n\n**GoFlint** is an idiomatic Go library for submitting Apache Spark jobs via `spark-submit`.  \nDesigned for clarity and type safety, it wraps Spark’s CLI with a fluent Go API.\n\n\n## Features\n\n- **Fluent API** for all `spark-submit` options (masters, deploy modes, args, etc.)\n- **Context support** for cancellation/timeouts\n- **Extensible** with custom logging and monitoring\n- **Zero dependencies** (except Go’s standard library)\n\n## Installation\n\n```bash\ngo get github.com/aagumin/flint\n```\n\n## Example usage\n\n```go\npackage main\n\nimport (\n   \"context\"\n   \"fmt\"\n   \"os\"\n   \"path\"\n   \"github.com/aagumin/goflint/flint\"\n   sc \"github.com/aagumin/goflint/flint/sparkconf\"\n)\n\nfunc main() {\n   xx := map[string]string{\"spark.driver.port\": \"4031\", \"spark.driver.host\": \"localhost\"}\n   sparkCfg := sc.NewFrozenConf(xx)\n\n   scalaExamples := path.Join(os.Getenv(\"SPARK_HOME\"), \"examples/jars/spark-examples_2.12-3.5.3.jar\")\n\n   submit := flint.NewSparkApp(\n      flint.WithApplication(scalaExamples),\n      flint.WithSparkConf(sparkCfg),\n      flint.WithName(\"GoFlint\"),\n      flint.WithMainClass(\"org.apache.spark.examples.parkPi\"),\n   )\n\n   base := submit.Build()\n\n   updatedSubmit := flint.ExtendSparkApp(\n      \u0026base,\n      flint.WithMaster(\"\"),\n      // Other options...\n\n   )\n\n   app := updatedSubmit.Build()\n   ctx := context.Background()\n   _, err = app.Submit(ctx)\n   if err != nil {\n      fmt.Println(err)\n   }\n\n}\n\n```\n\n## Design Principles\n\n1. **Idiomatic Go**\n    - Errors as `error`, not panics\n    - `context.Context` support\n    - Interfaces for extensibility\n\n2. **Spark Compatibility**\n    - Maps 1:1 with `spark-submit` CLI\n    - No hidden magic – transparent command generation\n\n3. **Batteries Included**\n    - Defaults for quick starts\n    - Extensible for complex cases\n\n---\n\n## Roadmap\n\n- [ ] Async job monitoring\n- [ ] YARN/K8s auth helpers\n- [ ] Prometheus metrics integration\n\n---\n\n## Contributing\n\nPRs welcome! See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.\n\n## License\n\nMIT © Arsen Gumin\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faagumin%2Fgoflint","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faagumin%2Fgoflint","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faagumin%2Fgoflint/lists"}