make _example current, add rg for Windows

This commit is contained in:
AJ ONeal
2020-08-22 20:21:01 +00:00
parent 31e780afa6
commit 1c97e1c661
8 changed files with 190 additions and 115 deletions
+20 -15
View File
@@ -1,33 +1,38 @@
---
title: Foo Bar
bin: foobar
homepage: https://example.com/foobar
tagline: To err is human, but to foobar...
homepage: https://github.com/webinstall/foobar
tagline: |
foobar: An example that doesn't exist.
---
<!--
- The first h1 is for README.md preview only and will be ignored
Note: Delete this comment section.
Need an example that has an **alias**? See `bat`.
Need a Windows example using **msvc**? See `bat`.
-->
# Foo Bar
### Updating `foo`
<!--
- Everything before the first h1 is ignored
- Everything after that and before the first h2 is the description
-->
`webi foo@stable`
Foo Bar is a community-developed, commercially supported destruction system.
Use the `@beta` tag for pre-releases.
## Examples
## Cheat Sheet
Really mess something up
> `foo` doesn't exist and this text should have been replaced. It doesn't do
> anything, but what it does is useful because it is; everybody knows it.
To run foo:
```bash
foobar my-file.txt
foo
```
Mess up the entire volume, forcefully and recursively
### Add Baz Highlighting
To run foo with both bar and baz highlighting turned on:
```bash
foobar -rf /
foo --bar=baz
```
+62
View File
@@ -0,0 +1,62 @@
#!/usr/bin/env pwsh
##################
# Install foobar #
##################
# Every package should define these variables
$pkg_cmd_name = "foo"
$pkg_dst_cmd = "$Env:USERPROFILE\.local\bin\foo.exe"
$pkg_dst = "$pkg_dst_cmd"
$pkg_src_cmd = "$Env:USERPROFILE\.local\opt\foobar-v$Env:WEBI_VERSION\bin\foo.exe"
$pkg_src_bin = "$Env:USERPROFILE\.local\opt\foobar-v$Env:WEBI_VERSION\bin"
$pkg_src_dir = "$Env:USERPROFILE\.local\opt\foobar-v$Env:WEBI_VERSION"
$pkg_src = "$pkg_src_cmd"
$pkg_download = "$Env:USERPROFILE\Downloads\$Env:WEBI_PKG_FILE"
# Fetch archive
IF (!(Test-Path -Path "$Env:USERPROFILE\Downloads\$Env:WEBI_PKG_FILE"))
{
# TODO: arch detection
echo "Downloading foobar from $Env:WEBI_PKG_URL to $pkg_download"
& curl.exe -A "$Env:WEBI_UA" -fsSL "$Env:WEBI_PKG_URL" -o "$pkg_download.part"
& move "$pkg_download.part" "$pkg_download"
}
IF (!(Test-Path -Path "$pkg_src_cmd"))
{
echo "Installing foobar"
# TODO: create package-specific temp directory
# Enter tmp
pushd .local\tmp
# Remove any leftover tmp cruft
Remove-Item -Path ".\foobar-v*" -Recurse -ErrorAction Ignore
Remove-Item -Path ".\foo.exe" -Recurse -ErrorAction Ignore
# NOTE: DELETE THIS COMMENT IF NOT USED
# Move single binary into root of temporary folder
#& move "$pkg_download" "foo.exe"
# Unpack archive file into this temporary directory
# Windows BSD-tar handles zip. Imagine that.
echo "Unpacking $pkg_download"
& tar xf "$pkg_download"
& dir
# Settle unpacked archive into place
echo "Install Location: $pkg_src_cmd"
New-Item "$pkg_src_bin" -ItemType Directory
Move-Item -Path ".\foobar-*\foo.exe" -Destination "$pkg_src_bin"
# Exit tmp
popd
}
echo "Copying into '$pkg_dst_cmd' from '$pkg_src_cmd'"
Remove-Item -Path "$pkg_dst_cmd" -Recurse -ErrorAction Ignore
Copy-Item -Path "$pkg_src" -Destination "$pkg_dst" -Recurse
+29 -69
View File
@@ -1,79 +1,39 @@
#!/bin/bash
set -e
set -u
{
set -e
set -u
## The defaults can be assumed if these are not set
##################
# Install foobar #
##################
## The command name may be different from the package name
## (i.e. golang => go, rustlang => cargo, ripgrep => rg)
## Note: $HOME may contain special characters and should alway be quoted
# Every package should define these 6 variables
pkg_cmd_name="foo"
pkg_cmd_name="xmpl"
pkg_dst_cmd="$HOME/.local/bin/foo"
pkg_dst="$pkg_dst_cmd"
## Some of these directories may be the same, in some cases
#pkg_dst="$HOME/.local/opt/xmpl"
#pkg_dst_bin="$HOME/.local/opt/xmpl/bin"
#pkg_dst_cmd="$HOME/.local/opt/xmpl/bin/xmpl"
pkg_src_cmd="$HOME/.local/opt/foobar-v$WEBI_VERSION/bin/foo"
pkg_src_dir="$HOME/.local/opt/foobar-v$WEBI_VERSION"
pkg_src="$pkg_src_cmd"
#pkg_src="$HOME/.local/opt/xmpl-v$WEBI_VERSION"
#pkg_src_bin="$HOME/.local/opt/xmpl-v$WEBI_VERSION/bin"
#pkg_src_cmd="$HOME/.local/opt/xmpl-v$WEBI_VERSION/bin/xmpl"
# pkg_install must be defined by every package
pkg_install() {
# ~/.local/opt/foobar-v0.99.9/bin
mkdir -p "$(dirname $pkg_src_cmd)"
# Different packages represent the version in different ways
# ex: node v12.8.0 (leading 'v')
# ex: go1.14 (no space, nor trailing '.0's)
# ex: flutter 1.17.2 (plain)
pkg_format_cmd_version() {
my_version=$1
echo "$pkg_cmd_name v$my_version"
}
# mv ./foobar-*/foo ~/.local/opt/foobar-v0.99.9/bin/foo
mv ./foobar-*/foo "$pkg_src_cmd"
}
# pkg_get_current_version is recommended, but (soon) not required
pkg_get_current_version() {
# 'foo --version' has output in this format:
# foobar 0.99.9 (rev abcdef0123)
# This trims it down to just the version number:
# 0.99.9
echo $(foo --version 2>/dev/null | head -n 1 | cut -d ' ' -f 2)
}
# The version info should be reduced to a sortable version, without any leading characters
# (i.e. v12.8.0 => 12.8.0, go1.14 => 1.14, 1.12.13+hotfix => 1.12.13+hotfix)
pkg_get_current_version() {
echo "$(xmpl --version 2>/dev/null | head -n 1 | cut -d' ' -f2)"
}
# For (re-)linking to the desired installed version
# (for example: 'go' is special and needs both $HOME/go and $HOME/.local/opt/go)
# (others like 'rg', 'hugo', and 'caddy' are single files that just get replaced)
pkg_link() {
rm -rf "$pkg_dst"
ln -s "$pkg_src" "$pkg_dst"
}
pkg_pre_install() {
# web_* are defined in _webi/template.sh at https://github.com/webinstall/packages
# if selected version is installed, re-link it and quit
webi_check
# will save to ~/Downloads/$WEBI_PKG_FILE by default
webi_download
# supported formats (.xz, .tar.*, .zip) will be extracted to $WEBI_TMP
webi_extract
}
# For installing from the extracted package tmp directory
pkg_install() {
# remove the versioned folder, just in case it's there with junk
rm -rf "$pkg_src"
# rename the entire extracted folder to the new location
# (this will be "$HOME/.local/opt/xmpl-v$WEBI_VERSION" by default)
mv ./"$pkg_cmd_name"* "$pkg_src"
}
# For updating PATHs and installing companion tools
pkg_post_install() {
pkg_link
# web_path_add is defined in _webi/template.sh at https://github.com/webinstall/packages
webi_path_add "$pkg_dst_bin"
}
pkg_done_message() {
echo "Installed 'example' as 'xmpl' at $pkg_dst_cmd"
}
+14 -28
View File
@@ -1,42 +1,28 @@
'use strict';
var github = require('../_common/github.js');
var owner = 'HorseAJ86';
var repo = 'shmatter';
var owner = 'BurntSushi';
var repo = 'ripgrep';
/******************************************************************************/
/** Note: Delete this Comment! **/
/** **/
/** Need a an example that filters out miscellaneous release files? **/
/** See `deno`, `gitea`, or `caddy` **/
/** **/
/******************************************************************************/
module.exports = function (request) {
// 1. fetch the list of releases
// 2. translate into the style of object that webinstall needs
// 3. missing / guessable pieces will be filled automatically by filename and such
// (in this example the github releases module does 100% of the work)
return github(request, owner, repo).then(function (data) {
var releases = data.releases;
/*
// Example:
var releases = [{
"name": "shmatter-darwin-x64-1.0.0.tgz",
"version": "v1.0.0",
"lts": false, // long-term support release
"channel": "stable", // stable|rc|beta|dev
"date": "2020-05-07",
"download": "https://github.com/HorseAJ86/shmatter/releases/download/v1.0.0/shmatter-darwin-x64-1.0.0.tgz",
"os": "", // will be guessed as macos (darwin -> macos)
"arch": "", // will be guessed as amd64 (x64 -> amd64)
"ext": "" // will be guessed as tar (tgz -> tar.gz -> tar)
}]
*/
return { releases: releases };
return github(request, owner, repo).then(function (all) {
return all;
});
};
if (module === require.main) {
module.exports(require('@root/request')).then(function (all) {
// limit the example output
all.releases = all.releases.slice(0, 5);
all = require('../_webi/normalize.js')(all);
// just select the first 5 for demonstration
all.releases = all.releases.slice(0, 5);
console.info(JSON.stringify(all, null, 2));
});
}
+4 -1
View File
@@ -84,6 +84,7 @@ function normalize(all) {
}
supported.arches[rel.arch] = true;
var tarExt;
if (!rel.ext) {
// pkg-v1.0.tar.gz => ['gz', 'tar', '0', 'pkg-v1']
// pkg-v1.0.tar => ['tar', '0' ,'pkg-v1']
@@ -96,8 +97,10 @@ function normalize(all) {
exts = exts.reverse().slice(0, 2);
if ('tar' === exts[1]) {
rel.ext = exts.reverse().join('.');
tarExt = 'tar';
} else if ('tgz' == exts[0]) {
rel.ext = 'tar.gz';
tarExt = 'tar';
} else {
rel.ext = exts[0];
}
@@ -106,7 +109,7 @@ function normalize(all) {
rel.ext = 'exe';
}
}
supported.formats[rel.ext] = true;
supported.formats[tarExt || rel.ext] = true;
if (all.download) {
rel.download = all.download.replace(/{{ download }}/, rel.download);
+58
View File
@@ -0,0 +1,58 @@
#!/usr/bin/env pwsh
###################
# Install ripgrep #
###################
# Every package should define these variables
$pkg_cmd_name = "rg"
$pkg_dst_cmd = "$Env:USERPROFILE\.local\bin\rg.exe"
$pkg_dst = "$pkg_dst_cmd"
$pkg_src_cmd = "$Env:USERPROFILE\.local\opt\ripgrep-v$Env:WEBI_VERSION\bin\rg.exe"
$pkg_src_bin = "$Env:USERPROFILE\.local\opt\ripgrep-v$Env:WEBI_VERSION\bin"
$pkg_src_dir = "$Env:USERPROFILE\.local\opt\ripgrep-v$Env:WEBI_VERSION"
$pkg_src = "$pkg_src_cmd"
$pkg_download = "$Env:USERPROFILE\Downloads\$Env:WEBI_PKG_FILE"
# Fetch archive
IF (!(Test-Path -Path "$Env:USERPROFILE\Downloads\$Env:WEBI_PKG_FILE"))
{
# TODO: arch detection
echo "Downloading ripgrep from $Env:WEBI_PKG_URL to $pkg_download"
& curl.exe -A "$Env:WEBI_UA" -fsSL "$Env:WEBI_PKG_URL" -o "$pkg_download.part"
& move "$pkg_download.part" "$pkg_download"
}
IF (!(Test-Path -Path "$pkg_src_cmd"))
{
echo "Installing ripgrep"
# TODO: create package-specific temp directory
# Enter tmp
pushd .local\tmp
# Remove any leftover tmp cruft
Remove-Item -Path ".\ripgrep-v*" -Recurse -ErrorAction Ignore
Remove-Item -Path ".\rg.exe" -Recurse -ErrorAction Ignore
# Unpack archive file into this temporary directory
# Windows BSD-tar handles zip. Imagine that.
echo "Unpacking $pkg_download"
& tar xf "$pkg_download"
& dir
# Settle unpacked archive into place
echo "Install Location: $pkg_src_cmd"
New-Item "$pkg_src_bin" -ItemType Directory
Move-Item -Path ".\ripgrep-*\rg.exe" -Destination "$pkg_src_bin"
# Exit tmp
popd
}
echo "Copying into '$pkg_dst_cmd' from '$pkg_src_cmd'"
Remove-Item -Path "$pkg_dst_cmd" -Recurse -ErrorAction Ignore
Copy-Item -Path "$pkg_src" -Destination "$pkg_dst" -Recurse
+3 -2
View File
@@ -13,7 +13,8 @@ module.exports = function (request) {
if (module === require.main) {
module.exports(require('@root/request')).then(function (all) {
all = require('../_webi/normalize.js')(all);
console.info(JSON.stringify(all));
//console.info(JSON.stringify(all, null, 2));
// just select the first 5 for demonstration
all.releases = all.releases.slice(0, 5);
console.info(JSON.stringify(all, null, 2));
});
}