Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
72f8e53344
|
|||
|
9c464ec9fc
|
|||
|
f575dcdad6
|
21
.github/scripts/common.sh
vendored
21
.github/scripts/common.sh
vendored
@@ -129,27 +129,6 @@ build_with_cache() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
install_ghcup() {
|
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
|
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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
28
.github/workflows/docker.yaml
vendored
28
.github/workflows/docker.yaml
vendored
@@ -72,20 +72,12 @@ jobs:
|
|||||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||||
|
|
||||||
- name: Build and push (debian buster)
|
- name: Build and push
|
||||||
uses: docker/build-push-action@v3
|
uses: docker/build-push-action@v3
|
||||||
with:
|
with:
|
||||||
context: ./docker/arm32v7/buster
|
context: ./docker/arm32v7
|
||||||
push: true
|
push: true
|
||||||
tags: hasufell/arm32v7-debian-haskell:10
|
tags: hasufell/arm32v7-ubuntu-haskell:focal
|
||||||
platforms: linux/arm
|
|
||||||
|
|
||||||
- name: Build and push (ubuntu focal)
|
|
||||||
uses: docker/build-push-action@v3
|
|
||||||
with:
|
|
||||||
context: ./docker/arm32v7/focal
|
|
||||||
push: true
|
|
||||||
tags: hasufell/arm32v7-debian-haskell:10
|
|
||||||
platforms: linux/arm
|
platforms: linux/arm
|
||||||
|
|
||||||
docker-aarch:
|
docker-aarch:
|
||||||
@@ -108,18 +100,10 @@ jobs:
|
|||||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||||
|
|
||||||
- name: Build and push (debian buster)
|
- name: Build and push
|
||||||
uses: docker/build-push-action@v3
|
uses: docker/build-push-action@v3
|
||||||
with:
|
with:
|
||||||
context: ./docker/arm64v8/buster
|
context: ./docker/arm64v8/
|
||||||
push: true
|
push: true
|
||||||
tags: hasufell/arm64v8-debian-haskell:10
|
tags: hasufell/arm64v8-ubuntu-haskell:focal
|
||||||
platforms: linux/arm64
|
|
||||||
|
|
||||||
- name: Build and push (ubuntu focal)
|
|
||||||
uses: docker/build-push-action@v3
|
|
||||||
with:
|
|
||||||
context: ./docker/arm64v8/focal
|
|
||||||
push: true
|
|
||||||
tags: hasufell/arm64v8-debian-haskell:10
|
|
||||||
platforms: linux/arm64
|
platforms: linux/arm64
|
||||||
|
|||||||
12
.github/workflows/release.yaml
vendored
12
.github/workflows/release.yaml
vendored
@@ -99,7 +99,7 @@ jobs:
|
|||||||
GHC_VER: 9.2.5
|
GHC_VER: 9.2.5
|
||||||
ARCH: ARM64
|
ARCH: ARM64
|
||||||
steps:
|
steps:
|
||||||
- uses: docker://arm64v8/debian:10
|
- uses: docker://arm64v8/ubuntu:focal
|
||||||
name: Cleanup (aarch64 linux)
|
name: Cleanup (aarch64 linux)
|
||||||
with:
|
with:
|
||||||
args: "find . -mindepth 1 -maxdepth 1 -exec rm -rf -- {} +"
|
args: "find . -mindepth 1 -maxdepth 1 -exec rm -rf -- {} +"
|
||||||
@@ -115,7 +115,7 @@ jobs:
|
|||||||
submodules: 'true'
|
submodules: 'true'
|
||||||
|
|
||||||
- if: matrix.ARCH == 'ARM'
|
- if: matrix.ARCH == 'ARM'
|
||||||
uses: docker://hasufell/arm32v7-debian-haskell:10
|
uses: docker://hasufell/arm32v7-ubuntu-haskell:focal
|
||||||
name: Run build (armv7 linux)
|
name: Run build (armv7 linux)
|
||||||
with:
|
with:
|
||||||
args: sh .github/scripts/build.sh
|
args: sh .github/scripts/build.sh
|
||||||
@@ -129,7 +129,7 @@ jobs:
|
|||||||
S3_HOST: ${{ env.S3_HOST }}
|
S3_HOST: ${{ env.S3_HOST }}
|
||||||
|
|
||||||
- if: matrix.ARCH == 'ARM64'
|
- if: matrix.ARCH == 'ARM64'
|
||||||
uses: docker://hasufell/arm64v8-debian-haskell:10
|
uses: docker://hasufell/arm64v8-ubuntu-haskell:focal
|
||||||
name: Run build (aarch64 linux)
|
name: Run build (aarch64 linux)
|
||||||
with:
|
with:
|
||||||
args: sh .github/scripts/build.sh
|
args: sh .github/scripts/build.sh
|
||||||
@@ -342,7 +342,7 @@ jobs:
|
|||||||
DISTRO: Ubuntu
|
DISTRO: Ubuntu
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: docker://arm64v8/debian:10
|
- uses: docker://arm64v8/ubuntu:focal
|
||||||
name: Cleanup (aarch64 linux)
|
name: Cleanup (aarch64 linux)
|
||||||
with:
|
with:
|
||||||
args: "find . -mindepth 1 -maxdepth 1 -exec rm -rf -- {} +"
|
args: "find . -mindepth 1 -maxdepth 1 -exec rm -rf -- {} +"
|
||||||
@@ -358,7 +358,7 @@ jobs:
|
|||||||
path: ./out
|
path: ./out
|
||||||
|
|
||||||
- if: matrix.ARCH == 'ARM'
|
- if: matrix.ARCH == 'ARM'
|
||||||
uses: docker://hasufell/arm32v7-debian-haskell:10
|
uses: docker://hasufell/arm32v7-ubuntu-haskell:focal
|
||||||
name: Run test (armv7 linux)
|
name: Run test (armv7 linux)
|
||||||
with:
|
with:
|
||||||
args: sh .github/scripts/test.sh
|
args: sh .github/scripts/test.sh
|
||||||
@@ -369,7 +369,7 @@ jobs:
|
|||||||
DISTRO: Ubuntu
|
DISTRO: Ubuntu
|
||||||
|
|
||||||
- if: matrix.ARCH == 'ARM64'
|
- if: matrix.ARCH == 'ARM64'
|
||||||
uses: docker://hasufell/arm64v8-debian-haskell:10
|
uses: docker://hasufell/arm64v8-ubuntu-haskell:focal
|
||||||
name: Run test (aarch64 linux)
|
name: Run test (aarch64 linux)
|
||||||
with:
|
with:
|
||||||
args: sh .github/scripts/test.sh
|
args: sh .github/scripts/test.sh
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ data ConfigCommand
|
|||||||
= ShowConfig
|
= ShowConfig
|
||||||
| SetConfig String (Maybe String)
|
| SetConfig String (Maybe String)
|
||||||
| InitConfig
|
| InitConfig
|
||||||
| AddReleaseChannel URI
|
| AddReleaseChannel Bool URI
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -74,7 +74,7 @@ configP = subparser
|
|||||||
showP = info (pure ShowConfig) (progDesc "Show current config (default)")
|
showP = info (pure ShowConfig) (progDesc "Show current config (default)")
|
||||||
setP = info argsP (progDesc "Set config KEY to VALUE (or specify as single json value)" <> footerDoc (Just $ text configSetFooter))
|
setP = info argsP (progDesc "Set config KEY to VALUE (or specify as single json value)" <> footerDoc (Just $ text configSetFooter))
|
||||||
argsP = SetConfig <$> argument str (metavar "<JSON_VALUE | YAML_KEY>") <*> optional (argument str (metavar "YAML_VALUE"))
|
argsP = SetConfig <$> argument str (metavar "<JSON_VALUE | YAML_KEY>") <*> optional (argument str (metavar "YAML_VALUE"))
|
||||||
addP = info (AddReleaseChannel <$> argument (eitherReader uriParser) (metavar "URI" <> completer fileUri))
|
addP = info (AddReleaseChannel <$> switch (long "force" <> help "Delete existing entry (if any) and append instead of failing") <*> argument (eitherReader uriParser) (metavar "URI" <> completer fileUri))
|
||||||
(progDesc "Add a release channel from a URI")
|
(progDesc "Add a release channel from a URI")
|
||||||
|
|
||||||
|
|
||||||
@@ -159,6 +159,9 @@ updateSettings usl usr =
|
|||||||
--[ Entrypoint ]--
|
--[ Entrypoint ]--
|
||||||
------------------
|
------------------
|
||||||
|
|
||||||
|
data Duplicate = Duplicate -- ^ there is a duplicate somewhere in the middle
|
||||||
|
| NoDuplicate -- ^ there is no duplicate
|
||||||
|
| DuplicateLast -- ^ there's a duplicate, but it's the last element
|
||||||
|
|
||||||
|
|
||||||
config :: forall m. ( Monad m
|
config :: forall m. ( Monad m
|
||||||
@@ -203,22 +206,50 @@ config configCommand settings userConf keybindings runLogger = case configComman
|
|||||||
pure $ ExitFailure 65
|
pure $ ExitFailure 65
|
||||||
VLeft _ -> pure $ ExitFailure 65
|
VLeft _ -> pure $ ExitFailure 65
|
||||||
|
|
||||||
AddReleaseChannel uri -> do
|
AddReleaseChannel force uri -> do
|
||||||
case urlSource settings of
|
r <- runE @'[DuplicateReleaseChannel] $ do
|
||||||
AddSource xs -> do
|
case urlSource settings of
|
||||||
doConfig (defaultUserSettings { uUrlSource = Just $ AddSource (xs <> [Right uri]) })
|
AddSource xs -> do
|
||||||
pure ExitSuccess
|
case checkDuplicate xs (Right uri) of
|
||||||
GHCupURL -> do
|
Duplicate
|
||||||
doConfig (defaultUserSettings { uUrlSource = Just $ AddSource [Right uri] })
|
| not force -> throwE (DuplicateReleaseChannel uri)
|
||||||
pure ExitSuccess
|
DuplicateLast -> pure ()
|
||||||
OwnSource xs -> do
|
_ -> lift $ doConfig (defaultUserSettings { uUrlSource = Just $ AddSource (appendUnique xs (Right uri)) })
|
||||||
doConfig (defaultUserSettings { uUrlSource = Just $ OwnSource (xs <> [Right uri]) })
|
GHCupURL -> do
|
||||||
pure ExitSuccess
|
lift $ doConfig (defaultUserSettings { uUrlSource = Just $ AddSource [Right uri] })
|
||||||
OwnSpec spec -> do
|
pure ()
|
||||||
doConfig (defaultUserSettings { uUrlSource = Just $ OwnSource ([Left spec, Right uri]) })
|
OwnSource xs -> do
|
||||||
|
case checkDuplicate xs (Right uri) of
|
||||||
|
Duplicate
|
||||||
|
| not force -> throwE (DuplicateReleaseChannel uri)
|
||||||
|
DuplicateLast -> pure ()
|
||||||
|
_ -> lift $ doConfig (defaultUserSettings { uUrlSource = Just $ OwnSource (appendUnique xs (Right uri)) })
|
||||||
|
OwnSpec spec -> do
|
||||||
|
lift $ doConfig (defaultUserSettings { uUrlSource = Just $ OwnSource [Left spec, Right uri] })
|
||||||
|
pure ()
|
||||||
|
case r of
|
||||||
|
VRight _ -> do
|
||||||
pure ExitSuccess
|
pure ExitSuccess
|
||||||
|
VLeft e -> do
|
||||||
|
runLogger $ logError $ T.pack $ prettyHFError e
|
||||||
|
pure $ ExitFailure 15
|
||||||
|
|
||||||
where
|
where
|
||||||
|
checkDuplicate :: Eq a => [a] -> a -> Duplicate
|
||||||
|
checkDuplicate xs a
|
||||||
|
| last xs == a = DuplicateLast
|
||||||
|
| a `elem` xs = Duplicate
|
||||||
|
| otherwise = NoDuplicate
|
||||||
|
|
||||||
|
-- appends the element to the end of the list, but also removes it from the existing list
|
||||||
|
appendUnique :: Eq a => [a] -> a -> [a]
|
||||||
|
appendUnique xs' e = go xs'
|
||||||
|
where
|
||||||
|
go [] = [e]
|
||||||
|
go (x:xs)
|
||||||
|
| x == e = go xs -- skip
|
||||||
|
| otherwise = x : go xs
|
||||||
|
|
||||||
doConfig :: MonadIO m => UserSettings -> m ()
|
doConfig :: MonadIO m => UserSettings -> m ()
|
||||||
doConfig usersettings = do
|
doConfig usersettings = do
|
||||||
let settings' = updateSettings usersettings userConf
|
let settings' = updateSettings usersettings userConf
|
||||||
|
|||||||
@@ -54,7 +54,10 @@ ENV NO_COLOR=1
|
|||||||
RUN ghcup config set gpg-setting GPGStrict && \
|
RUN ghcup config set gpg-setting GPGStrict && \
|
||||||
ghcup --verbose install ghc --isolate=/usr --force ${GHC} && \
|
ghcup --verbose install ghc --isolate=/usr --force ${GHC} && \
|
||||||
ghcup --verbose install cabal --isolate=/usr/bin --force ${CABAL_INSTALL} && \
|
ghcup --verbose install cabal --isolate=/usr/bin --force ${CABAL_INSTALL} && \
|
||||||
ghcup gc -s -c -t
|
find "/usr/lib/ghc-${GHC}/" \( -name "*_p.a" -o -name "*.p_hi" \) -type f -delete && \
|
||||||
|
rm -r "/usr/share/doc/ghc-${GHC}" && \
|
||||||
|
rm -rf /tmp/ghcup* && \
|
||||||
|
ghcup gc -p -s -c -t
|
||||||
|
|
||||||
ENV PATH /root/.cabal/bin:/root/.ghcup/bin:/root/.local/bin:$PATH
|
ENV PATH /root/.cabal/bin:/root/.ghcup/bin:/root/.local/bin:$PATH
|
||||||
|
|
||||||
@@ -1,61 +0,0 @@
|
|||||||
FROM arm32v7/debian:10
|
|
||||||
|
|
||||||
ENV LANG C.UTF-8
|
|
||||||
ENV DEBIAN_FRONTEND=noninteractive
|
|
||||||
ENV TZ=Asia/Singapore
|
|
||||||
|
|
||||||
COPY update_opt.sh /usr/bin/update_opt.sh
|
|
||||||
RUN chmod +x /usr/bin/update_opt.sh
|
|
||||||
|
|
||||||
RUN apt-get update && \
|
|
||||||
apt-get install -y --no-install-recommends \
|
|
||||||
ca-certificates \
|
|
||||||
curl \
|
|
||||||
dirmngr \
|
|
||||||
g++ \
|
|
||||||
git \
|
|
||||||
gnupg \
|
|
||||||
libsqlite3-dev \
|
|
||||||
libtinfo-dev \
|
|
||||||
libgmp-dev \
|
|
||||||
make \
|
|
||||||
netbase \
|
|
||||||
openssh-client \
|
|
||||||
xz-utils \
|
|
||||||
zlib1g-dev \
|
|
||||||
libnuma-dev libgmp10 libssl-dev liblzma-dev libbz2-dev wget lsb-release software-properties-common apt-transport-https gcc autoconf automake build-essential gzip patchelf tree \
|
|
||||||
llvm-11 clang-11 && \
|
|
||||||
rm -rf /var/lib/apt/lists/*
|
|
||||||
|
|
||||||
RUN update_opt.sh 11 1
|
|
||||||
|
|
||||||
ARG GHCUP_VERSION=0.1.17.8
|
|
||||||
ARG GPG_KEY=7784930957807690A66EBDBE3786C5262ECB4A3F
|
|
||||||
|
|
||||||
# install ghcup
|
|
||||||
RUN gpg --batch --keyserver keys.openpgp.org --recv-keys $GPG_KEY && \
|
|
||||||
curl -sSfL -O https://downloads.haskell.org/~ghcup/$GHCUP_VERSION/armv7-linux-ghcup-$GHCUP_VERSION && \
|
|
||||||
curl -sSfL -O https://downloads.haskell.org/~ghcup/$GHCUP_VERSION/SHA256SUMS && \
|
|
||||||
curl -sSfL -O https://downloads.haskell.org/~ghcup/$GHCUP_VERSION/SHA256SUMS.sig && \
|
|
||||||
gpg --verify SHA256SUMS.sig SHA256SUMS && \
|
|
||||||
sha256sum -c --ignore-missing SHA256SUMS && \
|
|
||||||
mv armv7-linux-ghcup-$GHCUP_VERSION /usr/bin/ghcup && \
|
|
||||||
chmod +x /usr/bin/ghcup && \
|
|
||||||
rm -rf SHA256SUMS SHA256SUMS.sig
|
|
||||||
|
|
||||||
ARG GHC=8.10.7
|
|
||||||
ARG CABAL_INSTALL=3.6.2.0
|
|
||||||
ARG STACK=2.9.1
|
|
||||||
|
|
||||||
ENV GHCUP_CURL_OPTS="--silent"
|
|
||||||
ENV NO_COLOR=1
|
|
||||||
|
|
||||||
# install haskell toolchain
|
|
||||||
RUN ghcup config set gpg-setting GPGStrict && \
|
|
||||||
ghcup --verbose install ghc --isolate=/usr --force ${GHC} && \
|
|
||||||
ghcup --verbose install cabal --isolate=/usr/bin --force ${CABAL_INSTALL} && \
|
|
||||||
ghcup gc -s -c -t
|
|
||||||
|
|
||||||
ENV PATH /root/.cabal/bin:/root/.ghcup/bin:/root/.local/bin:$PATH
|
|
||||||
|
|
||||||
CMD ["ghci"]
|
|
||||||
@@ -54,7 +54,10 @@ ENV NO_COLOR=1
|
|||||||
RUN ghcup config set gpg-setting GPGStrict && \
|
RUN ghcup config set gpg-setting GPGStrict && \
|
||||||
ghcup --verbose install ghc --isolate=/usr --force ${GHC} && \
|
ghcup --verbose install ghc --isolate=/usr --force ${GHC} && \
|
||||||
ghcup --verbose install cabal --isolate=/usr/bin --force ${CABAL_INSTALL} && \
|
ghcup --verbose install cabal --isolate=/usr/bin --force ${CABAL_INSTALL} && \
|
||||||
ghcup gc -s -c -t
|
find "/usr/lib/ghc-${GHC}/" \( -name "*_p.a" -o -name "*.p_hi" \) -type f -delete && \
|
||||||
|
rm -r "/usr/share/doc/ghc-${GHC}" && \
|
||||||
|
rm -rf /tmp/ghcup* && \
|
||||||
|
ghcup gc -p -s -c -t
|
||||||
|
|
||||||
ENV PATH /root/.cabal/bin:/root/.ghcup/bin:/root/.local/bin:$PATH
|
ENV PATH /root/.cabal/bin:/root/.ghcup/bin:/root/.local/bin:$PATH
|
||||||
|
|
||||||
@@ -1,61 +0,0 @@
|
|||||||
FROM arm64v8/debian:10
|
|
||||||
|
|
||||||
ENV LANG C.UTF-8
|
|
||||||
ENV DEBIAN_FRONTEND=noninteractive
|
|
||||||
ENV TZ=Asia/Singapore
|
|
||||||
|
|
||||||
COPY update_opt.sh /usr/bin/update_opt.sh
|
|
||||||
RUN chmod +x /usr/bin/update_opt.sh
|
|
||||||
|
|
||||||
RUN apt-get update && \
|
|
||||||
apt-get install -y --no-install-recommends \
|
|
||||||
ca-certificates \
|
|
||||||
curl \
|
|
||||||
dirmngr \
|
|
||||||
g++ \
|
|
||||||
git \
|
|
||||||
gnupg \
|
|
||||||
libsqlite3-dev \
|
|
||||||
libtinfo-dev \
|
|
||||||
libgmp-dev \
|
|
||||||
make \
|
|
||||||
netbase \
|
|
||||||
openssh-client \
|
|
||||||
xz-utils \
|
|
||||||
zlib1g-dev \
|
|
||||||
libnuma-dev libgmp10 libssl-dev liblzma-dev libbz2-dev wget lsb-release software-properties-common apt-transport-https gcc autoconf automake build-essential gzip patchelf tree \
|
|
||||||
llvm-11 clang-11 && \
|
|
||||||
rm -rf /var/lib/apt/lists/*
|
|
||||||
|
|
||||||
RUN update_opt.sh 11 1
|
|
||||||
|
|
||||||
ARG GHCUP_VERSION=0.1.18.0
|
|
||||||
ARG GPG_KEY=7784930957807690A66EBDBE3786C5262ECB4A3F
|
|
||||||
|
|
||||||
# install ghcup
|
|
||||||
RUN gpg --batch --keyserver keys.openpgp.org --recv-keys $GPG_KEY && \
|
|
||||||
curl -sSfL -O https://downloads.haskell.org/~ghcup/$GHCUP_VERSION/aarch64-linux-ghcup-$GHCUP_VERSION && \
|
|
||||||
curl -sSfL -O https://downloads.haskell.org/~ghcup/$GHCUP_VERSION/SHA256SUMS && \
|
|
||||||
curl -sSfL -O https://downloads.haskell.org/~ghcup/$GHCUP_VERSION/SHA256SUMS.sig && \
|
|
||||||
gpg --verify SHA256SUMS.sig SHA256SUMS && \
|
|
||||||
sha256sum -c --ignore-missing SHA256SUMS && \
|
|
||||||
mv aarch64-linux-ghcup-$GHCUP_VERSION /usr/bin/ghcup && \
|
|
||||||
chmod +x /usr/bin/ghcup && \
|
|
||||||
rm -rf SHA256SUMS SHA256SUMS.sig
|
|
||||||
|
|
||||||
ARG GHC=8.10.7
|
|
||||||
ARG CABAL_INSTALL=3.6.2.0
|
|
||||||
ARG STACK=2.9.1
|
|
||||||
|
|
||||||
ENV GHCUP_CURL_OPTS="--silent"
|
|
||||||
ENV NO_COLOR=1
|
|
||||||
|
|
||||||
# install haskell toolchain
|
|
||||||
RUN ghcup config set gpg-setting GPGStrict && \
|
|
||||||
ghcup --verbose install ghc --isolate=/usr --force ${GHC} && \
|
|
||||||
ghcup --verbose install cabal --isolate=/usr/bin --force ${CABAL_INSTALL} && \
|
|
||||||
ghcup gc -s -c -t
|
|
||||||
|
|
||||||
ENV PATH /root/.cabal/bin:/root/.ghcup/bin:/root/.local/bin:$PATH
|
|
||||||
|
|
||||||
CMD ["ghci"]
|
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
# update_alternatives.sh
|
|
||||||
|
|
||||||
update_alternatives() {
|
|
||||||
local version=${1}
|
|
||||||
local priority=${2}
|
|
||||||
local master=${3}
|
|
||||||
local slaves=${4}
|
|
||||||
local path=${5}
|
|
||||||
local cmdln
|
|
||||||
|
|
||||||
cmdln="--verbose --install ${path}${master} ${master} ${path}${master}-${version} ${priority}"
|
|
||||||
for slave in ${slaves}; do
|
|
||||||
cmdln="${cmdln} --slave ${path}${slave} ${slave} ${path}${slave}-${version}"
|
|
||||||
done
|
|
||||||
update-alternatives ${cmdln}
|
|
||||||
}
|
|
||||||
|
|
||||||
if [[ ${#} -ne 2 ]]; then
|
|
||||||
echo usage: "${0}" clang_version priority
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
version=${1}
|
|
||||||
priority=${2}
|
|
||||||
path="/usr/bin/"
|
|
||||||
|
|
||||||
master="llvm-config"
|
|
||||||
slaves="llvm-addr2line llvm-ar llvm-as llvm-bcanalyzer llvm-bitcode-strip llvm-cat llvm-cfi-verify llvm-cov llvm-c-test llvm-cvtres llvm-cxxdump llvm-cxxfilt llvm-cxxmap llvm-debuginfod llvm-debuginfod-find llvm-diff llvm-dis llvm-dlltool llvm-dwarfdump llvm-dwarfutil llvm-dwp llvm-exegesis llvm-extract llvm-gsymutil llvm-ifs llvm-install-name-tool llvm-jitlink llvm-jitlink-executor llvm-lib llvm-libtool-darwin llvm-link llvm-lipo llvm-lto llvm-lto2 llvm-mc llvm-mca llvm-ml llvm-modextract llvm-mt llvm-nm llvm-objcopy llvm-objdump llvm-omp-device-info llvm-opt-report llvm-otool llvm-pdbutil llvm-PerfectShuffle llvm-profdata llvm-profgen llvm-ranlib llvm-rc llvm-readelf llvm-readobj llvm-reduce llvm-remark-size-diff llvm-rtdyld llvm-sim llvm-size llvm-split llvm-stress llvm-strings llvm-strip llvm-symbolizer llvm-tapi-diff llvm-tblgen llvm-tli-checker llvm-undname llvm-windres llvm-xray"
|
|
||||||
|
|
||||||
update_alternatives "${version}" "${priority}" "${master}" "${slaves}" "${path}"
|
|
||||||
|
|
||||||
master="clang"
|
|
||||||
slaves="analyze-build asan_symbolize bugpoint c-index-test clang++ clang-apply-replacements clang-change-namespace clang-check clang-cl clang-cpp clangd clang-doc clang-extdef-mapping clang-format clang-format-diff clang-include-fixer clang-linker-wrapper clang-move clang-nvlink-wrapper clang-offload-bundler clang-offload-packager clang-offload-wrapper clang-pseudo clang-query clang-refactor clang-rename clang-reorder-fields clang-repl clang-scan-deps clang-tidy count diagtool dsymutil FileCheck find-all-symbols git-clang-format hmaptool hwasan_symbolize intercept-build ld64.lld ld.lld llc lld lldb lldb-argdumper lldb-instr lldb-server lldb-vscode lld-link lli lli-child-target modularize not obj2yaml opt pp-trace run-clang-tidy sancov sanstats scan-build scan-build-py scan-view split-file UnicodeNameMappingGenerator verify-uselistorder wasm-ld yaml2obj yaml-bench"
|
|
||||||
|
|
||||||
update_alternatives "${version}" "${priority}" "${master}" "${slaves}" "${path}"
|
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
# update_alternatives.sh
|
|
||||||
|
|
||||||
update_alternatives() {
|
|
||||||
local version=${1}
|
|
||||||
local priority=${2}
|
|
||||||
local master=${3}
|
|
||||||
local slaves=${4}
|
|
||||||
local path=${5}
|
|
||||||
local cmdln
|
|
||||||
|
|
||||||
cmdln="--verbose --install ${path}${master} ${master} ${path}${master}-${version} ${priority}"
|
|
||||||
for slave in ${slaves}; do
|
|
||||||
cmdln="${cmdln} --slave ${path}${slave} ${slave} ${path}${slave}-${version}"
|
|
||||||
done
|
|
||||||
update-alternatives ${cmdln}
|
|
||||||
}
|
|
||||||
|
|
||||||
if [[ ${#} -ne 2 ]]; then
|
|
||||||
echo usage: "${0}" clang_version priority
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
version=${1}
|
|
||||||
priority=${2}
|
|
||||||
path="/usr/bin/"
|
|
||||||
|
|
||||||
master="llvm-config"
|
|
||||||
slaves="llvm-addr2line llvm-ar llvm-as llvm-bcanalyzer llvm-bitcode-strip llvm-cat llvm-cfi-verify llvm-cov llvm-c-test llvm-cvtres llvm-cxxdump llvm-cxxfilt llvm-cxxmap llvm-debuginfod llvm-debuginfod-find llvm-diff llvm-dis llvm-dlltool llvm-dwarfdump llvm-dwarfutil llvm-dwp llvm-exegesis llvm-extract llvm-gsymutil llvm-ifs llvm-install-name-tool llvm-jitlink llvm-jitlink-executor llvm-lib llvm-libtool-darwin llvm-link llvm-lipo llvm-lto llvm-lto2 llvm-mc llvm-mca llvm-ml llvm-modextract llvm-mt llvm-nm llvm-objcopy llvm-objdump llvm-omp-device-info llvm-opt-report llvm-otool llvm-pdbutil llvm-PerfectShuffle llvm-profdata llvm-profgen llvm-ranlib llvm-rc llvm-readelf llvm-readobj llvm-reduce llvm-remark-size-diff llvm-rtdyld llvm-sim llvm-size llvm-split llvm-stress llvm-strings llvm-strip llvm-symbolizer llvm-tapi-diff llvm-tblgen llvm-tli-checker llvm-undname llvm-windres llvm-xray"
|
|
||||||
|
|
||||||
update_alternatives "${version}" "${priority}" "${master}" "${slaves}" "${path}"
|
|
||||||
|
|
||||||
master="clang"
|
|
||||||
slaves="analyze-build asan_symbolize bugpoint c-index-test clang++ clang-apply-replacements clang-change-namespace clang-check clang-cl clang-cpp clangd clang-doc clang-extdef-mapping clang-format clang-format-diff clang-include-fixer clang-linker-wrapper clang-move clang-nvlink-wrapper clang-offload-bundler clang-offload-packager clang-offload-wrapper clang-pseudo clang-query clang-refactor clang-rename clang-reorder-fields clang-repl clang-scan-deps clang-tidy count diagtool dsymutil FileCheck find-all-symbols git-clang-format hmaptool hwasan_symbolize intercept-build ld64.lld ld.lld llc lld lldb lldb-argdumper lldb-instr lldb-server lldb-vscode lld-link lli lli-child-target modularize not obj2yaml opt pp-trace run-clang-tidy sancov sanstats scan-build scan-build-py scan-view split-file UnicodeNameMappingGenerator verify-uselistorder wasm-ld yaml2obj yaml-bench"
|
|
||||||
|
|
||||||
update_alternatives "${version}" "${priority}" "${master}" "${slaves}" "${path}"
|
|
||||||
@@ -35,6 +35,8 @@ import URI.ByteString
|
|||||||
|
|
||||||
import qualified Data.Map.Strict as M
|
import qualified Data.Map.Strict as M
|
||||||
import qualified Data.Text as T
|
import qualified Data.Text as T
|
||||||
|
import qualified Data.Text.Encoding as E
|
||||||
|
import qualified Data.Text.Encoding.Error as E
|
||||||
import Data.Data (Proxy(..))
|
import Data.Data (Proxy(..))
|
||||||
|
|
||||||
|
|
||||||
@@ -82,6 +84,7 @@ allHFError = unlines allErrors
|
|||||||
, let proxy = Proxy :: Proxy HadrianNotFound in format proxy
|
, let proxy = Proxy :: Proxy HadrianNotFound in format proxy
|
||||||
, let proxy = Proxy :: Proxy ToolShadowed in format proxy
|
, let proxy = Proxy :: Proxy ToolShadowed in format proxy
|
||||||
, let proxy = Proxy :: Proxy ContentLengthError in format proxy
|
, let proxy = Proxy :: Proxy ContentLengthError in format proxy
|
||||||
|
, let proxy = Proxy :: Proxy DuplicateReleaseChannel in format proxy
|
||||||
, ""
|
, ""
|
||||||
, "# high level errors (4000+)"
|
, "# high level errors (4000+)"
|
||||||
, let proxy = Proxy :: Proxy DownloadFailed in format proxy
|
, let proxy = Proxy :: Proxy DownloadFailed in format proxy
|
||||||
@@ -640,6 +643,19 @@ instance HFErrorProject ContentLengthError where
|
|||||||
eBase _ = 340
|
eBase _ = 340
|
||||||
eDesc _ = "File content length verification failed"
|
eDesc _ = "File content length verification failed"
|
||||||
|
|
||||||
|
data DuplicateReleaseChannel = DuplicateReleaseChannel URI
|
||||||
|
deriving Show
|
||||||
|
|
||||||
|
instance HFErrorProject DuplicateReleaseChannel where
|
||||||
|
eBase _ = 350
|
||||||
|
eDesc _ = "Duplicate release channel detected when adding URI.\nGiving up. You can use '--force' to remove and append the duplicate URI (this may change order/semantics)."
|
||||||
|
|
||||||
|
instance Pretty DuplicateReleaseChannel where
|
||||||
|
pPrint (DuplicateReleaseChannel uri) =
|
||||||
|
text $ "Duplicate release channel detected when adding: \n "
|
||||||
|
<> (T.unpack . E.decodeUtf8With E.lenientDecode . serializeURIRef') uri
|
||||||
|
<> "\nGiving up. You can use '--force' to remove and append the duplicate URI (this may change order/semantics)."
|
||||||
|
|
||||||
-------------------------
|
-------------------------
|
||||||
--[ High-level errors ]--
|
--[ High-level errors ]--
|
||||||
-------------------------
|
-------------------------
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ data GHCupInfo = GHCupInfo
|
|||||||
, _ghcupDownloads :: GHCupDownloads
|
, _ghcupDownloads :: GHCupDownloads
|
||||||
, _globalTools :: Map GlobalTool DownloadInfo
|
, _globalTools :: Map GlobalTool DownloadInfo
|
||||||
}
|
}
|
||||||
deriving (Show, GHC.Generic)
|
deriving (Show, GHC.Generic, Eq)
|
||||||
|
|
||||||
instance NFData GHCupInfo
|
instance NFData GHCupInfo
|
||||||
|
|
||||||
@@ -87,7 +87,7 @@ data Requirements = Requirements
|
|||||||
{ _distroPKGs :: [Text]
|
{ _distroPKGs :: [Text]
|
||||||
, _notes :: Text
|
, _notes :: Text
|
||||||
}
|
}
|
||||||
deriving (Show, GHC.Generic)
|
deriving (Show, GHC.Generic, Eq)
|
||||||
|
|
||||||
instance NFData Requirements
|
instance NFData Requirements
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user