diff --git a/.github/workflows/check-logging.yml b/.github/workflows/check-logging.yml new file mode 100644 index 000000000000..bbf7beeb5e93 --- /dev/null +++ b/.github/workflows/check-logging.yml @@ -0,0 +1,24 @@ +name: Check non-i18n logging + +on: + push: + branches: + - 'test-2' + +jobs: + check-logging: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Print GitHub context + run: echo "${{ toJson(github) }}" + + - name: Run logging check + env: + GITHUB_BASE_REF: '${{ github.ref }}' + shell: bash + run: bash check_logging.sh diff --git a/check_logging.sh b/check_logging.sh new file mode 100644 index 000000000000..909f3e50fd4d --- /dev/null +++ b/check_logging.sh @@ -0,0 +1,61 @@ +#!/bin/bash + +# Determine the base branch for the PR using GITHUB_BASE_REF +BASE_BRANCH="$GITHUB_BASE_REF" +echo "Comparing against base branch: $BASE_BRANCH" +# Fetch the PR diff against the correct base branch +DIFF=$(git diff origin/"$BASE_BRANCH"...HEAD || true) + +if [ -z "$DIFF" ]; then + echo "No diff found to analyze." + exit 0 +fi + +PATTERNS=( + ".info(" + ".infof(" + ".warn(" + ".warnf(" + ".error(" + ".errorf(" + ".fatal(" + ".fatalf(" + "System.out.print" + "System.err.print" + ".printStackTrace" +) + +ERRORS="" +CURRENT_FILE="" + +while IFS= read -r line; do + # Update the current file if a new diff starts + if [[ "$line" =~ ^diff\ --git\ a\/.*\ b\/.* ]]; then + CURRENT_FILE=$(echo "$line" | awk '{print $3}' | sed 's/^a\///') + fi + + if [[ "$line" =~ ^\+[^+] ]]; then + # Ignore lines in the test directories + if [[ "$CURRENT_FILE" != *"src/test/"* && "$CURRENT_FILE" != *"testsuite/"* && "$CURRENT_FILE" != *"check_logging.sh"* ]]; then + # Check for any of the patterns, ensuring "//" doesn't precede them + for pattern in "${PATTERNS[@]}"; do + if [[ "$line" == *"$pattern"* ]]; then + # Ensure the pattern is not commented out with "//" + if [[ "$line" != *"//"*"$pattern"* ]]; then + # Capture the error line and its context + ERRORS+="$line\nFile: $CURRENT_FILE\n\n" + fi + fi + done + fi + fi +done <<< "$DIFF" + +if [ -n "$ERRORS" ]; then + echo -e "Logging statements found that should be internationalized or converted to a lower log level:\n" + echo -e "$ERRORS" + exit 1 +else + echo "No problematic logging statements found." + exit 0 +fi