ripgrep_all 0.9.3

rga: ripgrep, but also search in PDFs, E-Books, Office documents, zip, tar.gz, etc.
#!/bin/bash

# package the build artifacts

set -ex

. "$(dirname $0)/utils.sh"

# Generate artifacts for release
mk_artifacts() {
    CARGO="$(builder)"
	"$CARGO" build --target "$TARGET" --release
}

# run from tmpdir, put results in $1/
# currently windows only, because other OS probably have a package manager
# also currently just a fixed version of each tool since it doesn't matter much
download_other_binaries() {
    outdir="$1"
    mkdir -p "$outdir/licenses" "$outdir/lib"

    # ffmpeg
    wget -q https://ffmpeg.zeranoe.com/builds/win64/static/ffmpeg-4.1.3-win64-static.zip -O ffmpeg.zip
    unzip ffmpeg.zip
    cp ffmpeg-*/bin/{ffmpeg,ffprobe}.exe "$outdir/lib"
    cp ffmpeg-*/LICENSE.txt "$outdir/licenses/ffmpeg"

    # poppler
    wget -q https://blog.alivate.com.au/wp-content/uploads/2018/10/poppler-0.68.0_x86.7z -O poppler.7z
    7z x poppler.7z
    for f in pdftotext.exe libpoppler-79.dll libgcc_s_dw2-1.dll libstdc++-6.dll jpeg62.dll libpng16-16.dll libtiff3.dll zlib1.dll freetype6.dll libpoppler-79.dll; do
        cp poppler-*/bin/"$f" "$outdir/lib"
    done
    cp poppler-*/bin/COPYING3 "$outdir/licenses/poppler"
    
    wget -q https://github.com/jgm/pandoc/releases/download/2.7.3/pandoc-2.7.3-windows-x86_64.zip -O pandoc.zip
    unzip pandoc.zip
    cp pandoc-*/pandoc.exe "$outdir/lib"
    cp pandoc-*/COPYRIGHT.txt "$outdir/licenses/pandoc"

    wget -q https://github.com/BurntSushi/ripgrep/releases/download/11.0.1/ripgrep-11.0.1-x86_64-pc-windows-msvc.zip -O ripgrep.zip
    unzip ripgrep.zip
    cp rg.exe "$outdir/lib"

}

mk_tarball() {
    # When cross-compiling, use the right `strip` tool on the binary.
    local gcc_prefix="$(gcc_prefix)"
    # Create a temporary dir that contains our staging area.
    # $tmpdir/$name is what eventually ends up as the deployed archive.
    local tmpdir="$(mktemp -d)"
    local name="${PROJECT_NAME}-${TRAVIS_TAG}-${TARGET}"
    local staging="$tmpdir/$name"
    mkdir -p "$staging/"
    # mkdir -p "$staging"/{complete,doc}
    # The deployment directory is where the final archive will reside.
    # This path is known by the .travis.yml configuration.
    local out_dir="$(pwd)/deployment"
    mkdir -p "$out_dir"
    # Find the correct (most recent) Cargo "out" directory. The out directory
    # contains shell completion files and the man page.
    local cargo_out_dir="$(cargo_out_dir "target/$TARGET")"

    bin_ext=""
    if is_windows; then
        bin_ext=".exe"
    fi

    # Copy the binaries and strip it.
    for binary in rga rga-preproc; do
        cp "target/$TARGET/release/$binary$bin_ext" "$staging/$binary$bin_ext"
        # "${gcc_prefix}strip" "$staging/$binary"
    done
    # Copy the licenses and README.
    cp {README.md,LICENSE.md} "$staging/"
    # Copy documentation and man page.
    # cp {CHANGELOG.md,FAQ.md,GUIDE.md} "$staging/doc/"
    #if command -V a2x 2>&1 > /dev/null; then
    #  # The man page should only exist if we have asciidoc installed.
    #  cp "$cargo_out_dir/rg.1" "$staging/doc/"
    #fi
    # Copy shell completion files.
    # cp "$cargo_out_dir"/{rg.bash,rg.fish,_rg.ps1} "$staging/complete/"
    # cp complete/_rg "$staging/complete/"

    if is_windows; then
        (cd "$tmpdir" && download_other_binaries "$name")
        (cd "$tmpdir" && 7z a "$out_dir/$name.7z" "$name")
    else
        (cd "$tmpdir" && tar czf "$out_dir/$name.tar.gz" "$name")
    fi
    rm -rf "$tmpdir"
}

main() {
    mk_artifacts
    mk_tarball
}

main