From 890d167875f030598443dee1516f50ed60885bab Mon Sep 17 00:00:00 2001 From: Eric Nemchik Date: Sun, 28 Aug 2022 01:49:33 +0000 Subject: [PATCH] Add s6-v3 and cleanup bash --- Dockerfile | 42 +++++++++++------------ checkrun.sh | 95 ++++++++++++++++++++++++++++++----------------------- 2 files changed, 75 insertions(+), 62 deletions(-) diff --git a/Dockerfile b/Dockerfile index 5d2ee3e..5d825be 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,27 +10,27 @@ LABEL build_version="Linuxserver.io version:- ${VERSION} Build-date:- ${BUILD_DA ARG DEBIAN_FRONTEND="noninteractive" RUN \ - echo "**** install build packages ****" && \ - apt-get update && \ - apt-get install -y \ - cabal-install \ - curl \ - ghc \ - git && \ - echo "**** compile shellcheck ****" && \ - git clone https://github.com/koalaman/shellcheck /tmp/shellcheck && \ - cd /tmp/shellcheck && \ - cabal update && \ - cabal install --dependencies-only && \ - cabal build Paths_ShellCheck && \ - ghc \ - -idist/build/autogen \ - -isrc \ - -optl-pthread \ - -optl-static \ - --make \ - shellcheck && \ - strip --strip-all shellcheck + echo "**** install build packages ****" && \ + apt-get update && \ + apt-get install -y \ + cabal-install \ + curl \ + ghc \ + git && \ + echo "**** compile shellcheck ****" && \ + git clone https://github.com/koalaman/shellcheck /tmp/shellcheck && \ + cd /tmp/shellcheck && \ + cabal update && \ + cabal install --dependencies-only && \ + cabal build Paths_ShellCheck && \ + ghc \ + -idist/build/autogen \ + -isrc \ + -optl-pthread \ + -optl-static \ + --make \ + shellcheck && \ + strip --strip-all shellcheck ############## runtime stage ############## FROM scratch diff --git a/checkrun.sh b/checkrun.sh index f63f1a5..6f0ff13 100755 --- a/checkrun.sh +++ b/checkrun.sh @@ -6,62 +6,75 @@ unset MOUNT_OPTIONS TEST_AREA LINT_ARCH SHELLCHECK_OPTIONS # clear preexising checkstyle files [[ -f "${WORKSPACE}"/shellcheck-result.xml ]] && rm "${WORKSPACE}"/shellcheck-result.xml -# check for common locations and exit if not found -if [[ ! -d "${WORKSPACE}"/root/etc/cont-init.d && ! -d "${WORKSPACE}"/root/etc/services.d && \ -! -d "${WORKSPACE}"/init && ! -d "${WORKSPACE}"/services ]]; then -echo "no common files found, linting not required" exit 0 +# initialize variables +SHELLCHECK_OPTIONS=("--exclude=SC1008" "--format=checkstyle" "--shell=bash") +MOUNT_OPTIONS=() +TEST_AREA=() + +if [[ -d "${WORKSPACE}"/init ]]; then + MOUNT_OPTIONS+=("-v ${WORKSPACE}/init:/init") + TEST_AREA+=("init") fi -if [[ ! -d "${WORKSPACE}"/root/etc/cont-init.d && ! -d "${WORKSPACE}"/root/etc/services.d ]] && \ -[[ -d "${WORKSPACE}"/init && -d "${WORKSPACE}"/services ]]; then -SHELLCHECK_OPTIONS="--format=checkstyle --shell=bash" -MOUNT_OPTIONS="-v ${WORKSPACE}/init:/init -v ${WORKSPACE}/services:/services" -TEST_AREA="init services" +if [[ -d "${WORKSPACE}"/services ]]; then + MOUNT_OPTIONS+=("-v ${WORKSPACE}/services:/services") + TEST_AREA+=("services") +fi -elif [[ ! -d "${WORKSPACE}"/root/etc/cont-init.d && ! -d "${WORKSPACE}"/root/etc/services.d ]] && \ -[[ ! -d "${WORKSPACE}"/init && -d "${WORKSPACE}"/services ]]; then -SHELLCHECK_OPTIONS="--format=checkstyle --shell=bash" -MOUNT_OPTIONS="-v ${WORKSPACE}/services:/services" -TEST_AREA="services" +if [[ -d "${WORKSPACE}"/root/etc/cont-init.d ]]; then + MOUNT_OPTIONS+=("-v ${WORKSPACE}/root/etc/cont-init.d:/root/etc/cont-init.d") + TEST_AREA+=("root/etc/cont-init.d") +fi -elif [[ ! -d "${WORKSPACE}"/root/etc/cont-init.d && ! -d "${WORKSPACE}"/root/etc/services.d ]] && \ -[[ -d "${WORKSPACE}"/init && ! -d "${WORKSPACE}"/services ]]; then -SHELLCHECK_OPTIONS="--format=checkstyle --shell=bash" -MOUNT_OPTIONS="-v ${WORKSPACE}/init:/init" -TEST_AREA="init" +if [[ -d "${WORKSPACE}"/root/etc/services.d ]]; then + MOUNT_OPTIONS+=("-v ${WORKSPACE}/root/etc/services.d:/root/etc/services.d") + TEST_AREA+=("root/etc/services.d") +fi -elif [[ -d "${WORKSPACE}"/root/etc/cont-init.d && -d "${WORKSPACE}"/root/etc/services.d ]]; then -SHELLCHECK_OPTIONS="--exclude=SC1008 --format=checkstyle --shell=bash" -MOUNT_OPTIONS="-v ${WORKSPACE}/root:/root" -TEST_AREA="root/etc/services.d root/etc/cont-init.d" +if [[ -d "${WORKSPACE}"/root/docker-mods,root/etc/s6-overlay/s6-rc.d/ ]]; then + MOUNT_OPTIONS+=("-v ${WORKSPACE}/root/docker-mods,root/etc/s6-overlay/s6-rc.d/:/root/docker-mods,root/etc/s6-overlay/s6-rc.d/") + TEST_AREA+=("root/docker-mods,root/etc/s6-overlay/s6-rc.d/") +fi -elif [[ ! -d "${WORKSPACE}"/root/etc/cont-init.d && -d "${WORKSPACE}"/root/etc/services.d ]]; then -SHELLCHECK_OPTIONS="--exclude=SC1008 --format=checkstyle --shell=bash" -MOUNT_OPTIONS="-v ${WORKSPACE}/root:/root" -TEST_AREA="root/etc/services.d" +# check test area for executable files +EXECUTABLE_FILES=() +NON_EXECUTABLE_FILES=() +while IFS= read -r -d '' file; do + if head -n1 "${file}" | grep -q -E -w "sh|bash|dash|ksh"; then + if [[ -x "${file}" ]]; then + EXECUTABLE_FILES+=("${file}") + else + NON_EXECUTABLE_FILES+=("${file}") + fi + fi +done < <(find "${TEST_AREA[@]}" -type f -print0) -elif [[ -d "${WORKSPACE}"/root/etc/cont-init.d && ! -d "${WORKSPACE}"/root/etc/services.d ]]; then -SHELLCHECK_OPTIONS="--exclude=SC1008 --format=checkstyle --shell=bash" -MOUNT_OPTIONS="-v ${WORKSPACE}/root:/root" -TEST_AREA="root/etc/cont-init.d" +# exit with error if non executable shell scripts are found +if [[ ${#NON_EXECUTABLE_FILES[@]} -ne 0 ]]; then + echo "the following shell scripts are not executable:" + printf "'%s'\n" "${NON_EXECUTABLE_FILES[@]}" + exit 1 +fi + +# exit gracefully if no EXECUTABLE_FILES are found +if [[ ${#EXECUTABLE_FILES[@]} -eq 0 ]]; then + echo "no common files found, linting not required" + exit 0 fi # run shellcheck -if [[ -d "${WORKSPACE}"/root/etc/cont-init.d || -d "${WORKSPACE}"/root/etc/services.d || \ --d "${WORKSPACE}"/init || -d "${WORKSPACE}"/services ]];then - docker pull ghcr.io/linuxserver/lsiodev-shellcheck docker run \ - --rm=true -t \ - ${MOUNT_OPTIONS} \ - ghcr.io/linuxserver/lsiodev-shellcheck \ - find ${TEST_AREA} -type f -exec shellcheck ${SHELLCHECK_OPTIONS} {} + \ - > ${WORKSPACE}/shellcheck-result.xml + --rm=true -t \ + "${MOUNT_OPTIONS[@]}" \ + ghcr.io/linuxserver/lsiodev-shellcheck \ + find "${EXECUTABLE_FILES[@]}" -exec shellcheck "${SHELLCHECK_OPTIONS[@]}" {} + \ + >"${WORKSPACE}"/shellcheck-result.xml +if [[ ! -f ${WORKSPACE}/shellcheck-result.xml ]]; then + echo "" >"${WORKSPACE}"/shellcheck-result.xml fi -[[ ! -f ${WORKSPACE}/shellcheck-result.xml ]] && echo "" > ${WORKSPACE}/shellcheck-result.xml - # exit gracefully exit 0