mirror of
				https://github.com/koalaman/shellcheck.git
				synced 2025-11-04 18:28:23 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			85 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/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
 | 
						|
 | 
						|
execs=$(find . -name shellcheck)
 | 
						|
 | 
						|
if [ -n "$execs" ]
 | 
						|
then
 | 
						|
  die "Found unexpected executables. Remove and try again: $execs"
 | 
						|
fi
 | 
						|
 | 
						|
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
 | 
						|
 | 
						|
# 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"
 |