jbampton opened a new pull request, #2206:
URL: https://github.com/apache/sedona/pull/2206

   ## Did you read the Contributor Guide?
   
   - Yes, I have read the [Contributor 
Rules](https://sedona.apache.org/latest/community/rule/) and [Contributor 
Development Guide](https://sedona.apache.org/latest/community/develop/)
   
   ## Is this PR related to a ticket?
   
   - No this is a CI update. The PR name follows the format `[CI] my subject`
   
   ## What changes were proposed in this PR?
   
   Manual stage hook we can run on Linux and Mac Machines.  Also runs on the 
GitHub Actions CI.
   
   In future we can implement the pre-commit hooks into Docker and there is 
issue #2202 
   
   Makefiles utilize tabs for indentation in command lines, also known as 
recipes, due to a historical design decision in the original make utility. This 
specific use of tabs serves a crucial purpose:
   
   Distinguishing Recipes:
   The leading tab character acts as a clear signal to make that the line is a 
command to be executed by the shell, rather than a line containing make syntax 
(like variable definitions or rules). This allows make to differentiate between 
its own syntax and shell commands within the same file.
   Historical Precedent:
   The original author of make, Stuart Feldman, implemented this parsing 
mechanism in the early versions of the utility. Changing this fundamental 
behavior would have disrupted the existing user base and the vast number of 
Makefiles already in circulation.
   Parsing Efficiency:
   This line-oriented parsing based on the leading character was a simple and 
efficient way for make to process the file and determine which lines were part 
of a recipe. 
   
   In essence, the use of tabs for recipe indentation in Makefiles is a legacy 
feature that remains due to its historical implementation and the need to 
maintain backward compatibility. Using spaces instead of tabs for recipe 
indentation will result in errors, as make will not recognize the lines as 
commands.
   
   ## How was this patch tested?
   
   Tried my best today:
   
   ```
   (.venv) committer@asf:sedona$ git log --oneline -n 1
   f3fcdf650a (HEAD -> makefile-tabs-hook, upstream/master, origin/master, 
origin/HEAD, master) [CI] Add Python API Documentation to CI/CD Pipeline (#2195)
   (.venv) committer@asf:sedona$ git status
   On branch makefile-tabs-hook
   Changes to be committed:
     (use "git restore --staged <file>..." to unstage)
           new file:   scripts/pre-commit/check_makefiles_for_tabs.sh
   
   Changes not staged for commit:
     (use "git add <file>..." to update what will be committed)
     (use "git restore <file>..." to discard changes in working directory)
           modified:   .pre-commit-config.yaml
           modified:   Makefile
   
   (.venv) committer@asf:sedona$ git diff
   diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
   index 06fb02f4ce..2e57d0491f 100644
   --- a/.pre-commit-config.yaml
   +++ b/.pre-commit-config.yaml
   @@ -61,6 +61,14 @@ repos:
              Zip files are not allowed in the repository as they are hard to
              track and have security implications. Please remove the zip file 
from the repository.
            files: (?i)\.zip$
   +      - id: check-makefiles-tabs
   +        name: check Makefiles files for tabs
   +        entry: ./scripts/pre-commit/check_makefiles_for_tabs.sh # Path to 
your script
   +        language: system
   +        files: '(?i)makefile$'
   +        pass_filenames: true # <-- Crucial change: pass filenames to the 
script
   +        types: [file] # Ensure only regular files are passed, not 
directories
   +        stages: [manual]
      - repo: https://github.com/Lucas-C/pre-commit-hooks
        rev: v1.5.5
        hooks:
   diff --git a/Makefile b/Makefile
   index b861ed228c..e061bbcf6e 100644
   --- a/Makefile
   +++ b/Makefile
   @@ -23,7 +23,7 @@ MIKE := mike
    .PHONY: check checkinstall checkupdate install docsinstall docsbuild clean 
test
   
    check:
   -       @echo "Running pre-commit checks..."
   +  @echo "Running pre-commit checks..."
           @if ! command -v pre-commit >/dev/null 2>&1; then \
                   echo "Error: pre-commit is not installed. Run 'make 
checkinstall' first."; \
                   exit 1; \
   (.venv) committer@asf:sedona$ git add .
   (.venv) committer@asf:sedona$ git status
   On branch makefile-tabs-hook
   Changes to be committed:
     (use "git restore --staged <file>..." to unstage)
           modified:   .pre-commit-config.yaml
           modified:   Makefile
           new file:   scripts/pre-commit/check_makefiles_for_tabs.sh
   
   (.venv) committer@asf:sedona$ pre-commit run check-makefiles-tabs 
--all-files --hook-stage manual
   check Makefiles files for 
tabs...........................................Failed
   - hook id: check-makefiles-tabs
   - exit code: 1
   
   Error: File 'Makefile' contains spaces at the beginning of lines instead of 
tabs.
   
   (.venv) committer@asf:sedona$ git status
   On branch makefile-tabs-hook
   Changes to be committed:
     (use "git restore --staged <file>..." to unstage)
           modified:   .pre-commit-config.yaml
           modified:   Makefile
           new file:   scripts/pre-commit/check_makefiles_for_tabs.sh
   
   Changes not staged for commit:
     (use "git add <file>..." to update what will be committed)
     (use "git restore <file>..." to discard changes in working directory)
           modified:   Makefile
   
   (.venv) committer@asf:sedona$ git diff
   diff --git a/Makefile b/Makefile
   index e061bbcf6e..b861ed228c 100644
   --- a/Makefile
   +++ b/Makefile
   @@ -23,7 +23,7 @@ MIKE := mike
    .PHONY: check checkinstall checkupdate install docsinstall docsbuild clean 
test
   
    check:
   -  @echo "Running pre-commit checks..."
   +       @echo "Running pre-commit checks..."
           @if ! command -v pre-commit >/dev/null 2>&1; then \
                   echo "Error: pre-commit is not installed. Run 'make 
checkinstall' first."; \
                   exit 1; \
   (.venv) committer@asf:sedona$ git add .
   (.venv) committer@asf:sedona$ git status
   On branch makefile-tabs-hook
   Changes to be committed:
     (use "git restore --staged <file>..." to unstage)
           modified:   .pre-commit-config.yaml
           new file:   scripts/pre-commit/check_makefiles_for_tabs.sh
   
   (.venv) committer@asf:sedona$ pre-commit run check-makefiles-tabs 
--all-files --hook-stage manual
   check Makefiles files for 
tabs...........................................Passed
   (.venv) committer@asf:sedona$ git status
   On branch makefile-tabs-hook
   Changes to be committed:
     (use "git restore --staged <file>..." to unstage)
           modified:   .pre-commit-config.yaml
           new file:   scripts/pre-commit/check_makefiles_for_tabs.sh
   
   (.venv) committer@asf:sedona$ git commit -m "[CI] pre-commit: add hook to 
check Makefiles are indented with tabs"
   [INFO] Installing environment for local.
   [INFO] Once installed this environment will be reused.
   [INFO] This may take a few minutes...
   [INFO] Installing environment for 
https://github.com/Lucas-C/pre-commit-hooks.
   [INFO] Once installed this environment will be reused.
   [INFO] This may take a few minutes...
   [INFO] Installing environment for https://github.com/asottile/pyupgrade.
   [INFO] Once installed this environment will be reused.
   [INFO] This may take a few minutes...
   [INFO] Installing environment for 
https://github.com/psf/black-pre-commit-mirror.
   [INFO] Once installed this environment will be reused.
   [INFO] This may take a few minutes...
   [INFO] Installing environment for 
https://github.com/pre-commit/mirrors-clang-format.
   [INFO] Once installed this environment will be reused.
   [INFO] This may take a few minutes...
   [INFO] Installing environment for https://github.com/PyCQA/bandit.
   [INFO] Once installed this environment will be reused.
   [INFO] This may take a few minutes...
   [INFO] Installing environment for 
https://github.com/codespell-project/codespell.
   [INFO] Once installed this environment will be reused.
   [INFO] This may take a few minutes...
   [INFO] Installing environment for https://github.com/gitleaks/gitleaks.
   [INFO] Once installed this environment will be reused.
   [INFO] This may take a few minutes...
   [INFO] Installing environment for 
https://github.com/pre-commit/pre-commit-hooks.
   [INFO] Once installed this environment will be reused.
   [INFO] This may take a few minutes...
   [INFO] Installing environment for 
https://github.com/igorshubovych/markdownlint-cli.
   [INFO] Once installed this environment will be reused.
   [INFO] This may take a few minutes...
   [INFO] Installing environment for 
https://github.com/shellcheck-py/shellcheck-py.
   [INFO] Once installed this environment will be reused.
   [INFO] This may take a few minutes...
   [INFO] Installing environment for https://github.com/adrienverge/yamllint.
   [INFO] Once installed this environment will be reused.
   [INFO] This may take a few minutes...
   [INFO] Installing environment for https://github.com/shssoichiro/oxipng.
   [INFO] Once installed this environment will be reused.
   [INFO] This may take a few minutes...
   run identity 
check.......................................................Passed
   - hook id: identity
   - duration: 0.02s
   
   .pre-commit-config.yaml
   scripts/pre-commit/check_makefiles_for_tabs.sh
   
   run check hooks 
apply....................................................Passed
   run 
prettier.............................................................Passed
   maven spotless 
apply.....................................................Passed
   check no zip files are committed.....................(no files to 
check)Skipped
   add license for all .c files.........................(no files to 
check)Skipped
   add license for all .h files.........................(no files to 
check)Skipped
   add license for all Java files.......................(no files to 
check)Skipped
   add license for all Markdown files...................(no files to 
check)Skipped
   add license for all Makefile files...................(no files to 
check)Skipped
   add license for all R files..........................(no files to 
check)Skipped
   add license for all Scala files......................(no files to 
check)Skipped
   add license for all TOML files.......................(no files to 
check)Skipped
   add license for all YAML 
files...........................................Passed
   add license for all Python files.....................(no files to 
check)Skipped
   add license for all other files......................(no files to 
check)Skipped
   pyupgrade............................................(no files to 
check)Skipped
   run black-jupyter....................................(no files to 
check)Skipped
   run clang-format.....................................(no files to 
check)Skipped
   run bandit...........................................(no files to 
check)Skipped
   run 
codespell............................................................Passed
   run 
gitleaks.............................................................Passed
   run check-ast........................................(no files to 
check)Skipped
   run check-builtin-literals...........................(no files to 
check)Skipped
   run 
check-case-conflict..................................................Passed
   run check-docstring-first............................(no files to 
check)Skipped
   run 
check-executables-have-shebangs......................................Passed
   run check-illegal-windows-names......................(no files to 
check)Skipped
   run check-json.......................................(no files to 
check)Skipped
   run 
check-merge-conflict.................................................Passed
   run 
check-shebang-scripts-are-executable.................................Passed
   run check-toml.......................................(no files to 
check)Skipped
   check vcs 
permalinks.....................................................Passed
   check xml............................................(no files to 
check)Skipped
   check 
yaml...............................................................Passed
   debug statements (python)............................(no files to 
check)Skipped
   detect destroyed 
symlinks................................................Passed
   detect aws 
credentials...................................................Passed
   detect private 
key.......................................................Passed
   fix end of 
files.........................................................Passed
   file contents sorter.................................(no files to 
check)Skipped
   fix utf-8 byte order 
marker..............................................Passed
   forbid submodules....................................(no files to 
check)Skipped
   mixed line 
ending........................................................Passed
   python tests naming..................................(no files to 
check)Skipped
   fix requirements.txt.................................(no files to 
check)Skipped
   trim trailing 
whitespace.................................................Passed
   run markdownlint.....................................(no files to 
check)Skipped
   run 
shellcheck...........................................................Passed
   run 
yamllint.............................................................Passed
   run oxipng...........................................(no files to 
check)Skipped
   [makefile-tabs-hook 90c1ef0e30] [CI] pre-commit: add hook to check Makefiles 
are indented with tabs
    2 files changed, 22 insertions(+)
    create mode 100755 scripts/pre-commit/check_makefiles_for_tabs.sh
   (.venv) committer@asf:sedona$ git status
   On branch makefile-tabs-hook
   nothing to commit, working tree clean
   (.venv) committer@asf:sedona$ pre-commit run check-makefiles-tabs 
--all-files --hook-stage manual
   check Makefiles files for 
tabs...........................................Passed
   (.venv) committer@asf:sedona$
   ```
   
   ## Did this PR include necessary documentation updates?
   
   - No, this PR does not affect any public API so no need to change the 
documentation.
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to