diff options
author | Franziskus Kiefer <franziskuskiefer@gmail.com> | 2017-04-27 12:15:26 +0200 |
---|---|---|
committer | Franziskus Kiefer <franziskuskiefer@gmail.com> | 2017-04-27 12:15:26 +0200 |
commit | baaa2abdafd034a734539eb2e7067ced17bbd552 (patch) | |
tree | fcb32174cce58e1ad0ca941d56896abf065fbf7e /automation/clang-format | |
parent | a628f1f3168d9c53ab51773d0505a888e48fd603 (diff) | |
download | nss-hg-baaa2abdafd034a734539eb2e7067ced17bbd552.tar.gz |
Bug 1372127 - mach command to run clang-format, build, and tests, r=mt
Differential Revision: https://nss-review.dev.mozaws.net/D300
Diffstat (limited to 'automation/clang-format')
-rw-r--r-- | automation/clang-format/Dockerfile | 26 | ||||
-rwxr-xr-x | automation/clang-format/run_clang_format.sh | 66 | ||||
-rw-r--r-- | automation/clang-format/setup.sh | 43 |
3 files changed, 135 insertions, 0 deletions
diff --git a/automation/clang-format/Dockerfile b/automation/clang-format/Dockerfile new file mode 100644 index 000000000..163c9b8fa --- /dev/null +++ b/automation/clang-format/Dockerfile @@ -0,0 +1,26 @@ +FROM ubuntu:16.04 +MAINTAINER Franziskus Kiefer <franziskuskiefer@gmail.com> + +RUN useradd -d /home/worker -s /bin/bash -m worker +WORKDIR /home/worker + +# Install dependencies. +ADD setup.sh /tmp/setup.sh +RUN bash /tmp/setup.sh + +# Change user. +USER worker + +# Env variables. +ENV HOME /home/worker +ENV SHELL /bin/bash +ENV USER worker +ENV LOGNAME worker +ENV HOSTNAME taskcluster-worker +ENV LANG en_US.UTF-8 +ENV LC_ALL en_US.UTF-8 +ENV HOST localhost +ENV DOMSUF localdomain + +# Entrypoint. +ENTRYPOINT ["/home/worker/nss/automation/clang-format/run_clang_format.sh"] diff --git a/automation/clang-format/run_clang_format.sh b/automation/clang-format/run_clang_format.sh new file mode 100755 index 000000000..df29a085f --- /dev/null +++ b/automation/clang-format/run_clang_format.sh @@ -0,0 +1,66 @@ +#!/usr/bin/env bash + +if [[ $(id -u) -eq 0 ]]; then + # Drop privileges by re-running this script. + # Note: this mangles arguments, better to avoid running scripts as root. + exec su worker -c "$0 $*" +fi + +# Apply clang-format on the provided folder and verify that this doesn't change any file. +# If any file differs after formatting, the script eventually exits with 1. +# Any differences between formatted and unformatted files is printed to stdout to give a hint what's wrong. + +# Includes a default set of directories NOT to clang-format on. +blacklist=( + "./automation" \ + "./coreconf" \ + "./doc" \ + "./pkg" \ + "./tests" \ + "./lib/libpkix" \ + "./lib/zlib" \ + "./lib/sqlite" \ + "./gtests/google_test" \ + "./.hg" \ +) + +top="$(dirname $0)/../.." +cd "$top" + +if [ $# -gt 0 ]; then + dirs=("$@") +else + dirs=($(find . -maxdepth 2 -mindepth 1 -type d ! -path . \( ! -regex '.*/' \))) +fi + +format_folder() +{ + for black in "${blacklist[@]}"; do + if [[ "$1" == "$black"* ]]; then + echo "skip $1" + return 1 + fi + done + return 0 +} + +for dir in "${dirs[@]}"; do + if format_folder "$dir" ; then + c="${dir//[^\/]}" + echo "formatting $dir ..." + depth="" + if [ "${#c}" == "1" ]; then + depth="-maxdepth 1" + fi + find "$dir" $depth -type f \( -name '*.[ch]' -o -name '*.cc' \) -exec clang-format -i {} \+ + fi +done + +TMPFILE=$(mktemp /tmp/$(basename $0).XXXXXX) +trap 'rm $TMPFILE' exit +if (cd $(dirname $0); hg root >/dev/null 2>&1); then + hg diff --git "$top" | tee $TMPFILE +else + git -C "$top" diff | tee $TMPFILE +fi +[[ ! -s $TMPFILE ]] diff --git a/automation/clang-format/setup.sh b/automation/clang-format/setup.sh new file mode 100644 index 000000000..f719f1973 --- /dev/null +++ b/automation/clang-format/setup.sh @@ -0,0 +1,43 @@ +#!/usr/bin/env bash + +set -v -e -x + +# Update packages. +export DEBIAN_FRONTEND=noninteractive +apt-get -y update && apt-get -y upgrade + +# Install packages. +apt_packages=() +apt_packages+=('ca-certificates') +apt_packages+=('curl') +apt_packages+=('xz-utils') +apt_packages+=('mercurial') +apt_packages+=('git') +apt-get install -y --no-install-recommends ${apt_packages[@]} + +# Download clang. +curl -L http://releases.llvm.org/3.9.1/clang+llvm-3.9.1-x86_64-linux-gnu-ubuntu-16.04.tar.xz -o clang.tar.xz +curl -L http://releases.llvm.org/3.9.1/clang+llvm-3.9.1-x86_64-linux-gnu-ubuntu-16.04.tar.xz.sig -o clang.tar.xz.sig +# Verify the signature. +gpg --keyserver pool.sks-keyservers.net --recv-keys B6C8F98282B944E3B0D5C2530FC3042E345AD05D +gpg --verify clang.tar.xz.sig +# Install into /usr/local/. +tar xJvf *.tar.xz -C /usr/local --strip-components=1 + +# Cleanup. +function cleanup() { + rm -f clang.tar.xz clang.tar.xz.sig +} +trap cleanup ERR EXIT + +locale-gen en_US.UTF-8 +dpkg-reconfigure locales + +# Cleanup. +rm -rf ~/.ccache ~/.cache +apt-get autoremove -y +apt-get clean +apt-get autoclean + +# We're done. Remove this script. +rm $0 |