{"id":21293116,"url":"https://github.com/criteo/command-launcher","last_synced_at":"2025-07-11T16:32:14.529Z","repository":{"id":37853418,"uuid":"480437781","full_name":"criteo/command-launcher","owner":"criteo","description":"A command launcher 🚀 made with ❤️","archived":false,"fork":false,"pushed_at":"2024-03-15T16:00:42.000Z","size":13074,"stargazers_count":30,"open_issues_count":10,"forks_count":6,"subscribers_count":8,"default_branch":"main","last_synced_at":"2024-04-14T09:48:34.734Z","etag":null,"topics":["cli","launcher"],"latest_commit_sha":null,"homepage":"https://criteo.github.io/command-launcher","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/criteo.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-04-11T15:23:25.000Z","updated_at":"2024-06-12T16:44:08.510Z","dependencies_parsed_at":"2024-03-15T16:06:39.487Z","dependency_job_id":null,"html_url":"https://github.com/criteo/command-launcher","commit_stats":{"total_commits":269,"total_committers":10,"mean_commits":26.9,"dds":"0.21561338289962828","last_synced_commit":"5647dda50ccbb184de3648cedde6b439aee94659"},"previous_names":[],"tags_count":25,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/criteo%2Fcommand-launcher","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/criteo%2Fcommand-launcher/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/criteo%2Fcommand-launcher/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/criteo%2Fcommand-launcher/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/criteo","download_url":"https://codeload.github.com/criteo/command-launcher/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225741166,"owners_count":17516895,"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","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","launcher"],"created_at":"2024-11-21T13:53:22.064Z","updated_at":"2024-11-21T13:53:22.691Z","avatar_url":"https://github.com/criteo.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Command Launcher\n\nA command launcher 🚀 made with ❤️\n\n[https://criteo.github.io/command-launcher/](https://criteo.github.io/command-launcher/)\n\n## Why a command launcher?\n\nAt Criteo, we have many teams who provides command line applications for developers. These CLI providers repeatly handle the same features and functionalities for their CLI apps, such as auto-completion, credential management, release, delivery, monitoring, etc.\n\nOn developer side, they have to manually download these tools to keep them up-to-date, it is difficult for them to discover available new tools. On the other hand, different developers have developed lots of similar handy scripts/tools by themselves without an easy way to share with others to avoid \"re-invent\" the wheel.\n\nTo improve both developer and CLI provider's experience, we developed a command launcher to solve the above issues. It has built-in features like auto-completion, credential management, progressive roll-out, and monitoring, so that the CLI app provider can focus on the functionality of their CLI app. Developers only need to download the command launcher to access all these CLI apps. The command launcher will keep their CLI application up-to-date. The dropin feature allows developers to integrate their own scripts/tools into command launcher and share with others. These scripts and tools can also benefits from built-in features like auto-completion, and monitoring.\n\n## How it works?\n\nCommand launcher is a small binary downloaded by developer in their development environment. CLI provider packages new commands or new version of command into a package, upload it to a remote repository, and update the package index of the repository. This process can be automated. More details about the remote repository, see [CLI Provider Guide](https://criteo.github.io/command-launcher/docs/overview/provider-guide/)\n\nDevelopers can integrate their own commands into command launcher as a \"dropin\" package. These dropin package will be only accessible from the developers themselves. To share such commands see [Dropin Package](https://criteo.github.io/command-launcher/docs/overview/dropin/)\n\nDevelopers run command launcher to access these commands, for example, you have a command called `toto`, instead of run it directly from command line, you use `cola toto`, where `cola` is the binary name of the command launcher, you can name it anything suits you. Every time you execute command launcher, it will synchronize with the remote command, and propose available updates if exists.\n\n```\n\n                           ┌──────────────────┐    Synch    ┌───────────────────────────┐\n            ┌──────────────│ command launcher │◄────────────│ Remote Command Repository │\n            │              └──────────────────┘             └───────────────────────────┘\n            │                       │                                      │\n            │            ┌──────────┼──────────┐              ┌────────────┼────────────┐\n            ▼            ▼          ▼          ▼              ▼            ▼            ▼\n       ┌─────────┐   ┌───────┐  ┌───────┐  ┌───────┐     ┌─────────┐  ┌─────────┐  ┌─────────┐\n       │ dropins │   │ cmd A │  │ cmd B │  │ cmd C │     │  cmd A  │  │  cmd B  │  │  cmd C  │\n       └────┬────┘   └───────┘  └───────┘  └───────┘     └─────────┘  └─────────┘  └─────────┘\n     ┌──────┴──────┐\n     ▼             ▼\n ┌────────┐   ┌────────┐\n │  cmd D │   │ cmd E  │\n └────────┘   └────────┘\n```\n\n## Features\n\n- **Small footprint**. Command launcher is around 10M, with no dependency to your OS.\n- **Technology agnostic**. It can launch commands implemented in any technology, and integrate to it with a simple manifest file.\n- **Auto-completion**. It supports auto-completion for all your commands installed by it.\n- **Auto-update**. Not only keeps itself but all its commands up-to-date.\n- **Credential management**. With the built-in login command, it securely passes user credential to your command.\n- **Progressive rollout**. Target a new version of command to a group of beta test users, and rollout progressively to all your users.\n- **Monitoring**. Built-in monitoring feature to monitor the usage your commands.\n- **Dropins**. Easy to intergrate your own command line scripts/tools by dropping your manifest in the \"dropins\" folder.\n\n## Installation\n\nPre-built binary can be downloaded from the release page. Unzip it, copy the binary into your PATH.\n\nThe pre-built binary is named `cdt` (Criteo Dev Toolkit), if you want to use a different name, you can pass your prefered name in the build. See build section below.\n\n## Contribute\n\n### Build\n\nRequirements: golang \u003e= 1.17\n\nYou can build the command launcher with your prefered name (in the example: `Criteo Developer Toolkit`, a.k.a `cdt`).\n```\ngo build -o cdt -ldflags='-X main.version=dev -X main.appName=cdt -X \"main.appLongName=Criteo Dev Toolkit\"' main.go\n```\n\nOr simply call the `build.sh` scripts\n```\n./build.sh [version] [app name] [app long name]\n```\n\n### Run tests\n\nRun unit tests\n\n```shell\ngo test -v ./...\n```\n\nRun all integration tests\n\n```shell\n./test/integration.sh\n```\n\nYou can run one integration test by specify the name of the integration test file (without the .sh extension). The integration tests can be found in [`test/integration`](https://github.com/criteo/command-launcher/tree/main/test/integration) folder, for example:\n\n```shell\n./test/integration.sh test-remote\n```\n\n### Run pages locally\n\n```\ncd gh-pages \u0026\u0026 npm start\n```\n\n### Run doc site locally\n\nRun `npm install` at the root, and run `npm start` in `gh-pages` folder\n\n### Release\n\nSimply tag a commit with format 'x.y.z', and push it.\n\n```\ngit tag x.y.z\ngit push origin x.y.z\n```\n\nThe supported release tag format:\n\n- \\*.\\*.\\*\n- \\*.\\*.\\*-\\*\n\nExample: `1.0.0`, `1.0.1-preview`\n\n\u003e Please make sure you have create an entry in [release-notes.yaml](release-notes.yaml) file so that the release will generate the new version index for auto-update.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcriteo%2Fcommand-launcher","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcriteo%2Fcommand-launcher","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcriteo%2Fcommand-launcher/lists"}