2022-02-12 03:08:54 -06:00
|
|
|
# CLI Proof-of-Concept
|
|
|
|
|
2022-02-12 03:19:14 -06:00
|
|
|
None of this crap is really tested. Have fun!
|
|
|
|
|
|
|
|
## Installation
|
|
|
|
|
2022-02-12 03:21:41 -06:00
|
|
|
Run the below scripts to install `poc-cli` for your platform:
|
|
|
|
|
|
|
|
### Linux x86_64
|
|
|
|
|
|
|
|
```sh
|
|
|
|
sudo curl -o /usr/bin/poc-cli \
|
|
|
|
https://files.lyte.dev/poc-cli/poc-cli.linux.x86_64
|
|
|
|
sudo chmod 755 /usr/bin/poc-cli
|
|
|
|
```
|
|
|
|
|
|
|
|
### macOS Intel
|
|
|
|
|
|
|
|
```sh
|
|
|
|
sudo curl -o /usr/bin/poc-cli \
|
|
|
|
https://files.lyte.dev/poc-cli/poc-cli.darwin.x86_64
|
|
|
|
sudo chmod 755 /usr/bin/poc-cli
|
|
|
|
```
|
2022-02-12 03:19:14 -06:00
|
|
|
|
2022-02-12 03:21:41 -06:00
|
|
|
### macOS Apple Silicon (M1)
|
|
|
|
|
|
|
|
```sh
|
|
|
|
sudo curl -o /usr/bin/poc-cli \
|
|
|
|
https://files.lyte.dev/poc-cli/poc-cli.darwin.aarch64
|
|
|
|
sudo chmod 755 /usr/bin/poc-cli
|
|
|
|
```
|
|
|
|
|
|
|
|
### Just let me download files through my browser like a normal human being
|
|
|
|
|
|
|
|
Ok, fine geez.
|
|
|
|
|
|
|
|
- **File Archive**: https://files.lyte.dev/poc-cli/
|
2022-02-12 03:19:14 -06:00
|
|
|
|
|
|
|
### Why are these binaries so freakin' big?
|
|
|
|
|
|
|
|
It's got the whole Deno runtime packed in there.
|
|
|
|
|
|
|
|
Also, something something your mom. <3
|
|
|
|
|
2022-02-12 03:08:54 -06:00
|
|
|
## Known Issues
|
|
|
|
|
|
|
|
- The plugin directory being present doesn't _really_ mean it's "installed" ;P
|
|
|
|
|
2022-02-12 03:19:14 -06:00
|
|
|
## Compile It Yourself
|
2022-02-12 03:08:54 -06:00
|
|
|
|
|
|
|
```sh
|
|
|
|
deno compile -A -o poc-cli src/core.ts
|
|
|
|
```
|
|
|
|
|
|
|
|
You can cross-compile, too. See `deno compile --help` for `--target`.
|
|
|
|
|
2022-02-12 03:19:14 -06:00
|
|
|
```
|
|
|
|
deno compile -A -o poc-cli.linux.x86_64 --target x86_64-unknown-linux-gnu src/core.ts
|
|
|
|
deno compile -A -o poc-cli.darwin.x86_64 --target x86_64-apple-darwin src/core.ts
|
|
|
|
deno compile -A -o poc-cli.darwin.aarch64 --target aarch64-apple-darwin src/core.ts
|
|
|
|
```
|
|
|
|
|
|
|
|
### Install
|
2022-02-12 03:08:54 -06:00
|
|
|
|
|
|
|
I dunno, but probably something like this:
|
|
|
|
|
|
|
|
```sh
|
2022-02-12 03:19:14 -06:00
|
|
|
sudo mv poc-cli /usr/bin/poc-cli
|
2022-02-12 03:08:54 -06:00
|
|
|
sudo chown root:root /usr/bin/poc-cli
|
|
|
|
sudo chmod 755 /usr/bin/poc-cli
|
|
|
|
```
|
|
|
|
|
|
|
|
## Usage
|
|
|
|
|
|
|
|
It's self-documenting!
|
|
|
|
|
|
|
|
```
|
|
|
|
poc-cli
|
|
|
|
```
|
|
|
|
|
|
|
|
-----
|
|
|
|
|
2022-02-12 03:19:14 -06:00
|
|
|
# My Old Notes Below!
|
2022-02-12 03:08:54 -06:00
|
|
|
|
|
|
|
-----
|
|
|
|
|
2022-02-12 01:47:23 -06:00
|
|
|
# Pluggable CLI
|
|
|
|
|
|
|
|
- Each subcommand is a plugin?
|
|
|
|
- Versioning and/or stability will be important?
|
|
|
|
- Maybe plugins _never_ change and instead you prefix them with a version?
|
|
|
|
- How can we build stability into the system?
|
|
|
|
- Some subset or all plugins are already known
|
|
|
|
- Auto-download plugins when attempting to run a command
|
|
|
|
- Completions for subcommands
|
|
|
|
- Are completions provided for commands not-yet-installed? Does attempting to
|
|
|
|
complete a subcommand's commands install the plugin and process its
|
|
|
|
completions?
|
|
|
|
- Will have configuration
|
|
|
|
|
|
|
|
# Core functions
|
|
|
|
|
|
|
|
- What plugins are available to me?
|
|
|
|
- HTTP GET (and cache?) some known human- and machine-readable manifest
|
|
|
|
- JSON, YAML, Cue, or Ion?
|
|
|
|
- Install a plugin
|
|
|
|
- HTTP GET
|
|
|
|
- Delete a plugin
|
|
|
|
- rm -r dir
|
|
|
|
- Update self
|
|
|
|
- download new binary and replace self with it
|
|
|
|
- Update plugin
|
|
|
|
- replace plugin
|
|
|
|
- Run a plugin with some given arguments
|
|
|
|
- call plugin with args
|
|
|
|
|
|
|
|
# Components I See
|
|
|
|
|
|
|
|
- Core
|
|
|
|
- Knows where to find manifest (may cache locally)
|
|
|
|
- Installs, updates, deletes plugins using information in manifest
|
|
|
|
- Can update or uninstall itself
|
|
|
|
- Can run plugins
|
|
|
|
- Manifest
|
|
|
|
- Contains information about where to find plugins and their versions
|
|
|
|
- Plugins
|
|
|
|
- Probably dumb scripts that call fancier things
|