diff --git a/.hugo/version b/.hugo/version deleted file mode 100644 index 2db1f8a..0000000 --- a/.hugo/version +++ /dev/null @@ -1 +0,0 @@ -0.52/extended diff --git a/hugow b/hugow deleted file mode 100755 index 2d0b693..0000000 --- a/hugow +++ /dev/null @@ -1,430 +0,0 @@ -#!/usr/bin/env sh -# ------------------------------------------------------------------------------ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# ------------------------------------------------------------------------------ - -# ------------------------------------------------------------------------------ -# Hugo Wrapper (v1.1.0) -# -# Hugo Wrapper is a POSIX-style shell script which acts as a wrapper to download -# and execute Hugo binary for your platform. It can be executed in variety of -# Operating Systems and Command Shells. As a result, hugow has very minimal -# number of dependencies: -# -# downloader: wget or curl -# checksum : sha256sum or shasum or cksum -# tarball : tar -# -# https://github.com/khos2ow/hugo-wrapper -# ------------------------------------------------------------------------------ - -set -e - -VERSION_NUMBER="v1.1.0" - -# hugo-wrapper command available flags -get_version="" -get_latest=false -get_extended=false -upgrade=false -version=false -show_help=false - -# hugo related commands to pass through the actual binary -HUGO_ARGS="" - -while [ -n "$1" ]; do - case "$1" in - --get-version) get_version=$2; shift 2 ;; - --get-latest) get_latest=true; shift 1 ;; - --get-extended) get_extended=true; shift 1 ;; - --upgrade) upgrade=true; shift 1 ;; - --version) version=true; shift 1 ;; - -h | --help) show_help=true; shift 1 ;; - - *) HUGO_ARGS="$HUGO_ARGS $1"; shift 1 ;; - esac -done - -set -- $HUGO_ARGS - -if [ "$upgrade" = true ]; then - if [ "$get_extended" = true -o "$get_latest" = true -o -n "$get_version" ]; then - echo "Error: Flag --upgrade cannot be used together with --get-extended, --get-version or --get-latest" - exit 1 - fi -else - if [ "$get_latest" = true -a -n "$get_version" ]; then - echo "Error: Flags --get-version and --get-latest cannot be used together" - exit 1 - fi -fi - -# normalizing get_version -get_version_base="$(echo "$get_version" | cut -d "/" -f1)" -get_version_extended="$(echo "$get_version" | cut -d "/" -f2)" - -get_version="$get_version_base" - -if [ "$get_version_extended" = "extended" ]; then - get_extended=true -fi - -# check which download command (wget or curl) is available. -DOWNLOAD_COMMAND="" -DOWNLOAD_OUTPUT="" -DOWNLOAD_SILENT="" -DOWNLOAD_REDIRECT="" - -if command -v wget > /dev/null; then - DOWNLOAD_COMMAND="wget" - DOWNLOAD_OUTPUT="-O" - DOWNLOAD_SILENT="-q" - DOWNLOAD_REDIRECT="" -elif command -v curl > /dev/null; then - DOWNLOAD_COMMAND="curl" - DOWNLOAD_OUTPUT="-o" - DOWNLOAD_SILENT="-s" - DOWNLOAD_REDIRECT="-L" -else - echo "Error: Unable to find 'wget' or 'curl' command." - exit 1 -fi - -# OS type -os_type="" - -case "`uname -s`" in - Darwin) os_type="macOS" ;; - Linux) os_type="Linux" ;; - DragonFly) os_type="DragonFlyBSD" ;; - FreeBSD) os_type="FreeBSD" ;; - NetBSD) os_type="NetBSD" ;; - OpenBSD) os_type="OpenBSD" ;; - # CYGWIN* os_type="Windows" ;; - # MINGW*) os_type="Windows" ;; - # Windows_NT) os_type="Windows" ;; -esac - -# OS architecture -os_arch="" - -case "`uname -m`" in - x86) os_arch="32bit" ;; - x86_64) os_arch="64bit" ;; - amd64) os_arch="64bit" ;; - armv7l) os_arch="ARM" ;; - armv8) os_arch="ARM64" ;; -esac - -if [ -z "$os_type" -o -z "$os_arch" ]; then - echo "Error: Unknown OS type or architecture" - exit 1 -fi - -# ------------------------------------------------------------------------------ -# traverses directory structure from process work directory to filesystem root -# first directory with .hugo subdirectory is considered project base directory -# ------------------------------------------------------------------------------ -find_basedir() { - if [ -z "$1" ]; then - echo "Error: Path not specified to find_basedir" - return 1 - fi - - basedir="$1" - wdir="$1" - while [ "$wdir" != '/' ]; do - if [ -d "$wdir"/.hugo ]; then - basedir=$wdir - break - fi - if [ -d "${wdir}" ]; then - wdir=`cd "$wdir/.."; pwd` - fi - done - echo "${basedir}" -} - -BASE_DIR=`find_basedir "$(pwd)"` -if [ -z "$BASE_DIR" ]; then - echo "Error: Unable to find base directory." - exit 1 -fi - -if [ ! -d "$BASE_DIR/.hugo" ]; then - mkdir -p "$BASE_DIR/.hugo" -else - if [ -r "$BASE_DIR/.hugo/hugo" -a ! -s "$BASE_DIR/.hugo/hugo" ]; then - rm "$BASE_DIR/.hugo/hugo" - fi - if [ -r "$BASE_DIR/.hugo/version" -a ! -s "$BASE_DIR/.hugo/version" ]; then - rm "$BASE_DIR/.hugo/version" - fi -fi - -parse_json() { - local json="$1" - local field="$2" - - if [ -z "$json" ]; then - echo "" - elif [ -z "$field" ]; then - echo "" - fi - - temp=`echo $json | sed 's/\\\\\//\//g' | sed 's/[{}]//g' | awk -v k="text" '{n=split($0,a,","); for (i=1; i<=n; i++) print a[i]}' | sed 's/\"\:\"/\|/g' | sed 's/[\,]/ /g' | sed 's/\"//g' | grep -w $field` - - echo ${temp##*|} | sed "s/${field}: //g" -} - -perform_checksum() { - if [ -n "$1" ]; then - if command -v sha256sum > /dev/null; then - echo "$1" | sha256sum --check > /dev/null - elif command -v shasum > /dev/null; then - echo "$1" | shasum --algorithm 256 --check > /dev/null - elif command -v cksum > /dev/null; then - echo "$1" | cksum -a SHA256 -c > /dev/null - else - echo "Error: cannot find any checksum command" - exit 1 - fi - fi -} - -remove_file() { - if [ -n "$1" -a "$1" != "/" -a -f "$1" -a -r "$1" ] ; then - rm "$1" - fi -} - -download_version() { - local versionToDownload="$1" - local isExtended="$2" - - if [ -n "$versionToDownload" ]; then - local filenamePrefix="hugo" - local versionDownloadSuffix="" - - if [ "$isExtended" = true ]; then - filenamePrefix="hugo_extended" - versionDownloadSuffix="/extended" - fi - - if [ "$versionToDownload" = "LATEST" ]; then - latest_release=`$DOWNLOAD_COMMAND $DOWNLOAD_SILENT $DOWNLOAD_REDIRECT ${DOWNLOAD_OUTPUT}- https://api.github.com/repos/gohugoio/hugo/releases/latest` - versionToDownload=`parse_json "$latest_release" "tag_name"` - fi - - # strip down 'v' from begining of the string if exists - versionToDownload=`echo $versionToDownload | sed -ne 's/[^0-9]*\(\([0-9]*\.\)\{0,4\}[0-9]*\(\/extended\)*\).*/\1/p'` - - printf "downloading hugo binary version v${versionToDownload}${versionDownloadSuffix} ... " - - # download for specific OS and architecture - local binaryUrl="https://github.com/gohugoio/hugo/releases/download/v${versionToDownload}/${filenamePrefix}_${versionToDownload}_${os_type}-${os_arch}.tar.gz" - local checksumUrl="https://github.com/gohugoio/hugo/releases/download/v${versionToDownload}/${filenamePrefix}_${versionToDownload}_checksums.txt" - - local tarballName="${filenamePrefix}_${versionToDownload}_${os_type}-${os_arch}.tar.gz" - local tarballPath="$BASE_DIR/.hugo/${tarballName}" - local checksumName="checksum.txt" - local checksumPath="$BASE_DIR/.hugo/${checksumName}" - - $DOWNLOAD_COMMAND $DOWNLOAD_SILENT $DOWNLOAD_REDIRECT $DOWNLOAD_OUTPUT "$tarballPath" "$binaryUrl" & - $DOWNLOAD_COMMAND $DOWNLOAD_SILENT $DOWNLOAD_REDIRECT $DOWNLOAD_OUTPUT "$checksumPath" "$checksumUrl" & - wait - - if [ -s "$tarballPath" -a -s "$checksumPath" ]; then - printf "[done]\n" - else - printf "[failed]\n" - remove_file "$checksumPath" - remove_file "$tarballPath" - exit 1 - fi - - printf "verifying hugo binary version v${versionToDownload}${versionDownloadSuffix} ..... " - cd $BASE_DIR/.hugo/ - grep "${tarballName}" "$BASE_DIR/.hugo/$checksumName" | perform_checksum - cd - > /dev/null 2>&1 - wait - printf "[done]\n" - - printf "unzipping hugo binary version v${versionToDownload}${versionDownloadSuffix} ..... " - if [ -f "${tarballPath}" -a -r "${tarballPath}" ]; then - tar --directory="$BASE_DIR/.hugo/" -xzf "${tarballPath}" 2>&1 - wait - printf "[done]\n" - else - printf "[failed]\n" - remove_file "$checksumPath" - remove_file "$tarballPath" - exit 1 - fi - - # save the downloaded binary version into $BASE_DIR/.hugo/version - echo "${versionToDownload}${versionDownloadSuffix}" > $BASE_DIR/.hugo/version - - # cleanup after extraction - remove_file "$checksumPath" - remove_file "$tarballPath" - remove_file "$BASE_DIR/.hugo/LICENSE" - remove_file "$BASE_DIR/.hugo/README.md" - fi -} - -# ------------------------------------------------------------------------------ -# upgrade hugo wrapper binary and save it as ${BASE_DIR}/hugow -# ------------------------------------------------------------------------------ -if [ "$version" = true ]; then - echo "Hugo Wrapper $VERSION_NUMBER" - exit -fi - -# ------------------------------------------------------------------------------ -# upgrade hugo wrapper binary and save it as ${BASE_DIR}/hugow -# ------------------------------------------------------------------------------ -if [ "$upgrade" = true ]; then - printf "downloading hugow binary ... " - - latest_release=`$DOWNLOAD_COMMAND $DOWNLOAD_SILENT $DOWNLOAD_REDIRECT ${DOWNLOAD_OUTPUT}- https://api.github.com/repos/khos2ow/hugo-wrapper/releases/latest` - versionToDownload=`parse_json "$latest_release" "tag_name"` - - $DOWNLOAD_COMMAND $DOWNLOAD_SILENT $DOWNLOAD_REDIRECT $DOWNLOAD_OUTPUT "hugow" "https://github.com/khos2ow/hugo-wrapper/releases/download/${versionToDownload}/hugow" & - wait - printf "[done]\n" - chmod +x hugow - exit -fi - -# ------------------------------------------------------------------------------ -# download hugo binary and save it as ${BASE_DIR}/.hugo/hugo -# ------------------------------------------------------------------------------ -if [ -r "$BASE_DIR/.hugo/hugo" ]; then - current_binary_version="$($BASE_DIR/.hugo/hugo version | sed -ne 's/[^0-9]*\(\([0-9]*\.\)\{0,4\}[0-9]*\(\/extended\)*\).*/\1/p' | sed 's/^ *//;s/ *$//')" - - if [ "$get_extended" = true ]; then - suffix_extended_version="/extended" - fi - - # download hugo binary and save it as ${BASE_DIR}/.hugo/hugo - if [ -n "$get_version" ]; then - if [ "${get_version}${suffix_extended_version}" != "$current_binary_version" ]; then - # specified hugo version - download_version "$get_version" $get_extended - else - echo "hugo binary version ${get_version}${suffix_extended_version} already exists" - echo "${get_version}${suffix_extended_version}" > $BASE_DIR/.hugo/version - fi - elif [ $get_latest = true ]; then - latest_release=`$DOWNLOAD_COMMAND $DOWNLOAD_SILENT $DOWNLOAD_REDIRECT ${DOWNLOAD_OUTPUT}- https://api.github.com/repos/gohugoio/hugo/releases/latest` - latest_version=`parse_json "$latest_release" "tag_name" | sed -ne 's/[^0-9]*\(\([0-9]*\.\)\{0,4\}[0-9]*\(\/extended\)*\).*/\1/p'` - - if [ "${latest_version}${suffix_extended_version}" != "$current_binary_version" ]; then - # latest hugo version - download_version "$latest_version" $get_extended - else - echo "latest hugo binary version ${latest_version}${suffix_extended_version} already exists" - echo "${latest_version}${suffix_extended_version}" > $BASE_DIR/.hugo/version - fi - elif [ -r "$BASE_DIR/.hugo/version" ]; then - current_file_version="$(cat "$BASE_DIR/.hugo/version")" - - if [ "$current_file_version" != "$current_binary_version" ]; then - version_from_file="$(echo "$current_file_version" | cut -d "/" -f1)" - extended_from_file="$(echo "$current_file_version" | cut -d "/" -f2)" - - if [ "${extended_from_file}" = "extended" ]; then - isExtended=true - else - isExtended=false - fi - - # specified hugo version - download_version "$version_from_file" $isExtended - fi - else - # save the current binary version into $BASE_DIR/.hugo/version - echo "$current_binary_version" > $BASE_DIR/.hugo/version - fi -else - if [ -n "$get_version" ]; then - # specified hugo version - download_version "$get_version" $get_extended - elif [ $get_latest = true ]; then - # latest hugo version - download_version "LATEST" $get_extended - elif [ -r "$BASE_DIR/.hugo/version" ]; then - # specified hugo version - version_from_file="$(cat "$BASE_DIR/.hugo/version" | cut -d "/" -f1)" - extended_from_file="$(cat "$BASE_DIR/.hugo/version" | cut -d "/" -f2)" - - if [ "${extended_from_file}" = "extended" ]; then - isExtended=true - else - isExtended=false - fi - - download_version "${version_from_file}" $isExtended - else - # latest hugo version - download_version "LATEST" $get_extended - fi -fi - -# ------------------------------------------------------------------------------ -# only download binary and not execute hugo related command -# ------------------------------------------------------------------------------ -if [ "$get_latest" = true -o -n "$get_version" ]; then - ${BASE_DIR}/.hugo/hugo version - exit -fi - -# ------------------------------------------------------------------------------ -# Show help, both from hugow and ${BASE_DIR}/.hugo/hugo -# ------------------------------------------------------------------------------ -if [ $show_help = true ]; then - help=$(${BASE_DIR}/.hugo/hugo --help) - cat << USAGE -hugow is the universal wrapper for hugo main command. - -Hugo is a Fast and Flexible Static Site Generator -built with love by spf13 and friends in Go. - -Complete documentation is available at http://gohugo.io/. - -Flags: - --get-extended get hugo extended binary - --get-latest get latest version of hugo binary - --get-version string get specified version of hugo binary - --upgrade upgrade hugo wrapper binary itself - --version show version of hugo wrapper binary itself - -h, --help help for hugo-wrapper - --------- - -$help -USAGE - exit 0 -fi - -# ------------------------------------------------------------------------------ -# pass commands and flags to actual hugo binary -# ------------------------------------------------------------------------------ -${BASE_DIR}/.hugo/hugo "$@"