{"id":36688531,"url":"https://github.com/converged-computing/flex-ice-cream","last_synced_at":"2026-01-12T11:17:11.280Z","repository":{"id":212955349,"uuid":"732487958","full_name":"converged-computing/flex-ice-cream","owner":"converged-computing","description":"Example of flux-framework/flux-sched \"fluxion\" Go bindings building an out of tree graph-based scheduling or matching tool. \"Just flex it!\" 💪️™️🍦️ (under development)","archived":false,"fork":false,"pushed_at":"2023-12-17T14:51:51.000Z","size":13,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-09-10T05:36:56.735Z","etag":null,"topics":[],"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/converged-computing.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}},"created_at":"2023-12-16T20:51:48.000Z","updated_at":"2023-12-16T20:53:30.000Z","dependencies_parsed_at":"2023-12-17T15:48:09.351Z","dependency_job_id":null,"html_url":"https://github.com/converged-computing/flex-ice-cream","commit_stats":null,"previous_names":["converged-computing/flex-ice-cream"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/converged-computing/flex-ice-cream","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/converged-computing%2Fflex-ice-cream","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/converged-computing%2Fflex-ice-cream/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/converged-computing%2Fflex-ice-cream/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/converged-computing%2Fflex-ice-cream/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/converged-computing","download_url":"https://codeload.github.com/converged-computing/flex-ice-cream/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/converged-computing%2Fflex-ice-cream/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28338970,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-12T10:58:46.209Z","status":"ssl_error","status_checked_at":"2026-01-12T10:58:42.742Z","response_time":98,"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":[],"created_at":"2026-01-12T11:17:11.223Z","updated_at":"2026-01-12T11:17:11.271Z","avatar_url":"https://github.com/converged-computing.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Flex Ice Cream\n\n\u003e Need to figure our your ice cream supply? Just Flex it! 💪️™️🍦️\n\nThe Flux Framework \"flux-sched\" or fluxion project provides modular bindings in different languages for intelligent,\ngraph-based scheduling. When we extend fluxion to a tool or project that warrants logic of this type, we call this a flex!\nThus, the project here demonstrates flex-ice-cream, or using fluxion to:\n\n1. Generate a [graph schema](conf/icecream.graphml) (graphml) that describes nodes and edges of an ice cream shop\n2. Create an example [ice cream cone or cup](icecream.yaml) that a customer wants\n3. Use the tool to determine if the shop can provide it!\n\nThis is a simple example intended for learning and fun. \n\n## Concepts\n\nFrom the above, the following definitions might be useful.\n\n - **[Flux Framework](https://flux-framework.org)**: a modular framework for putting together a workload manager. It is traditionally for HPC, but components have been used in other places (e.g., here, Kubernetes, etc). It is analogous to Kubernetes in that it is modular and used for running batch workloads.\n - **[fluxion](fluxion)**: refers to [flux-framework/flux-sched](https://github.com/flux-framework/flux-sched) and is the scheduler component or module of Flux Framework. There are bindings in several languages, and specifically the Go bindings (server at [flux-framework/flux-k8s](https://github.com/flux-framework/flux-k8s)) assemble into the project \"fluence.\"\n - **flex** is an out of tree tool, plugin, or similar that uses fluxion to flexibly schedule or match some kind of graph-based resources. This project is an example of a flex!\n\n## Usage\n\n### Build\n\nThis demonstrates how to build the bindings. You will need to be in the VSCode developer container environment, or produce the same\non your host. Note that we currently are using [this commit](https://github.com/researchapps/flux-sched/commit/86f5bb331342f2883b057920cf58e2c042aef881) that\nsi a fork of [milroy's work](https://github.com/flux-framework/flux-sched/pull/1120) to ensure the module name matches what is added to go.mod (it won't work otherwise). When this is merged, we will update to flux-framework/flux-sched. Below shows the make command that builds our final binary!\n\n```bash\nmake\n```\n```console\n# This needs to match the flux-sched install and latest commit, for now we are using a fork of milroy's branch\n# that has a go.mod updated to match the org name\n# go get -u github.com/researchapps/flux-sched/resource/reapi/bindings/go/src/fluxcli@86f5bb331342f2883b057920cf58e2c042aef881\ngo mod tidy\nmkdir -p ./bin\nGOOS=linux CGO_CFLAGS=\"-I/opt/flux-sched/resource/reapi/bindings/c\" CGO_LDFLAGS=\"-L/usr/lib -L/opt/flux-sched/resource -lfluxion-resource -L/opt/flux-sched/resource/libjobspec -ljobspec_conv -L//opt/flux-sched/resource/reapi/bindings -lreapi_cli -lflux-idset -lstdc++ -lczmq -ljansson -lhwloc -lboost_system -lflux-hostlist -lboost_graph -lyaml-cpp\" go build -ldflags '-w' -o bin/icecream src/cmd/main.go\n```\n\nThe output is generated in bin:\n\n```bash\n$ ls bin/\nicecream\n```\n\nAlso note that we are targeting header files and shared libraries that are still in the flux source code directory. This is necessary because, due to licenses,\nwe are not allowed to distribute them proper. This is why we provide the Developer environment here that has this build ready to go.\n\n### Run\n\nYou can provide your request for ice cream (e.g., icecream.yaml) and the description of the graph (in graphml). Note that we need shared libs on the path:\n\n```\nexport LD_LIBRARY_PATH=/usr/lib:/opt/flux-sched/resource:/opt/flux-sched/resource/reapi/bindings:/opt/flux-sched/resource/libjobspec\n```\n\n-L/usr/lib -L/opt/flux-sched/resource -lfluxion-resource -L/opt/flux-sched/resource/libjobspec -ljobspec_conv -L/opt/flux-sched/resource/reapi/bindings -lreapi_cli -lflux-idset -lstdc++ -lczmq -ljansson -lhwloc -lboost_system -lflux-hostlist -lboost_graph -lyaml-cpp\" go build -ldflags '-w' -o bin/icecream src/cmd/main.go\n\n```bash\n./bin/icecream -spec icecream.yaml\n```\n```console\nThis is the flex ice cream matcher\nCreated flex resource graph \u0026{%!s(*fluxcli.ReapiCtx=\u0026{})}\n Match policy: first\n Load format: graphml (grug)\n Config file: conf/icecream.graphml\n\n✨️ Init context complete!\n   🍦️ Request: icecream.yaml\n\n😍️ Your Ice Cream Order is Ready!\nOrder Number: 1\nRecipe:\n      ---------scoop0[4:x]\n      ------cup0[1:s]\n      ---ice-cream-shop0[1:s]\n```\n\nI'm not actually sure if that is upside down? Note that we need to adjust the above to be something like `Satisfies` instead of `MatchAllocate`, so that is TBA.\nYou can also customize the graphml input file:\n\n```bash\n./bin/icecream -spec icecream.yaml -conf ./config/icecream.graphml\n```\n\nTry an order that can't be satisfied (note this is a bug on my part, you should be able to ask for a cone, I'm just not sure how to do it yet):\n\n```bash\n./bin/icecream -spec examples/cone.yaml\n```\n```console\nThis is the flex ice cream matcher\nCreated flex resource graph \u0026{%!s(*fluxcli.ReapiCtx=\u0026{})}\n Match policy: first\n Load format: graphml (grug)\n Config file: conf/icecream.graphml\n\n✨️ Init context complete!\n   🍦️ Request: examples/cone.yaml\n\n😭️ Oh no, we could not satisfy your order!\n```\n\n\n## License\n\nHPCIC DevTools is distributed under the terms of the MIT license.\nAll new contributions must be made under this license.\n\nSee [LICENSE](https://github.com/converged-computing/cloud-select/blob/main/LICENSE),\n[COPYRIGHT](https://github.com/converged-computing/cloud-select/blob/main/COPYRIGHT), and\n[NOTICE](https://github.com/converged-computing/cloud-select/blob/main/NOTICE) for details.\n\nSPDX-License-Identifier: (MIT)\n\nLLNL-CODE- 842614\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fconverged-computing%2Fflex-ice-cream","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fconverged-computing%2Fflex-ice-cream","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fconverged-computing%2Fflex-ice-cream/lists"}