Kokoro: Add style presubmit checks

Checks for Bug: line, licenses, clang-format (v 8.0.0) and gofmt.

These checks are performed by a separate kokoro instance.

Fixed up broken licenses that it found.

Counterpart: cl/286343852
Bug: b/144825072
Bug: b/141892461
Change-Id: If4ffda0b6144efe3cd5560cf17a6f4ad33bf985a
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/39708
Reviewed-by: Antonio Maiorano <amaiorano@google.com>
Tested-by: Ben Clayton <bclayton@google.com>
Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
diff --git a/tests/presubmit.sh b/tests/presubmit.sh
new file mode 100755
index 0000000..99db52b
--- /dev/null
+++ b/tests/presubmit.sh
@@ -0,0 +1,95 @@
+#!/bin/bash
+
+ROOT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}")"/.. >/dev/null 2>&1 && pwd )"
+SRC_DIR=${ROOT_DIR}/src
+TESTS_DIR=${ROOT_DIR}/tests
+
+# Presubmit Checks Script.
+CLANG_FORMAT=${CLANG_FORMAT:-clang-format}
+GOFMT=${GOFMT:-gofmt}
+
+if test -t 1; then
+  ncolors=$(tput colors)
+  if test -n "$ncolors" && test $ncolors -ge 8; then
+    normal="$(tput sgr0)"
+    red="$(tput setaf 1)"
+    green="$(tput setaf 2)"
+  fi
+fi
+
+function check() {
+  local name=$1; shift
+  echo -n "Running check $name... "
+
+  if ! "$@"; then
+    echo "${red}FAILED${normal}"
+    echo "  Error executing: $@";
+    exit 1
+  fi
+
+  if ! git diff --quiet HEAD; then
+    echo "${red}FAILED${normal}"
+    echo "  Git workspace not clean:"
+    git --no-pager diff -p HEAD
+    echo "${red}Check $name failed.${normal}"
+    exit 1
+  fi
+
+  echo "${green}OK${normal}"
+}
+
+# Validate commit message
+function run_bug_in_commit_msg() {
+  git log -1 --pretty=%B | grep -E '^Bug:|^Issue:|^Fixes:|^Regres:'
+
+  if [ $? -ne 0 ]
+  then
+    echo "Git commit message must have a Bug: line."
+    return 1
+  fi
+}
+
+function run_copyright_headers() {
+  tmpfile=`mktemp`
+  for suffix in "cpp" "hpp" "go" "h"; do
+    # Grep flag '-L' print files that DO NOT match the copyright regex
+    # Grep seems to match "(standard input)", filter this out in the for loop output
+    find ${SRC_DIR} -type f -name "*.${suffix}" | xargs grep -L "Copyright .* The SwiftShader Authors\|Microsoft Visual C++ generated\|GNU Bison"
+  done | grep -v "(standard input)" > ${tmpfile}
+  if test -s ${tmpfile}; then
+    # tempfile is NOT empty
+    echo "Copyright issue in these files:"
+    cat ${tmpfile}
+    rm ${tmpfile}
+    return 1
+  else
+    rm ${tmpfile}
+    return 0
+  fi
+}
+
+function run_clang_format() {
+  ${SRC_DIR}/clang-format-all.sh
+}
+
+function run_gofmt() {
+  find ${SRC_DIR} ${TESTS_DIR} -name "*.go" | xargs $GOFMT -w
+}
+
+# Ensure we are clean to start out with.
+check "git workspace must be clean" true
+
+# Check for 'Bug: ' line in commit
+check bug-in-commi-msg run_bug_in_commit_msg
+
+# Check copyright headers
+check copyright-headers run_copyright_headers
+
+# Check clang-format.
+check clang-format run_clang_format
+
+# Check gofmt.
+check gofmt run_gofmt
+
+echo
+echo "${green}All check completed successfully.$normal"
\ No newline at end of file