Webi est comment les développeurs installent leurs outils

sudocurl https://webi.sh/webi | shCe référentiel contient les packages principaux et soumis à la communauté pour webinstall.dev.
$HOME/.local/opt ou $HOME/.local/bin , selon le cas.PATH via $HOME/.config/envman/PATH.envPlus techniquement:
<package>/releases.js transforme l'API de libération du package en un format commun_common/ (c'est-à-dire _common/github.js )_webi/bootstrap.sh est un modèle qui échange les informations système pour un programme d'installation correctmacos , amd64 , peut déballer tar,zip,xz )_webi/template.sh est le modèle d'installateur de base avec des fonctions communes pour<package>/install.sh peut fournir des fonctions pour remplacer _webi/template.shcurl https://webi.sh/<pkg> => bootstrap-<pkg>.shsh bootstrap-<pkg>.sh => https://webinstall.dev/api/installers/<pkg>@<ver>.sh?formats=zip,tarsh install-<pkg>.sh => Télécharger, déballer, déplacer, lier, mettre à jour le chemin d'accès$HOME/.local/opt/<package>-<version> ou $HOME/.local/binsudo (sauf peut-être pour un setcap unique, etc.)Une installation se compose de 5 pièces dans 4 fichiers:
my-new-package/
- README.md (package info in frontmatter)
- releases.js
- install.sh (POSIX Shell)
- install.ps1 (PowerShell)
Voir ces exemples :
Le serveur webinstall.dev utilise la liste des versions renvoyées par <your-package>/releases.js pour générer un script shell avec les variables et fonctions les plus nécessaires prédéfinies.
Vous remplissez simplement les blancs.
Créez simplement un répertoire vide et exécutez les tests jusqu'à ce que vous obteniez un bon résultat.
git clone [email protected]:webinstall/webi-installers.git
pushd ./webi-installers/
git submodule update --init
npm clean-installmkdir -p ./new-package/
node _webi/test.js ./new-package/Copiez simplement le format à partir de l'un des packages existants. C'est comme ça:
README.md :
---
title : Node.js
homepage : https://nodejs.org
tagline : |
JavaScript V8 runtime
description : |
Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine
---
``` sh
node -e ' console.log("Hello, World!") '
> Hello, World !
``` Tout ce que vous faites dans cette étape est simplement de traduire d'une forme de JSON ou de CSV ou d'onglet ou autre, vers un format compris par webi .
ripgrep/releases.js (qui utilise _common/github.js )golang/releases.js ou node/releases.js .Cela ressemble à ceci:
releases.js :
module . exports = function ( ) {
return github ( null , owner , repo ) . then ( function ( all ) {
// if you need to do something special, you can do it here
// ...
return all ;
} ) ;
} ;(Facultatif, si nécessaire) Variables bash que vous pouvez définir:
# Define this if the package name is different from the command name (i.e. golang => go)
pkg_cmd_name= " foobar "
# These are used for symlinks, PATH, and test commands
pkg_dst= " $HOME /.local/opt/foobar "
pkg_dst_cmd= " $HOME /.local/opt/foobar/bin/foobar "
# pkg_dst_bin="$(dirname "$pkg_dst_cmd")"
# These are the _real_ locations for the above
pkg_src= " $HOME /.local/opt/foobar-v $WEBI_VERSION "
pkg_src_cmd= " $HOME /.local/opt/foobar-v $WEBI_VERSION /bin/foobar "
# pkg_src_bin="$(dirname "$pkg_src_cmd")"(requis) une fonction de vérification de version qui dépouille toutes les ordures non version
pkg_get_current_version () {
# foobar-v1.1.7 => 1.1.7
echo " $( foobar --version | head -n 1 | sed ' s:foobar-v:: ' ) "
}Pour le reste des fonctions, vous pouvez copier / coller à partir des exemples:
pkg_format_cmd_version () {} # Override, pretty prints version
pkg_link # Override, replaces webi_link()
pkg_pre_install () { # Override, runs any webi_* commands
webi_check # for $HOME/.local/opt tools
webi_download # for things that have a releases.js
webi_extract # for .xz, .tar.*, and .zip files
}
pkg_install () {} # Override, usually just needs to rename extracted folder to
# "$HOME/.local/opt/$pkg_cmd_name-v$WEBI_VERSION"
pkg_post_install () { # Override
webi_path_add " $pkg_dst_bin " # should probably update PATH
}
pkg_done_message () {} # Override, pretty print a success message Voir webi/template.sh
Ces variables seront définies par le serveur:
WEBI_PKG=example@v1
WEBI_TAG=v1
WEBI_HOST=https://webinstall.dev
WEBI_RELEASES=https://webinstall.dev/api/releases/example@v1 ? os=macos & arch=amd64 & pretty=true
WEBI_CSV=v1.0.2,
WEBI_VERSION=1.0.2
WEBI_MAJOR=1
WEBI_MINOR=0
WEBI_PATCH=2
WEBI_LTS=
WEBI_CHANNEL=stable
WEBI_EXT=tar
WEBI_PKG_URL=https://cdn.example.com/example-macos-amd64.tar.gz
WEBI_PKG_FILE=example-macos-amd64.tar.gzPKG_NAME=example
PKG_OSES=macos,linux,windows
PKG_ARCHES=amd64,arm64,x86
PKG_FORMATS=zip,xzWEBI_TMP= ${WEBI_TMP :- " $( mktemp -d -t webinstall-foobar.XXXXXXXX ) " }
WEBI_SINGLE= " " webi_check # Checks to see if the selected version is already installed (and re-links if so)
webi_download # Downloads the selected release to $HOME/Downloads/webi/<package-name>.tar.gz
webi_extract # Extracts the download to /tmp/<package-name>-<random>/
webi_path_add /new/path # Adds /new/path to PATH for bash, zsh, and fish
webi_pre_install # Runs webi_check, webi_download, and webi_extract
webi_install # Moves extracted files from $WEBI_TMP to $pkg_src
webi_link # replaces any existing symlink with the currently selected version
webi_post_install # Runs `webi_path_add $pkg_dst_bin`@github.com/node/node )ghi node/node pour github spécifiquement)