File: README.md

package info (click to toggle)
cp2k 2025.1-1.1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 366,832 kB
  • sloc: fortran: 955,049; f90: 21,676; ansic: 18,058; python: 13,378; sh: 12,179; xml: 2,173; makefile: 964; pascal: 845; perl: 492; lisp: 272; cpp: 137; csh: 16
file content (60 lines) | stat: -rw-r--r-- 2,489 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# CP2K Precommit

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

- [doxify](../doxify/) to add Doxygen templates.
- [prettify](../prettify/) to format Fortran files.
- [analyze_src](../conventions/analyze_src.py) to check copyright banners and a few other things.
- [ast.parse](https://docs.python.org/3/library/ast.html) to check Python syntax.
- [clang-format](https://clang.llvm.org/docs/ClangFormat.html) to format C, Cuda, and OpenCL files.
- [black](https://github.com/psf/black) to format Python scripts.
- [shfmt](https://github.com/mvdan/sh) to format Shell scripts.
- [shellcheck](https://github.com/koalaman/shellcheck) to analyze Shell scripts.
- [mdformat](https://github.com/executablebooks/mdformat) with
  [gfm plugin](https://github.com/hukkin/mdformat-gfm) to format Markdown scripts.
- [cmake-format](https://github.com/cheshirekow/cmake_format) to format CMake scripts.

In contrast to the [CP2K-CI](https://github.com/cp2k/cp2k-ci) these tools process each file
individually, which makes them much more lightweight.

## Install Git Hook

The [precommit.py](./precommit.py) script can be readily installed as a git hook:

```shell
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](https://cloud.google.com/run).

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

```shell
./start_local_server.sh
```

The server can also be installed without Docker by following the steps in the
[Dockerfile](./Dockerfile).

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

```shell
$ 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`.