#!/bin/bash # This script runs 'buildtest' on each of several distros # via Docker. set -o pipefail exec 3>&1 4>&2 die() { echo "$*" >&4; exit 1; } [ -e "ShellCheck.cabal" ] || die "ShellCheck.cabal not in this dir" [ "$1" = "--run" ] || { cat << EOF This script pulls multiple distros via Docker and compiles ShellCheck and dependencies for each one. It takes hours, and is still highly experimental. Make sure you're plugged in and have screen/tmux in place, then re-run with $0 --run to continue. Also note that dist* will be deleted. EOF exit 0 } echo "Deleting 'dist' and 'dist-newstyle'..." rm -rf dist dist-newstyle log=$(mktemp) || die "Can't create temp file" date >> "$log" || die "Can't write to log" echo "Logging to $log" >&3 exec >> "$log" 2>&1 final=0 while read -r distro setup do [[ "$distro" = "#"* || -z "$distro" ]] && continue printf '%s ' "$distro" >&3 docker pull "$distro" || die "Can't pull $distro" printf 'pulled. ' >&3 tmp=$(mktemp -d) || die "Can't make temp dir" cp -r . "$tmp/" || die "Can't populate test dir" printf 'Result: ' >&3 < /dev/null docker run -v "$tmp:/mnt" "$distro" sh -c " $setup cd /mnt || exit 1 test/buildtest " ret=$? if [ "$ret" = 0 ] then echo "OK" >&3 else echo "FAIL with $ret. See $log" >&3 final=1 fi rm -rf "$tmp" done << EOF # Docker tag Setup command debian:stable apt-get update && apt-get install -y cabal-install debian:testing apt-get update && apt-get install -y cabal-install ubuntu:latest apt-get update && apt-get install -y cabal-install haskell:latest true opensuse/leap:latest zypper install -y cabal-install ghc fedora:latest dnf install -y cabal-install ghc-template-haskell-devel findutils libstdc++-static gcc-c++ archlinux:latest pacman -S -y --noconfirm cabal-install ghc-static base-devel # Ubuntu LTS ubuntu:22.04 apt-get update && apt-get install -y cabal-install ubuntu:20.04 apt-get update && apt-get install -y cabal-install ubuntu:18.04 apt-get update && apt-get install -y cabal-install ubuntu:16.04 apt-get update && apt-get install -y cabal-install # Stack on Ubuntu LTS ubuntu:22.04 set -e; apt-get update && apt-get install -y curl && curl -sSL https://get.haskellstack.org/ | sh -s - -f && cd /mnt && exec test/stacktest EOF exit "$final"