diff --git a/.github/scripts/common.sh b/.github/scripts/common.sh index 7cb6c65..1801045 100644 --- a/.github/scripts/common.sh +++ b/.github/scripts/common.sh @@ -129,6 +129,27 @@ build_with_cache() { } 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 } diff --git a/.github/workflows/docker.yaml b/.github/workflows/docker.yaml index 53b1dc4..9be8b23 100644 --- a/.github/workflows/docker.yaml +++ b/.github/workflows/docker.yaml @@ -72,20 +72,20 @@ jobs: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - - name: Build and push (focal) + - name: Build and push (debian buster) + uses: docker/build-push-action@v3 + with: + context: ./docker/arm32v7/buster + push: true + tags: hasufell/arm32v7-debian-haskell:10 + 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-ubuntu-haskell:focal - platforms: linux/arm - - - name: Build and push (bionic) - uses: docker/build-push-action@v3 - with: - context: ./docker/arm32v7/bionic - push: true - tags: hasufell/arm32v7-ubuntu-haskell:bionic + tags: hasufell/arm32v7-debian-haskell:10 platforms: linux/arm docker-aarch: @@ -108,18 +108,18 @@ jobs: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - - name: Build and push (focal) + - name: Build and push (debian buster) + uses: docker/build-push-action@v3 + with: + context: ./docker/arm64v8/buster + push: true + tags: hasufell/arm64v8-debian-haskell:10 + 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-ubuntu-haskell:focal - platforms: linux/arm64 - - - name: Build and push (bionic) - uses: docker/build-push-action@v3 - with: - context: ./docker/arm64v8/bionic - push: true - tags: hasufell/arm64v8-ubuntu-haskell:bionic + tags: hasufell/arm64v8-debian-haskell:10 platforms: linux/arm64 diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 4ea26c0..23a1925 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -99,7 +99,7 @@ jobs: GHC_VER: 9.2.5 ARCH: ARM64 steps: - - uses: docker://arm64v8/ubuntu:bionic + - uses: docker://arm64v8/debian:10 name: Cleanup (aarch64 linux) with: args: "find . -mindepth 1 -maxdepth 1 -exec rm -rf -- {} +" @@ -115,7 +115,7 @@ jobs: submodules: 'true' - if: matrix.ARCH == 'ARM' - uses: docker://hasufell/arm32v7-ubuntu-haskell:bionic + uses: docker://hasufell/arm32v7-debian-haskell:10 name: Run build (armv7 linux) with: args: sh .github/scripts/build.sh @@ -129,7 +129,7 @@ jobs: S3_HOST: ${{ env.S3_HOST }} - if: matrix.ARCH == 'ARM64' - uses: docker://hasufell/arm64v8-ubuntu-haskell:bionic + uses: docker://hasufell/arm64v8-debian-haskell:10 name: Run build (aarch64 linux) with: args: sh .github/scripts/build.sh @@ -342,7 +342,7 @@ jobs: DISTRO: Ubuntu steps: - - uses: docker://arm64v8/ubuntu:bionic + - uses: docker://arm64v8/debian:10 name: Cleanup (aarch64 linux) with: args: "find . -mindepth 1 -maxdepth 1 -exec rm -rf -- {} +" @@ -358,7 +358,7 @@ jobs: path: ./out - if: matrix.ARCH == 'ARM' - uses: docker://hasufell/arm32v7-ubuntu-haskell:bionic + uses: docker://hasufell/arm32v7-debian-haskell:10 name: Run test (armv7 linux) with: args: sh .github/scripts/test.sh @@ -369,7 +369,7 @@ jobs: DISTRO: Ubuntu - if: matrix.ARCH == 'ARM64' - uses: docker://hasufell/arm64v8-ubuntu-haskell:bionic + uses: docker://hasufell/arm64v8-debian-haskell:10 name: Run test (aarch64 linux) with: args: sh .github/scripts/test.sh diff --git a/docker/arm32v7/bionic/Dockerfile b/docker/arm32v7/buster/Dockerfile similarity index 63% rename from docker/arm32v7/bionic/Dockerfile rename to docker/arm32v7/buster/Dockerfile index fde7193..269a94f 100644 --- a/docker/arm32v7/bionic/Dockerfile +++ b/docker/arm32v7/buster/Dockerfile @@ -1,4 +1,4 @@ -FROM arm32v7/ubuntu:bionic +FROM arm32v7/debian:10 ENV LANG C.UTF-8 ENV DEBIAN_FRONTEND=noninteractive @@ -24,29 +24,14 @@ RUN apt-get update && \ 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-9 clang-9 && \ + llvm-11 clang-11 && \ rm -rf /var/lib/apt/lists/* -RUN update_opt.sh 9 1 +RUN update_opt.sh 11 1 ARG GHCUP_VERSION=0.1.17.8 ARG GPG_KEY=7784930957807690A66EBDBE3786C5262ECB4A3F -# install libtinfo.so.6 for ghcup -RUN cd /tmp && \ - curl -sSfL -O https://ftp.gnu.org/pub/gnu/ncurses/ncurses-6.1.tar.gz && \ - tar xf ncurses-6.1.tar.gz && \ - cd ncurses-6.1/ && \ - ./configure --prefix=/root/.local \ - --with-shared \ - --with-versioned-syms \ - --without-ada \ - --with-termlib && \ - make -j && \ - make install && \ - cd && \ - rm -rf /tmp/ncurses-6.1 - # 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 && \ @@ -54,12 +39,7 @@ RUN gpg --batch --keyserver keys.openpgp.org --recv-keys $GPG_KEY && \ 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.bin && \ - chmod +x /usr/bin/ghcup.bin && \ - echo '#!/bin/sh' > /usr/bin/ghcup && \ - echo '' >> /usr/bin/ghcup && \ - echo 'export LD_LIBRARY_PATH=/root/.local/lib' >> /usr/bin/ghcup && \ - echo 'exec /usr/bin/ghcup.bin "$@"' >> /usr/bin/ghcup && \ + mv armv7-linux-ghcup-$GHCUP_VERSION /usr/bin/ghcup && \ chmod +x /usr/bin/ghcup && \ rm -rf SHA256SUMS SHA256SUMS.sig @@ -74,10 +54,7 @@ ENV NO_COLOR=1 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} && \ - 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 + ghcup gc -s -c -t ENV PATH /root/.cabal/bin:/root/.ghcup/bin:/root/.local/bin:$PATH diff --git a/docker/arm32v7/bionic/update_opt.sh b/docker/arm32v7/buster/update_opt.sh similarity index 100% rename from docker/arm32v7/bionic/update_opt.sh rename to docker/arm32v7/buster/update_opt.sh diff --git a/docker/arm64v8/bionic/Dockerfile b/docker/arm64v8/buster/Dockerfile similarity index 63% rename from docker/arm64v8/bionic/Dockerfile rename to docker/arm64v8/buster/Dockerfile index 3f773a6..3a2bea1 100644 --- a/docker/arm64v8/bionic/Dockerfile +++ b/docker/arm64v8/buster/Dockerfile @@ -1,4 +1,4 @@ -FROM arm64v8/ubuntu:bionic +FROM arm64v8/debian:10 ENV LANG C.UTF-8 ENV DEBIAN_FRONTEND=noninteractive @@ -24,29 +24,14 @@ RUN apt-get update && \ 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-9 clang-9 && \ + llvm-11 clang-11 && \ rm -rf /var/lib/apt/lists/* -RUN update_opt.sh 9 1 +RUN update_opt.sh 11 1 ARG GHCUP_VERSION=0.1.18.0 ARG GPG_KEY=7784930957807690A66EBDBE3786C5262ECB4A3F -# install libtinfo.so.6 for ghcup -RUN cd /tmp && \ - curl -sSfL -O https://ftp.gnu.org/pub/gnu/ncurses/ncurses-6.1.tar.gz && \ - tar xf ncurses-6.1.tar.gz && \ - cd ncurses-6.1/ && \ - ./configure --prefix=/root/.local \ - --with-shared \ - --with-versioned-syms \ - --without-ada \ - --with-termlib && \ - make -j && \ - make install && \ - cd && \ - rm -rf /tmp/ncurses-6.1 - # 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 && \ @@ -54,12 +39,7 @@ RUN gpg --batch --keyserver keys.openpgp.org --recv-keys $GPG_KEY && \ 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.bin && \ - chmod +x /usr/bin/ghcup.bin && \ - echo '#!/bin/sh' > /usr/bin/ghcup && \ - echo '' >> /usr/bin/ghcup && \ - echo 'export LD_LIBRARY_PATH=/root/.local/lib' >> /usr/bin/ghcup && \ - echo 'exec /usr/bin/ghcup.bin "$@"' >> /usr/bin/ghcup && \ + mv aarch64-linux-ghcup-$GHCUP_VERSION /usr/bin/ghcup && \ chmod +x /usr/bin/ghcup && \ rm -rf SHA256SUMS SHA256SUMS.sig @@ -74,10 +54,7 @@ ENV NO_COLOR=1 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} && \ - 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 + ghcup gc -s -c -t ENV PATH /root/.cabal/bin:/root/.ghcup/bin:/root/.local/bin:$PATH diff --git a/docker/arm64v8/bionic/update_opt.sh b/docker/arm64v8/buster/update_opt.sh similarity index 100% rename from docker/arm64v8/bionic/update_opt.sh rename to docker/arm64v8/buster/update_opt.sh