more entries in the catalog ; more readme and faq ; onging impl

This commit is contained in:
setop 2023-02-08 15:27:58 +01:00
parent 36be71ca89
commit ef3719aee5
6 changed files with 152 additions and 1 deletions

36
DESIGN.md Normal file
View File

@ -0,0 +1,36 @@
## arguments
* argparse : the standard way
* getopt : for C users
* baker : decorator overs functions
* [docopt](http://docopt.org/) : CLI description language ; python 3.6 ! ; nim port available
## TUI
* must display tables
* must display progress bar
## semver
* pip install semver https://pypi.org/project/semver/, https://github.com/python-semver/python-semver/releases
* pip install python-semanticversion
* most pakging tool : packaging https://packaging.pypa.io/en/latest/version.html, setuptool, distutils
## arch
use `os.uname()`
## downloader
* requests
## install
* unpack in ~/.local/programs/<cli>
* link exe in ~/.local/bin

View File

@ -35,6 +35,8 @@ Inspired by envinstall (private), [webinstall](gh:webinstall/webi-installers), [
- [ ] identify installed version
- [ ] can install itself
- [ ] have nice defaults (gh release, targz, x86_64, linux, etc.)
- [ ] favor convention over configuration
- [ ] tries to guess as much as possible
- [ ] small codebase, preferably one file
@ -48,6 +50,20 @@ Inspired by envinstall (private), [webinstall](gh:webinstall/webi-installers), [
- overlap with package managers (apt, yum, etc.) or environment managers (nix, asdf, etc.)
# conventions and defaults
* default status of an entry is "tested" which means the process has been tested under linux-amd64
* entry name in the catalog is the name of the exe ; a prefered name can be added as a property
* tools in unpacked in `~/.local/programs` then symlinked in `~/.local/bin` which must be in PATH
* semver = semantic versioning : tools are versionned as `major[.minor[.patch[-prerelease[+build]]]]` so versions can be compared
* installed version is obtained by ruinning `<cli> --version`
* OS and arch are obtained with `os.uname()` python function
* default release system is GitHub releases and use `repo` property
* default packaging is `.tar.gz`
* default structure is to have the exe in the `bin` folder
most defaults can be overriden
# FAQ
@ -70,6 +86,10 @@ Tools developers / maintainers are not supposed to know CliGet exists. It adapts
Only the first time. After being installed, CliGet is managed by CliGet.
#### why this name ?
It is like wget but fo CLI. Plus, I like the sound of it :)
#### I already use [asdf](https://asdf-vm.com/), why would I need cliget ?
asdf is a wonderful tool when it comes to do software development in various programming language while mixing versions from one project to an other.

22
TODO.md Normal file
View File

@ -0,0 +1,22 @@
- [ ] choose forge
* github
* gitlab
* framagit
* codeberg
* source hut
* my gitea
- [ ] reserve name
- [ ] GH
- [ ] Pypy
- [ ] release
- [ ] GH release
- [ ] pypy package
- [ ] open issue in managed tool forge for them to add cliget install method
- [ ] communicate on geeks'platform : HN, lobsters, reddit, linuxfr

View File

@ -161,6 +161,11 @@ rg:
desc: improved grep
repo: BurntSushi/ripgrep
sake:
desc: a command runner for local and remote hosts
repo: alajmo/sake
website: https://sakecli.com/
slugify:
desc: generate sluged version of input
repo: un33k/python-slugify
@ -183,7 +188,6 @@ tab:
website: http://tab-lang.xyz/
repo: https://bitbucket.org/tkatchev/tab
task:
repo: go-task/task
desc: A task runner / simpler Make alternative written in Go
@ -222,6 +226,10 @@ vd:
desc: interactive multitool for tabular data
pip: visidata,lxml,odfpy,openpyxl,pyarrow,urllib3,requests,pyinstaller
vhs:
desc: Write terminal GIFs as code for integration testing and demoing your CLI tools.
repo: charmbracelet/vhs
vuls:
desc: Agent-less vulnerability scanner for Linux, FreeBSD, Container, WordPress, Programming language libraries, Network devices
repo: future-architect/vuls

63
cliget.py Normal file
View File

@ -0,0 +1,63 @@
"""Cliget - install cli tools in you user profile
Usage:
cliget [-c URL] list
cliget [-c URL] search PAT
cliget [-c URL] update [--all] [TOOL ...]
list list all installed tools
search search for tools in the catalog with the given pattenr
update list all updatable tools
update TOOL update tools
update --all update all updatable tools
Options:
-h, --help
-c, --catalog URL
"""
from yaml import load, SafeLoader
import semver
from docopt import docopt
from subprocess import run, CalledProcessError, TimeoutExpired
class DotDict(dict):
def __getattr__(self, name):
return self[name] if name in self else None
def loadcatalog(options)->dict:
catalog=options.get('--catalog', 'catalog.yaml')
return load(open(catalog),SafeLoader)
ver = semver.VersionInfo.parse('1.2.3-pre.2+build.4')
#print(ver.major, ver.minor, ver.patch)
_version = lambda cmd: run([cmd, '--version'], input='', text=True, capture_output=True, check=True, timeout=0.1).stdout.split('\n')[0]
def debug(mess):
#print(mess)
pass
def dolist(options):
ctl = loadcatalog(options)
for cli,_ in ctl.items():
# search in path
try:
debug(cli, _version(cli))
except CalledProcessError:
debug(cli, "call error")
except TimeoutExpired:
debug(cli, "timeout")
except FileNotFoundError:
debug(cli, "not found")
if __name__ == '__main__':
options = docopt(__doc__, version='Cliget 0.1.0')
print(options)
options = DotDict(options)
if options.list:
dolist(options)
elif options.search:
dosearch(options)

View File

@ -1 +1,3 @@
pyyaml
docopt
semver