#!/bin/sh . .github/scripts/env.sh ecabal() { cabal "$@" } nonfatal() { "$@" || "$* failed" } sync_from() { if [ "${RUNNER_OS}" != "Windows" ] ; then cabal_store_path="$(dirname "$(cabal help user-config | tail -n 1 | xargs)")/store" fi cabal-cache.sh sync-from-archive \ --host-name-override=${S3_HOST} \ --host-port-override=443 \ --host-ssl-override=True \ --region us-west-2 \ $([ "${RUNNER_OS}" != "Windows" ] && echo --store-path="$cabal_store_path") \ --archive-uri "s3://ghcup-hs/${RUNNER_OS}-${ARCH}-${DISTRO}" } sync_to() { if [ "${RUNNER_OS}" != "Windows" ] ; then cabal_store_path="$(dirname "$(cabal help user-config | tail -n 1 | xargs)")/store" fi cabal-cache.sh sync-to-archive \ --host-name-override=${S3_HOST} \ --host-port-override=443 \ --host-ssl-override=True \ --region us-west-2 \ $([ "${RUNNER_OS}" != "Windows" ] && echo --store-path="$cabal_store_path") \ --archive-uri "s3://ghcup-hs/${RUNNER_OS}-${ARCH}-${DISTRO}" } raw_eghcup() { "$GHCUP_BIN/ghcup${ext}" -v -c "$@" } eghcup() { if [ "${OS}" = "Windows" ] ; then "$GHCUP_BIN/ghcup${ext}" -c -s "file:/$CI_PROJECT_DIR/data/metadata/ghcup-${JSON_VERSION}.yaml" "$@" else "$GHCUP_BIN/ghcup${ext}" -c -s "file://$CI_PROJECT_DIR/data/metadata/ghcup-${JSON_VERSION}.yaml" "$@" fi } sha_sum() { if [ "${OS}" = "FreeBSD" ] ; then sha256 "$@" else sha256sum "$@" fi } git_describe() { git config --global --get-all safe.directory | grep '^\*$' || git config --global --add safe.directory "*" git describe --always } download_cabal_cache() { ( set -e mkdir -p "$HOME/.local/bin" dest="$HOME/.local/bin/cabal-cache" url="" exe="" cd /tmp case "${RUNNER_OS}" in "Linux") case "${ARCH}" in "32") url=https://downloads.haskell.org/~ghcup/unofficial-bindists/cabal-cache/experimental5/i386-linux-cabal-cache ;; "64") url=https://downloads.haskell.org/~ghcup/unofficial-bindists/cabal-cache/experimental5/x86_64-linux-cabal-cache ;; "ARM64") url=https://downloads.haskell.org/~ghcup/unofficial-bindists/cabal-cache/experimental5/aarch64-linux-cabal-cache ;; "ARM") url=https://downloads.haskell.org/~ghcup/unofficial-bindists/cabal-cache/experimental5/armv7-linux-cabal-cache ;; esac ;; "FreeBSD") url=https://downloads.haskell.org/~ghcup/unofficial-bindists/cabal-cache/experimental5/x86_64-portbld-freebsd-cabal-cache ;; "Windows") exe=".exe" url=https://downloads.haskell.org/~ghcup/unofficial-bindists/cabal-cache/experimental5/x86_64-mingw64-cabal-cache ;; "macOS") case "${ARCH}" in "ARM64") url=https://downloads.haskell.org/~ghcup/unofficial-bindists/cabal-cache/experimental5/aarch64-apple-darwin-cabal-cache ;; "64") url=https://downloads.haskell.org/~ghcup/unofficial-bindists/cabal-cache/experimental5/x86_64-apple-darwin-cabal-cache ;; esac ;; esac if [ -n "${url}" ] ; then case "${url##*.}" in "gz") curl -L -o - "${url}" | gunzip > cabal-cache${exe} ;; *) curl -o cabal-cache${exe} -L "${url}" ;; esac sha_sum cabal-cache${exe} mv "cabal-cache${exe}" "${dest}${exe}" chmod +x "${dest}${exe}" fi # install shell wrapper cp "${CI_PROJECT_DIR}"/.github/scripts/cabal-cache.sh "$HOME"/.local/bin/ chmod +x "$HOME"/.local/bin/cabal-cache.sh ) } build_with_cache() { ecabal configure "$@" ecabal build --dependencies-only "$@" --dry-run sync_from ecabal build --dependencies-only "$@" || sync_to sync_to ecabal build "$@" sync_to } install_ghcup() { case "${RUNNER_OS}" in "Linux") case "${ARCH}" in "ARM"*) if command -v ghcup ; then mkdir -p "$GHCUP_BIN" cp "$(command -v ghcup)" "$GHCUP_BIN/ghcup${ext}" else install_ghcup_curl_sh fi ;; *) install_ghcup_curl_sh ;; esac ;; *) install_ghcup_curl_sh ;; esac } install_ghcup_curl_sh() { curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | BOOTSTRAP_HASKELL_NONINTERACTIVE=1 BOOTSTRAP_HASKELL_MINIMAL=1 BOOTSTRAP_HASKELL_INSTALL_NO_STACK=yes sh } strip_binary() { ( set -e local binary=$1 case "$(uname -s)" in "Darwin"|"darwin") ;; MSYS_*|MINGW*) ;; *) strip -s "${binary}" ;; esac ) }