packages feed

liquidhaskell-0.8.10.7: scripts/release_to_hackage.sh

#!/usr/bin/env bash

set -euo pipefail

LIQUIDHASKELL_VER=$(cat "liquidhaskell.cabal" | grep "^version" | awk '{print $2}')
TO_UPLOAD=($(ls | grep "^liquid\-.*" | xargs echo))
GREEN='\033[0;32m'
NC='\033[0m' # no colour
UPLOAD_CMD=(cabal upload)
SDIST_CMD=(stack sdist)
TMP_TAR_DIR=$(mktemp -d /tmp/liquid-release.XXXXXX)
USER_PROVIDED_OPTIONS=$@

# Run the upload command to actually upload the packages.
function doUpload {

    ${SDIST_CMD[@]} . "--tar-dir=$TMP_TAR_DIR"
    ${UPLOAD_CMD[@]} ${USER_PROVIDED_OPTIONS[@]} "$TMP_TAR_DIR/liquidhaskell-$LIQUIDHASKELL_VER.tar.gz"

    for pkg in "${TO_UPLOAD[@]}"
    do
        pkg_version=$(cat $pkg/$pkg.cabal | grep "^version" | awk '{print $2}')
        ${SDIST_CMD[@]} $pkg "--tar-dir=$TMP_TAR_DIR"
        ${UPLOAD_CMD[@]} ${USER_PROVIDED_OPTIONS[@]} "$TMP_TAR_DIR/${pkg}-${pkg_version}.tar.gz"
    done
}

# Shows a recap of the packages that will be uploaded, as well as the commands that
# will be run.
function showRecap {

    echo -e "\nThe following packages will be uploaded:\n"

    echo -e liquidhaskell-${GREEN}$LIQUIDHASKELL_VER${NC}
    for pkg in "${TO_UPLOAD[@]}"
    do
        pkg_version=$(cat $pkg/$pkg.cabal | grep "^version" | awk '{print $2}')
        echo -e $pkg-${GREEN}$pkg_version${NC}
    done

    echo -e "\nHere is what I will run:\n"

    # Special treatment for liquidhaskell (due to the megarepo structure)
    echo "${SDIST_CMD[@]} . --tar-dir=$TMP_TAR_DIR"
    echo "${UPLOAD_CMD[@]} ${USER_PROVIDED_OPTIONS[@]} $TMP_TAR_DIR/liquidhaskell-$LIQUIDHASKELL_VER.tar.gz"

    echo ""

    for pkg in "${TO_UPLOAD[@]}"
    do
        pkg_version=$(cat $pkg/$pkg.cabal | grep "^version" | awk '{print $2}')
        echo "${SDIST_CMD[@]} $pkg --tar-dir=$TMP_TAR_DIR"
        echo "${UPLOAD_CMD[@]} ${USER_PROVIDED_OPTIONS[@]} $TMP_TAR_DIR/${pkg}-${pkg_version}.tar.gz"
        echo ""
    done

    echo ""

}

# Shows the recap and ask the user for a choice.
function main {

    showRecap

    read -p "Continue [Y/n]? " choice
    case "$choice" in
      y|Y ) doUpload;;
      n|N ) echo "Operation aborted.";;
      * ) echo "Invalid choice.";;
    esac

}

# Main starts here.
main