Allow running this repo as a pre-commit hook

This commit is contained in:
Vidar Holen 2021-08-28 21:19:45 -07:00
parent 081f7eba24
commit 9d64d78c32
4 changed files with 57 additions and 6 deletions

View File

@ -1,6 +1,3 @@
*
!LICENSE
!Setup.hs
!ShellCheck.cabal
!shellcheck.hs
!src
dist
dist-newstyle
.git

6
.pre-commit-hooks.yaml Normal file
View File

@ -0,0 +1,6 @@
- id: shellcheck
name: shellcheck
description: Static analysis tool for shell scripts
types: [shell]
language: docker
entry: shellcheck

18
Dockerfile Normal file
View File

@ -0,0 +1,18 @@
# This file builds ShellCheck for pre-commit.
#
# It may also be useful for local development, but it is notably NOT
# used to build the official ShellCheck docker images.
FROM ubuntu:20.04
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y cabal-install
RUN cabal update
# Install dependencies separately for more efficient iteration
COPY ShellCheck.cabal /build/
RUN cd /build && cabal install --dependencies-only
# Now build the rest
COPY . /build/
RUN cd /build && cabal build shellcheck
RUN find /build -type f -name shellcheck -perm /111 -exec cp -f {} /bin \;
ENTRYPOINT ["/bin/shellcheck"]

View File

@ -1,6 +1,9 @@
#!/bin/bash
# This script runs 'buildtest' on each of several distros
# via Docker.
# shellcheck disable=SC2016
set -o pipefail
exec 3>&1 4>&2
@ -32,6 +35,33 @@ echo "Logging to $log" >&3
exec >> "$log" 2>&1
final=0
echo "Trying to build pre-commit docker image"
if ! docker build --tag precommit .
then
final=1
echo "pre-commit image failed to build"
else
if printf '%s\n' '#!/bin/sh' 'echo $1' | docker run -i precommit -
then
final=1
echo "pre-commit image succeeds with incorrect example"
fi
if ! printf '%s\n' '#!/bin/sh' 'echo "$1"' | docker run -i precommit -
then
final=1
echo "pre-commit image fails with correct example"
fi
fi
if [[ $final -ne 0 ]]
then
echo >&3 "pre-commit image failure, see log"
else
echo >&3 "pre-commit image succeeded"
fi
while read -r distro setup
do
[[ "$distro" = "#"* || -z "$distro" ]] && continue