{"id":21658119,"url":"https://github.com/aurae-runtime/ae","last_synced_at":"2026-02-20T02:07:14.704Z","repository":{"id":65233185,"uuid":"583724732","full_name":"aurae-runtime/ae","owner":"aurae-runtime","description":"Unix inspired command line client for Aurae","archived":false,"fork":false,"pushed_at":"2025-11-02T13:22:46.000Z","size":171,"stargazers_count":26,"open_issues_count":17,"forks_count":13,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-11-02T15:13:52.682Z","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":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aurae-runtime.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":"2022-12-30T17:47:33.000Z","updated_at":"2025-11-02T13:22:47.000Z","dependencies_parsed_at":"2024-11-25T09:39:51.369Z","dependency_job_id":null,"html_url":"https://github.com/aurae-runtime/ae","commit_stats":{"total_commits":69,"total_committers":14,"mean_commits":4.928571428571429,"dds":0.7681159420289855,"last_synced_commit":"1f1f0750effc142e2b3fbde437ca3941a0582446"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/aurae-runtime/ae","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aurae-runtime%2Fae","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aurae-runtime%2Fae/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aurae-runtime%2Fae/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aurae-runtime%2Fae/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aurae-runtime","download_url":"https://codeload.github.com/aurae-runtime/ae/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aurae-runtime%2Fae/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29638779,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-19T22:32:43.237Z","status":"online","status_checked_at":"2026-02-20T02:00:07.535Z","response_time":59,"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":[],"created_at":"2024-11-25T09:28:43.004Z","updated_at":"2026-02-20T02:07:14.689Z","avatar_url":"https://github.com/aurae-runtime.png","language":"Go","funding_links":[],"categories":["Go"],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003e\n    \u003ccode\u003eae\u003c/code\u003e\n    \u003ch3 align=\"center\"\u003eUNIX inspired CLI Client for Aurae\u003c/h3\u003e\n\u003c/h1\u003e\n\n\u003cdiv align='center'\u003e\n\n\u003ca href='https://github.com/aurae-runtime/ae/blob/main/go.mod'\u003e\n\u003cimg alt=\"go version\" src=\"https://img.shields.io/github/go-mod/go-version/aurae-runtime/ae?color=00ADD8\u0026logo=go\u0026logoColor=00ADD8\u0026style=for-the-badge\"\u003e\n\n\u003c/a\u003e\n\n\u003ca href=\"https://github.com/aurae-runtime/ae/blob/main/LICENSE\"\u003e\n\u003cimg alt=\"license\" src=\"https://img.shields.io/github/license/aurae-runtime/ae?color=F79A25\u0026logo=apache\u0026logoColor=F79A25\u0026style=for-the-badge\"/\u003e\n\n\u003c/a\u003e\n\n\u003c/div\u003e\n\n\u003cdiv align='center'\u003e\n\n\u003ca href=\"https://github.com/aurae-runtime/ae/actions/workflows/090-go-release-ubuntu-latest-go-releaser.yaml\"\u003e\n\u003cimg alt=\"workflow status\" src=\"https://img.shields.io/github/actions/workflow/status/aurae-runtime/ae/090-go-release-ubuntu-latest-go-releaser.yaml?logo=github-actions\u0026logoColor=white\u0026style=for-the-badge\"\u003e\n\n\u003c/a\u003e\n\n\u003ca href=\"https://github.com/aurae-runtime/ae/actions/workflows/001-go-ubuntu-latest-make-test-format-lint.yaml\"\u003e\n\u003cimg alt=\"workflow status\" src=\"https://img.shields.io/github/actions/workflow/status/aurae-runtime/ae/001-go-ubuntu-latest-make-test-format-lint.yaml?label=test%20and%20format\u0026logo=github-actions\u0026logoColor=white\u0026style=for-the-badge\"\u003e\n\n\u003c/a\u003e\n\n\u003c/div\u003e\n\n---\n\n\u003e The project welcomes new contributors and developers. Check out the **[Getting Involved](https://github.com/aurae-runtime/community#getting-involved)** section and join the Discord. It is mandatory to sign the **[CLA](https://cla.nivenly.org/)** to contribute.\n\n\n\u003c!-- TABLE OF CONTENTS --\u003e\n\u003ch2 id=\"table-of-contents\"\u003e 📑 Table of Contents\u003c/h2\u003e\n\n\u003cdetails open=\"open\"\u003e\n    \u003csummary\u003eTable of Contents\u003c/summary\u003e\n        \u003col\u003e\n            \u003cli\u003e\u003ca href=\"#about-the-project\"\u003e • About The Project\u003c/a\u003e\u003c/li\u003e\n            \u003cli\u003e\u003ca href=\"#quickstart\"\u003e • Quickstart\u003c/a\u003e\u003c/li\u003e\n            \u003cli\u003e\u003ca href=\"#usage\"\u003e • Usage\u003c/a\u003e\u003c/li\u003e\n            \u003cli\u003e\u003ca href=\"#philosophy\"\u003e • Philosophy\u003c/a\u003e\u003c/li\u003e\n            \u003cli\u003e\u003ca href=\"#contribute\"\u003e • Contribute\u003c/a\u003e\u003c/li\u003e\n        \u003c/ol\u003e\n\u003c/details\u003e\n\n\u0026nbsp;\n\n\u003c!-- ABOUT THE PROJECT --\u003e\n## About The Project\n\n`ae` is a UNIX inspired CLI client for **[Aurae](https://github.com/aurae-runtime/aurae)**, written in Go. However, in order to understand what `ae` should and can do, we must first understand `aer`.\n\n### What is `aer`?\n\n[`aer`](https://github.com/aurae-runtime/aurae/tree/main/aer) is a CLI tool based on the Rust client which has the identical scope as a single _[auraed](https://github.com/aurae-runtime/aurae/tree/main/auraed)_ node.\n\nThe tool is aimed at \"POWER-USERS\" and exists as a rapid way to develop and debug against APIs that change frequently. For example, an [auraed](https://github.com/aurae-runtime/aurae/) developer can make a change to an existing API and test it locally against a single daemon.\n\n\n### What is `ae`?\n\nWe have created and maintain a CLI tool, `ae` that is based on the Go client and has a broader view than `aer`.\n\nThe purpose will be to use `ae` for clusters of [Aurae](https://github.com/aurae-runtime/aurae) nodes and will probably work similar to `aer`, but not completely!\n\nThe `ae` CLI tool will work for a group of nodes and will probably contain more pragmatic functions that are more important for enterprise operators.\n\n### Who is `ae` for?\n\nThe `ae` utility should be familiar to every cloud operator.\n\n_Typical tasks_ such as:\n\n* \"Rolling out NGINX to production\"\n* \"Counting the numbers of threads of a process\"\n* \"Changing the current database connection count for a service\"\n* \"Swinging traffic from one to another\"\n\nshould be possible with `ae`.\n\nThere are more \"practical\" and \"impact-oriented\" tasks, and these probably need extra functionality, which they add to the lightweight `aer` tool.\n\n\u003c!-- QUICKSTART --\u003e\n## Quickstart\n\n\u003e This section is reserved for future installation instructions as well as an example of integration.\n\n\u003c!-- USAGE --\u003e\n## Usage\n\nThere are a number of commands for `ae`.\n\nThese are shown here in _alphabetical_ order.\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003ccode\u003eallocate\u003c/code\u003e\u003c/summary\u003e\n\n\u0026nbsp;\n\nResources are reserved and prerequisites can be managed, but it **does not** start. It will not work if the resources are not available.\n\n```\nae allocate\nae allocate cell\nae allocate pod\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003ccode\u003echeck\u003c/code\u003e\u003c/summary\u003e\n\n\u0026nbsp;\n\nChecks the nodes of the cluster and returns the current serving status with the given list of services.\n\n```\nae check \u003ccidr \u003ccidr\u003e | ip \u003cip\u003e\u003e \u003cservice, ...\u003e\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003ccode\u003ediscover\u003c/code\u003e\u003c/summary\u003e\n\n\u0026nbsp;\n\nScans the complete network or cluster of nodes and returns information about it, including the version.\n\n```\nae discover \u003ccidr \u003ccidr\u003e | ip \u003cip\u003e\u003e\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003ccode\u003efree\u003c/code\u003e\u003c/summary\u003e\n\n\u0026nbsp;\n\nIt frees the resources and destroys the prerequisites that were started. It will fail if the resources cannot be freed or do not exist.\n\n```\nae free\nae free cell\nae free pod\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003ccode\u003elogs\u003c/code\u003e\u003c/summary\u003e\n\n\u0026nbsp;\n\nThis option will accept arguments and return or save some kind of logs.\n\n```\nae logs \u003coptions\u003e\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003ccode\u003eoci\u003c/code\u003e\u003c/summary\u003e\n\n\u0026nbsp;\n\nHere the [OCI CLI interface](https://github.com/opencontainers/runtime-tools/blob/master/docs/command-line-interface.md) is implemented with the respective subcommands.\n\n```\nae oci\nae oci create\nae oci delete\nae oci kill\nae oci start\nae oci status\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003ccode\u003estart\u003c/code\u003e\u003c/summary\u003e\n\n\u0026nbsp;\n\nIt will run the resources directly.\n\n```\nae start\nae start executable, exe\nae start container # Note this has an alias: 'ae oci start'\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003ccode\u003estop\u003c/code\u003e\u003c/summary\u003e\n\n\u0026nbsp;\n\nIt will stop the resources directly.\n\n```\nae stop\nae stop executable, exe\nae stop container # Note this has an alias: 'ae oci kill'\n```\n\n\u003c/details\u003e\n\n\u003c!-- PHILOSOPHY --\u003e\n## Philosophy\n    \n### Less is more\n    \nWe do not want `ae` to become a junk drawer. In situations where we are considering bringing in new functionality to the project, we prefer to keep it out.\n\nFor example imagine we were considering bringing in a `--filter` flag or a `--query` flag which would allow for us to filter the output returned by `ae`. In this situation we could very well identify advanced query patterns and libraries that would make it possible to adopt this feature.\n\nHowever, the feature comes at a maintenance cost, and frankly already exists in other tools. Instead of adopting a filter syntax and the associated burden that comes along with it, we instead focus on outputting to formats (such as JSON) which can easily be queried by existing tools (such as [jq](https://stedolan.github.io/jq/)).\n    \n### Just because you can, doesn't mean you should.\n    \nAlso known as **\"The Jurassic Park\"** rule.\n\nIn situations where functionality is made available or \"is possible\" because of current technical advancements or capabilities, we prefer to focus on the goals of ae instead of supporting optional features \"just because we can\".\n\nFor example imagine discovering a well written, and well regarded library that takes a Go struct and turns it into many formats which can be printed to the screen such as XML, JSON, YAML, TOML, BSON, and so on....\n\nThe project currently has established a need for JSON only, and plans to use jq for filtering and querying the data. In this case bringing the additional output types to the project \"just because we can\" would be a violation of this rule.\n    \n### No assumptions\n\nAlso known as \"no conveniences\" or \"no magic\" policies.\n\nAssumptions and conveniences can delight a user, until the assumption is wrong in which case they can be catastrophically frustrating. We prefer to stay away from assumptions whenever possible. We prefer to stay away from \"magic\" and \"convenience\" style features.\n\nA famous example of this is bringing a logger to a project which assumes that the logger will be able to take ownership of the -v flag for verbose. There are many situations (docker -v for volume, or grep -v for reverse) where this assumption is flawed and will conflict with the goals of the project and panic at runtime. We do not want ae to turn into the logger where we assume something incorrectly that ends up causing problems for others.\n\nThis will be a delicate principle to consider, as we also will need to hold firm opinions on things. A balance between a strong opinion and false assumptions is often times hard to get right.\n\nFor example the ae project will need to read from a configuration file in order to communicate with a remote server. In one case we could assume that the configuration file is always in a familiar location for convenience. In the other case we do not want to force a user to pass a very long flag every time they run the tool. What do we do?\n\nWe hold the opinion that the file should be in a few well documented locations, and create logic to try the locations if no flag is passed. If a user passes a flag we should remove all assumptions from the program and only consider the input. We prefer clarity over magic.\n    \n### Remote Servers instead of Local Systems!\n    \nThis is an interesting principle to consider. As the functionality of the ae tool grows we will inevitably need to execute logic somewhere.\n\nWe prefer to keep the ae tool as \"boring\" and \"unintelligent\" as possible. We do not want the command line tool to do a lot of \"work\" or \"processing\" locally. In situations where we need to perform logic against a set of Aurae nodes, we need to find a way to take the logic out of ae for compatibility reasons.\n\nWe do not want to get into a situation where we have multiple clients attempting to perform slightly different tasks locally against a server. Especially when these clients are subject to take long periods of time for their work to complete.\n\nIn the event these types of situations arise, it is a sign that we likely need to deploy a scheduler or server mechanisms somewhere to manage the work on our behalf.    \n    \n\u003c!-- CONTRIBUTE --\u003e\n## Contribute\n    \nThe **[Aurae](https://github.com/aurae-runtime/aurae)** project is always looking for new members and developers. Here in this repository you can improve `ae`, but be sure to check out the [organisation](https://github.com/aurae-runtime) and the other internal projects. [This](https://github.com/aurae-runtime/community) is always a good starting point.\n    \n## Code Quality\n    \n### Linting\n\nWe are using the [golangci-lint](https://golangci-lint.run/) tool to lint the code. You will need to install it for your system, and can find instructions at [this link](https://golangci-lint.run/usage/install/). This tool runs on every pull request, and it must pass before merging is allowed. You can run it locally with `make lint`.\n    \n### Formatting\n    \nWe are using the [gofmt](https://pkg.go.dev/cmd/gofmt) tool to lint the code. This tool runs on every pull request, and it must pass before merging is allowed. You can run it locally with `make format`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faurae-runtime%2Fae","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faurae-runtime%2Fae","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faurae-runtime%2Fae/lists"}