diff options
| author | Jonathan Brielmaier <jonathan.brielmaier@web.de> | 2024-01-17 23:55:17 +0100 |
|---|---|---|
| committer | Jonathan Brielmaier <jonathan.brielmaier@web.de> | 2024-03-03 22:03:21 +0100 |
| commit | 843e2d7d8d790a02035e90f34928b5c8840c6b9e (patch) | |
| tree | a21d7079710e914138193912a0fb2487e32e4aac | |
| parent | 25bcda2b9107b948a1c858e41aba1b7f95b76228 (diff) | |
Add git hook for checking commit signing.make-authenticate
This is analogue to what upstream Guix does in order to prevent invalid
signed commits being pushed.
* Makefile: New file.
* etc/git/pre-push: New file.
Co-authored-by: Wolf <wolf@wolfsden.cz>
| -rw-r--r-- | Makefile | 14 | ||||
| -rwxr-xr-x | etc/git/pre-push | 48 |
2 files changed, 62 insertions, 0 deletions
diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..e5f968b --- /dev/null +++ b/Makefile | |||
| @@ -0,0 +1,14 @@ | |||
| 1 | # SPDX-License-Identifier: GPL-3.0-or-later | ||
| 2 | # Copyright © 2022 Giacomo Leidi <goodoldpaul@autistici.org> | ||
| 3 | # Copyright © 2024 Jonathan Brielmaier <jonathan.brielmaier@web.de> | ||
| 4 | # Copyright © 2024 Wolf <wolf@wolfsden.cz> | ||
| 5 | |||
| 6 | # nonguix channel | ||
| 7 | channel_intro_commit = 897c1a470da759236cc11798f4e0a5f7d4d59fbc | ||
| 8 | channel_intro_signer = 2A39 3FFF 68F4 EF7A 3D29 12AF 6F51 20A0 22FB B2D5 | ||
| 9 | |||
| 10 | authenticate: | ||
| 11 | echo "Authenticating Git checkout..." ; \ | ||
| 12 | guix git authenticate \ | ||
| 13 | --cache-key=channels/nonguix --stats \ | ||
| 14 | "$(channel_intro_commit)" "$(channel_intro_signer)" | ||
diff --git a/etc/git/pre-push b/etc/git/pre-push new file mode 100755 index 0000000..38a7240 --- /dev/null +++ b/etc/git/pre-push | |||
| @@ -0,0 +1,48 @@ | |||
| 1 | #!/bin/sh | ||
| 2 | # SPDX-License-Identifier: GPL-3.0-or-later | ||
| 3 | # Copyright © 2024 Jonathan Brielmaier <jonathan.brielmaier@web.de> | ||
| 4 | # Copyright © 2024 Wolf <wolf@wolfsden.cz> | ||
| 5 | |||
| 6 | # This hook script prevents the user from pushing to GitLab if any of the new | ||
| 7 | # commits' OpenPGP signatures cannot be verified, or if a commit is signed | ||
| 8 | # with an unauthorized key. | ||
| 9 | |||
| 10 | # Called by "git push" after it has checked the remote status, but before | ||
| 11 | # anything has been pushed. If this script exits with a non-zero status nothing | ||
| 12 | # will be pushed. | ||
| 13 | # | ||
| 14 | # This hook is called with the following parameters: | ||
| 15 | # | ||
| 16 | # $1 -- Name of the remote to which the push is being done | ||
| 17 | # $2 -- URL to which the push is being done | ||
| 18 | # | ||
| 19 | # If pushing without using a named remote those arguments will be equal. | ||
| 20 | # | ||
| 21 | # Information about the commits which are being pushed is supplied as lines to | ||
| 22 | # the standard input in the form: | ||
| 23 | # | ||
| 24 | # <local ref> <local sha1> <remote ref> <remote sha1> | ||
| 25 | |||
| 26 | # This is the "empty hash" used by Git when pushing a branch deletion. | ||
| 27 | z40=0000000000000000000000000000000000000000 | ||
| 28 | |||
| 29 | while read local_ref local_hash remote_ref remote_hash | ||
| 30 | do | ||
| 31 | # When deleting a remote branch, no commits are pushed to the remote, and | ||
| 32 | # thus there are no signatures to be verified. | ||
| 33 | if [ "$local_hash" != $z40 ] | ||
| 34 | then | ||
| 35 | # Only use the hook when pushing to the nonguix project on GitLab. | ||
| 36 | case "$2" in | ||
| 37 | *gitlab.com[:/]nonguix/*) | ||
| 38 | exec make authenticate | ||
| 39 | exit 127 | ||
| 40 | ;; | ||
| 41 | *) | ||
| 42 | exit 0 | ||
| 43 | ;; | ||
| 44 | esac | ||
| 45 | fi | ||
| 46 | done | ||
| 47 | |||
| 48 | exit 0 | ||
