diff --git a/.github/workflows/sanity_check.yml b/.github/workflows/sanity_check.yml new file mode 100644 index 000000000..92b25bb7b --- /dev/null +++ b/.github/workflows/sanity_check.yml @@ -0,0 +1,41 @@ +name: Check buck targets and code format +on: [push, pull_request] +jobs: + check: + name: Check TARGETS file and code format + runs-on: ubuntu-latest + steps: + - name: Checkout feature branch + uses: actions/checkout@v2 + with: + fetch-depth: 0 + + - name: Fetch from upstream + run: | + git remote add upstream https://github.com/facebook/rocksdb.git && git fetch upstream + + - name: Where am I + run: | + echo git status && git status + echo "git remote -v" && git remote -v + echo git branch && git branch + + - name: Setup Python + uses: actions/setup-python@v1 + + - name: Install Dependencies + run: python -m pip install --upgrade pip + + - name: Install argparse + run: pip install argparse + + - name: Download clang-format-diff.py + uses: wei/wget@v1 + with: + args: https://raw.githubusercontent.com/llvm-mirror/clang/master/tools/clang-format/clang-format-diff.py + + - name: Check format + run: make check-format + + - name: Compare buckify output + run: make check-buck-targets diff --git a/Makefile b/Makefile index 38a5e5db6..abe07c71d 100644 --- a/Makefile +++ b/Makefile @@ -976,6 +976,8 @@ ifeq ($(filter -DROCKSDB_LITE,$(OPT)),) sh tools/rocksdb_dump_test.sh endif endif + $(MAKE) check-format + $(MAKE) check-buck-targets # TODO add ldb_tests check_some: $(SUBSET) @@ -1196,6 +1198,12 @@ tags0: format: build_tools/format-diff.sh +check-format: + build_tools/format-diff.sh -c + +check-buck-targets: + buckifier/check_buck_targets.sh + package: bash build_tools/make_package.sh $(SHARED_MAJOR).$(SHARED_MINOR) diff --git a/buckifier/check_buck_targets.sh b/buckifier/check_buck_targets.sh new file mode 100755 index 000000000..ff97e9571 --- /dev/null +++ b/buckifier/check_buck_targets.sh @@ -0,0 +1,31 @@ +#!/usr/bin/env bash +# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. +# If clang_format_diff.py command is not specfied, we assume we are able to +# access directly without any path. + +TGT_DIFF=`git diff TARGETS | head -n 1` + +if [ ! -z "$TGT_DIFF" ] +then + echo "TARGETS file has uncommitted changes. Skip this check." + exit 0 +fi + +echo Backup original TARGETS file. + +cp TARGETS TARGETS.bkp + +python buckifier/buckify_rocksdb.py + +TGT_DIFF=`git diff TARGETS | head -n 1` + +if [ -z "$TGT_DIFF" ] +then + mv TARGETS.bkp TARGETS + exit 0 +else + echo "Please run 'python buckifier/buckify_rocksdb.py' to update TARGETS file." + echo "Do not manually update TARGETS file." + mv TARGETS.bkp TARGETS + exit 1 +fi diff --git a/build_tools/format-diff.sh b/build_tools/format-diff.sh index aa04093b0..6e3cbbd47 100755 --- a/build_tools/format-diff.sh +++ b/build_tools/format-diff.sh @@ -2,6 +2,30 @@ # Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. # If clang_format_diff.py command is not specfied, we assume we are able to # access directly without any path. + +print_usage () { + echo "Usage:" + echo "format-diff.sh [OPTIONS]" + echo "-c: check only." + echo "-h: print this message." +} + +while getopts ':ch' OPTION; do + case "$OPTION" in + c) + CHECK_ONLY=1 + ;; + h) + print_usage + exit 1 + ;; + ?) + print_usage + exit 1 + ;; + esac +done + if [ -z $CLANG_FORMAT_DIFF ] then CLANG_FORMAT_DIFF="clang-format-diff.py" @@ -10,18 +34,28 @@ fi # Check clang-format-diff.py if ! which $CLANG_FORMAT_DIFF &> /dev/null then - echo "You didn't have clang-format-diff.py and/or clang-format available in your computer!" - echo "You can download clang-format-diff.py by running: " - echo " curl --location http://goo.gl/iUW1u2 -o ${CLANG_FORMAT_DIFF}" - echo "You can download clang-format by running:" - echo " brew install clang-format" - echo " Or" - echo " apt install clang-format" - echo " This might work too:" - echo " yum install git-clang-format" - echo "Then, move both files (i.e. ${CLANG_FORMAT_DIFF} and clang-format) to some directory within PATH=${PATH}" - echo "and make sure ${CLANG_FORMAT_DIFF} is executable." - exit 128 + if [ ! -f ./clang-format-diff.py ] + then + echo "You didn't have clang-format-diff.py and/or clang-format available in your computer!" + echo "You can download clang-format-diff.py by running: " + echo " curl --location http://goo.gl/iUW1u2 -o ${CLANG_FORMAT_DIFF}" + echo "You can download clang-format by running:" + echo " brew install clang-format" + echo " Or" + echo " apt install clang-format" + echo " This might work too:" + echo " yum install git-clang-format" + echo "Then, move both files (i.e. ${CLANG_FORMAT_DIFF} and clang-format) to some directory within PATH=${PATH}" + echo "and make sure ${CLANG_FORMAT_DIFF} is executable." + exit 128 + else + if [ -x ./clang-format-diff.py ] + then + PATH=$PATH:. + else + CLANG_FORMAT_DIFF="python ./clang-format-diff.py" + fi + fi fi # Check argparse, a library that clang-format-diff.py requires. @@ -87,6 +121,10 @@ if [ -z "$diffs" ] then echo "Nothing needs to be reformatted!" exit 0 +elif [ $CHECK_ONLY ] +then + echo "Your change has unformatted code. Please run make format!" + exit 1 fi # Highlight the insertion/deletion from the clang-format-diff.py's output