cp2k/tools/precommit
2021-11-29 19:41:30 +01:00
..
check_file_properties.py precommit: Add check for Python shebang 2021-11-24 19:30:33 +01:00
cloudbuild.yaml precommit: Fix Dockerfile and cloudbuild.yaml 2020-08-25 14:53:00 +02:00
deploy.sh Toolchain: use MKL's ScaLAPACK and FFTW (#1537) 2021-05-26 16:28:21 +02:00
Dockerfile precommit: Add shfmt to format shell scripts 2021-02-18 00:33:20 +01:00
entrypoint.sh Refactor conventions/analyse_src.py into precommit/check_file_properties.py 2021-03-11 20:06:46 +01:00
package-lock.json build(deps): bump ini from 1.3.5 to 1.3.8 in /tools/precommit 2020-12-15 10:39:56 +01:00
package.json precommit: Freeze tool versions 2020-08-28 15:29:27 +02:00
precommit.py precommit: Add cmake-format 2021-11-29 19:41:30 +01:00
precommit_server.py precommit: Add cmake-format 2021-11-29 19:41:30 +01:00
README.md precommit: Add shfmt to format shell scripts 2021-02-18 00:33:20 +01:00
requirements.txt precommit: Add cmake-format 2021-11-29 19:41:30 +01:00
start_local_server.sh precommit: Introduce new server-based framework 2020-08-21 00:18:56 +02:00

CP2K Precommit

The precommit system consists of the following tools that analyze and format the source code:

In contrast to the CP2K-CI these tools process each file individually, which makes them much more lightweight.

Install Git Hook

The precommit.py script can be readily installed as a git hook:

ln -fs ../../tools/precommit/precommit.py .git/hooks/pre-commit

Server

Many of the tools listed above require more than just Python. To avoid their tedious installation a remote server is used by default. It is hosted at https://precommit.cp2k.org via Cloud Run.

The same server can also be started locally when Docker is available:

./start_local_server.sh

The server can also be installed without Docker by following the steps in the Dockerfile.

Once the server is up and running it can be used like this:

$ export CP2K_PRECOMMIT_SERVER="http://127.0.0.1:8080"
$ ./precommit.py
Running precommit checks using 8 workers and server: http://127.0.0.1:8080
Searching for files...

Backups and Cache

Before precommit runs an external tool on a file it create a backup copy in obj/precommit. If the tool leaves the file unmodified then the backup copy is remove afterwards. If the tool modifies the file and precommit was invoked without --allow-modifications then the backup copy is used to restore the file's original content.

After a successful tool run the file's timestamp is recorded in obj/precommit/cache.json and precommit will skip it in future unless it's invoked with --no-cache.