Allow our own cabal-install bindist builds
This commit is contained in:
28
.github/scripts/brew.sh
vendored
Normal file
28
.github/scripts/brew.sh
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -eux
|
||||
|
||||
# shellcheck disable=SC1091
|
||||
. .github/scripts/env.sh
|
||||
|
||||
if [ -e "$HOME/.brew" ] ; then
|
||||
(
|
||||
cd "$HOME/.brew"
|
||||
git fetch --depth 1
|
||||
git reset --hard origin/master
|
||||
)
|
||||
else
|
||||
git clone --depth=1 https://github.com/Homebrew/brew "$HOME/.brew"
|
||||
fi
|
||||
export PATH="$HOME/.brew/bin:$HOME/.brew/sbin:$PATH"
|
||||
|
||||
mkdir -p "$CI_PROJECT_DIR/.brew_cache"
|
||||
export HOMEBREW_CACHE="$CI_PROJECT_DIR/.brew_cache"
|
||||
mkdir -p "$CI_PROJECT_DIR/.brew_logs"
|
||||
export HOMEBREW_LOGS="$CI_PROJECT_DIR/.brew_logs"
|
||||
mkdir -p /private/tmp/.brew_tmp
|
||||
export HOMEBREW_TEMP=/private/tmp/.brew_tmp
|
||||
|
||||
#brew update
|
||||
brew install ${1+"$@"}
|
||||
|
||||
66
.github/scripts/build.sh
vendored
Normal file
66
.github/scripts/build.sh
vendored
Normal file
@@ -0,0 +1,66 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -eux
|
||||
|
||||
# shellcheck disable=SC1091
|
||||
. .github/scripts/env.sh
|
||||
# shellcheck disable=SC1091
|
||||
. .github/scripts/common.sh
|
||||
|
||||
uname -a
|
||||
uname -p
|
||||
uname
|
||||
pwd
|
||||
env
|
||||
|
||||
# ensure ghcup
|
||||
install_ghcup
|
||||
|
||||
# build
|
||||
ghcup install ghc "${GHC_VERSION}"
|
||||
ghcup set ghc "${GHC_VERSION}"
|
||||
sed -i.bak -e '/DELETE MARKER FOR CI/,/END DELETE/d' cabal.project # see comment in cabal.project
|
||||
ecabal update
|
||||
ecabal user-config diff
|
||||
ecabal user-config init -f
|
||||
"ghc-${GHC_VERSION}" --info
|
||||
"ghc" --info
|
||||
|
||||
# https://github.com/haskell/cabal/issues/7313#issuecomment-811851884
|
||||
if [ "$(getconf LONG_BIT)" == "32" ] || [ "${DISTRO}" == "CentOS" ] ; then
|
||||
echo 'constraints: lukko -ofd-locking' >> cabal.project.release.local
|
||||
fi
|
||||
|
||||
# shellcheck disable=SC2206
|
||||
args=(
|
||||
-w "ghc-$GHC_VERSION"
|
||||
--disable-profiling
|
||||
--enable-executable-stripping
|
||||
--project-file=cabal.project.release
|
||||
${ADD_CABAL_ARGS}
|
||||
)
|
||||
|
||||
run cabal v2-build "${args[@]}" cabal-install
|
||||
|
||||
mkdir -p "$CI_PROJECT_DIR/out"
|
||||
# shellcheck disable=SC2154
|
||||
cp "$(cabal list-bin "${args[@]}" cabal-install:exe:cabal)" "$CI_PROJECT_DIR/out/cabal$ext"
|
||||
cp dist-newstyle/cache/plan.json "$CI_PROJECT_DIR/out/plan.json"
|
||||
cd "$CI_PROJECT_DIR/out/"
|
||||
|
||||
# create tarball/zip
|
||||
TARBALL_PREFIX="cabal-install-$("$CI_PROJECT_DIR/out/cabal" --numeric-version)"
|
||||
case "${TARBALL_EXT}" in
|
||||
zip)
|
||||
zip "${TARBALL_PREFIX}-${ARTIFACT}.${TARBALL_EXT}" "cabal${ext}" plan.json
|
||||
;;
|
||||
tar.xz)
|
||||
tar caf "${TARBALL_PREFIX}-${ARTIFACT}.${TARBALL_EXT}" "cabal${ext}" plan.json
|
||||
;;
|
||||
*)
|
||||
fail "Unknown TARBALL_EXT: ${TARBALL_EXT}"
|
||||
;;
|
||||
esac
|
||||
|
||||
rm cabal plan.json
|
||||
|
||||
110
.github/scripts/common.sh
vendored
Normal file
110
.github/scripts/common.sh
vendored
Normal file
@@ -0,0 +1,110 @@
|
||||
#!/bin/bash
|
||||
|
||||
# shellcheck disable=SC1091
|
||||
. .github/scripts/env.sh
|
||||
|
||||
# Colors
|
||||
RED="0;31"
|
||||
LT_BROWN="1;33"
|
||||
LT_BLUE="1;34"
|
||||
|
||||
ecabal() {
|
||||
cabal "$@"
|
||||
}
|
||||
|
||||
nonfatal() {
|
||||
"$@" || "$* failed"
|
||||
}
|
||||
|
||||
sha_sum() {
|
||||
if [ "${RUNNER_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
|
||||
}
|
||||
|
||||
install_ghcup() {
|
||||
# find "$GHCUP_INSTALL_BASE_PREFIX"
|
||||
mkdir -p "$GHCUP_BIN"
|
||||
mkdir -p "$GHCUP_BIN"/../cache
|
||||
|
||||
if [ "${RUNNER_OS}" = "FreeBSD" ] ; then
|
||||
curl -o ghcup https://downloads.haskell.org/ghcup/tmp/x86_64-portbld-freebsd-ghcup-0.1.18.1
|
||||
chmod +x ghcup
|
||||
mv ghcup "$HOME/.local/bin/ghcup"
|
||||
else
|
||||
curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | BOOTSTRAP_HASKELL_MINIMAL=1 sh
|
||||
source "$(dirname "${GHCUP_BIN}")/env"
|
||||
ghcup install cabal --set "${BOOTSTRAP_HASKELL_CABAL_VERSION}"
|
||||
fi
|
||||
}
|
||||
|
||||
strip_binary() {
|
||||
(
|
||||
set -e
|
||||
local binary=$1
|
||||
case "$(uname -s)" in
|
||||
"Darwin"|"darwin")
|
||||
;;
|
||||
MSYS_*|MINGW*)
|
||||
;;
|
||||
*)
|
||||
strip -s "${binary}"
|
||||
;;
|
||||
esac
|
||||
)
|
||||
}
|
||||
|
||||
# GitLab Pipelines log section delimiters
|
||||
# https://gitlab.com/gitlab-org/gitlab-foss/issues/14664
|
||||
start_section() {
|
||||
name="$1"
|
||||
echo -e "section_start:$(date +%s):$name\015\033[0K"
|
||||
}
|
||||
|
||||
end_section() {
|
||||
name="$1"
|
||||
echo -e "section_end:$(date +%s):$name\015\033[0K"
|
||||
}
|
||||
|
||||
echo_color() {
|
||||
local color="$1"
|
||||
local msg="$2"
|
||||
echo -e "\033[${color}m${msg}\033[0m"
|
||||
}
|
||||
|
||||
error() { echo_color "${RED}" "$1"; }
|
||||
warn() { echo_color "${LT_BROWN}" "$1"; }
|
||||
info() { echo_color "${LT_BLUE}" "$1"; }
|
||||
|
||||
fail() { error "error: $1"; exit 1; }
|
||||
|
||||
run() {
|
||||
info "Running $*..."
|
||||
"$@" || ( error "$* failed"; return 1; )
|
||||
}
|
||||
|
||||
emake() {
|
||||
if command -v gmake >/dev/null 2>&1 ; then
|
||||
gmake "$@"
|
||||
else
|
||||
make "$@"
|
||||
fi
|
||||
}
|
||||
|
||||
mktempdir() {
|
||||
case "$(uname -s)" in
|
||||
"Darwin"|"darwin")
|
||||
mktemp -d -t cabal_ci.XXXXXXX
|
||||
;;
|
||||
*)
|
||||
mktemp -d
|
||||
;;
|
||||
esac
|
||||
}
|
||||
38
.github/scripts/env.sh
vendored
Normal file
38
.github/scripts/env.sh
vendored
Normal file
@@ -0,0 +1,38 @@
|
||||
#!/bin/bash
|
||||
|
||||
mkdir -p "$HOME"/.local/bin
|
||||
|
||||
if [ "${RUNNER_OS}" = "Windows" ] ; then
|
||||
ext=".exe"
|
||||
else
|
||||
# shellcheck disable=SC2034
|
||||
ext=''
|
||||
fi
|
||||
|
||||
export PATH="$HOME/.local/bin:$PATH"
|
||||
|
||||
export BOOTSTRAP_HASKELL_NONINTERACTIVE=1
|
||||
export BOOTSTRAP_HASKELL_CABAL_VERSION="${CABAL_VER:-3.8.1.0}"
|
||||
export BOOTSTRAP_HASKELL_ADJUST_CABAL_CONFIG=no
|
||||
export BOOTSTRAP_HASKELL_INSTALL_NO_STACK=yes
|
||||
export BOOTSTRAP_HASKELL_ADJUST_BASHRC=1
|
||||
|
||||
if [ "${RUNNER_OS}" = "Windows" ] ; then
|
||||
# on windows use pwd to get unix style path
|
||||
CI_PROJECT_DIR="$(pwd)"
|
||||
export CI_PROJECT_DIR
|
||||
export GHCUP_INSTALL_BASE_PREFIX="/c"
|
||||
export GHCUP_BIN="$GHCUP_INSTALL_BASE_PREFIX/ghcup/bin"
|
||||
export PATH="$GHCUP_BIN:$PATH"
|
||||
export CABAL_DIR="C:\\Users\\runneradmin\\AppData\\Roaming\\cabal"
|
||||
else
|
||||
export CI_PROJECT_DIR="${GITHUB_WORKSPACE}"
|
||||
export GHCUP_INSTALL_BASE_PREFIX="$CI_PROJECT_DIR"
|
||||
export GHCUP_BIN="$GHCUP_INSTALL_BASE_PREFIX/.ghcup/bin"
|
||||
export PATH="$GHCUP_BIN:$PATH"
|
||||
export CABAL_DIR="$CI_PROJECT_DIR/cabal"
|
||||
export CABAL_CACHE="$CI_PROJECT_DIR/cabal-cache"
|
||||
fi
|
||||
|
||||
export DEBIAN_FRONTEND=noninteractive
|
||||
export TZ=Asia/Singapore
|
||||
Reference in New Issue
Block a user