|
|
|
# Test for verification of GnuPG signatures
|
|
|
|
|
|
|
|
- name: GPG-VERIFICATION | Create GnuPG verification workdir
|
|
|
|
tempfile:
|
|
|
|
state: directory
|
|
|
|
register: git_gpg_workdir
|
|
|
|
|
|
|
|
- name: GPG-VERIFICATION | Define variables based on workdir
|
|
|
|
set_fact:
|
|
|
|
git_gpg_keyfile: "{{ git_gpg_workdir.path }}/testkey.asc"
|
|
|
|
git_gpg_source: "{{ git_gpg_workdir.path }}/source"
|
|
|
|
git_gpg_dest: "{{ git_gpg_workdir.path }}/dest"
|
|
|
|
git_gpg_gpghome: "{{ git_gpg_workdir.path }}/gpg"
|
|
|
|
|
|
|
|
- name: GPG-VERIFICATION | Temporary store GnuPG test key
|
|
|
|
copy:
|
|
|
|
content: "{{ git_gpg_testkey }}"
|
|
|
|
dest: "{{ git_gpg_keyfile }}"
|
|
|
|
|
|
|
|
- name: GPG-VERIFICATION | Create temporary GNUPGHOME directory
|
|
|
|
file:
|
|
|
|
path: "{{ git_gpg_gpghome }}"
|
|
|
|
state: directory
|
|
|
|
mode: 0700
|
|
|
|
|
|
|
|
- name: GPG-VERIFICATION | Import GnuPG test key
|
|
|
|
environment:
|
|
|
|
- GNUPGHOME: "{{ git_gpg_gpghome }}"
|
|
|
|
command: gpg --import {{ git_gpg_keyfile }}
|
|
|
|
|
|
|
|
- name: GPG-VERIFICATION | Create local GnuPG signed repository directory
|
|
|
|
file:
|
|
|
|
path: "{{ git_gpg_source }}"
|
|
|
|
state: directory
|
|
|
|
|
|
|
|
- name: GPG-VERIFICATION | Generate local GnuPG signed repository
|
|
|
|
environment:
|
|
|
|
- GNUPGHOME: "{{ git_gpg_gpghome }}"
|
|
|
|
shell: |
|
|
|
|
set -eEu
|
|
|
|
|
|
|
|
git init
|
|
|
|
|
|
|
|
touch an_empty_file
|
|
|
|
git add an_empty_file
|
|
|
|
git commit --no-gpg-sign --message "Commit, and don't sign"
|
|
|
|
git tag lightweight_tag/unsigned_commit HEAD
|
|
|
|
git commit --allow-empty --gpg-sign --message "Commit, and sign"
|
|
|
|
git tag lightweight_tag/signed_commit HEAD
|
|
|
|
git tag --annotate --message "This is not a signed tag" unsigned_annotated_tag HEAD
|
|
|
|
git commit --allow-empty --gpg-sign --message "Commit, and sign"
|
|
|
|
git tag --sign --message "This is a signed tag" signed_annotated_tag HEAD
|
|
|
|
git checkout -b some_branch/signed_tip '{{ git_default_branch }}'
|
|
|
|
git commit --allow-empty --gpg-sign --message "Commit, and sign"
|
|
|
|
git checkout -b another_branch/unsigned_tip '{{ git_default_branch }}'
|
|
|
|
git commit --allow-empty --no-gpg-sign --message "Commit, and don't sign"
|
|
|
|
git checkout '{{ git_default_branch }}'
|
|
|
|
args:
|
|
|
|
chdir: "{{ git_gpg_source }}"
|
|
|
|
|
|
|
|
- name: GPG-VERIFICATION | Get hash of an unsigned commit
|
|
|
|
command: git show-ref --hash --verify refs/tags/lightweight_tag/unsigned_commit
|
|
|
|
args:
|
|
|
|
chdir: "{{ git_gpg_source }}"
|
|
|
|
register: git_gpg_unsigned_commit
|
|
|
|
|
|
|
|
- name: GPG-VERIFICATION | Get hash of a signed commit
|
|
|
|
command: git show-ref --hash --verify refs/tags/lightweight_tag/signed_commit
|
|
|
|
args:
|
|
|
|
chdir: "{{ git_gpg_source }}"
|
|
|
|
register: git_gpg_signed_commit
|
|
|
|
|
|
|
|
- name: GPG-VERIFICATION | Clone repo and verify signed HEAD
|
|
|
|
environment:
|
|
|
|
- GNUPGHOME: "{{ git_gpg_gpghome }}"
|
|
|
|
git:
|
|
|
|
repo: "{{ git_gpg_source }}"
|
|
|
|
dest: "{{ git_gpg_dest }}"
|
|
|
|
verify_commit: yes
|
|
|
|
when:
|
|
|
|
- git_version.stdout is version("2.1.0", '>=')
|
|
|
|
|
|
|
|
- name: GPG-VERIFICATION | Clone repo and verify a signed lightweight tag
|
|
|
|
environment:
|
|
|
|
- GNUPGHOME: "{{ git_gpg_gpghome }}"
|
|
|
|
git:
|
|
|
|
repo: "{{ git_gpg_source }}"
|
|
|
|
dest: "{{ git_gpg_dest }}"
|
|
|
|
version: lightweight_tag/signed_commit
|
|
|
|
verify_commit: yes
|
|
|
|
when:
|
|
|
|
- git_version.stdout is version("2.1.0", '>=')
|
|
|
|
|
|
|
|
- name: GPG-VERIFICATION | Clone repo and verify an unsigned lightweight tag (should fail)
|
|
|
|
environment:
|
|
|
|
- GNUPGHOME: "{{ git_gpg_gpghome }}"
|
|
|
|
git:
|
|
|
|
repo: "{{ git_gpg_source }}"
|
|
|
|
dest: "{{ git_gpg_dest }}"
|
|
|
|
version: lightweight_tag/unsigned_commit
|
|
|
|
verify_commit: yes
|
|
|
|
register: git_verify
|
|
|
|
ignore_errors: yes
|
|
|
|
when:
|
|
|
|
- git_version.stdout is version("2.1.0", '>=')
|
|
|
|
|
|
|
|
- name: GPG-VERIFICATION | Check that unsigned lightweight tag verification failed
|
|
|
|
assert:
|
|
|
|
that:
|
|
|
|
- git_verify is failed
|
|
|
|
- git_verify.msg is match("Failed to verify GPG signature of commit/tag.+")
|
|
|
|
when:
|
|
|
|
- git_version.stdout is version("2.1.0", '>=')
|
|
|
|
|
|
|
|
- name: GPG-VERIFICATION | Clone repo and verify a signed commit
|
|
|
|
environment:
|
|
|
|
- GNUPGHOME: "{{ git_gpg_gpghome }}"
|
|
|
|
git:
|
|
|
|
repo: "{{ git_gpg_source }}"
|
|
|
|
dest: "{{ git_gpg_dest }}"
|
|
|
|
version: "{{ git_gpg_signed_commit.stdout }}"
|
|
|
|
verify_commit: yes
|
|
|
|
when:
|
|
|
|
- git_version.stdout is version("2.1.0", '>=')
|
|
|
|
|
|
|
|
- name: GPG-VERIFICATION | Clone repo and verify an unsigned commit
|
|
|
|
environment:
|
|
|
|
- GNUPGHOME: "{{ git_gpg_gpghome }}"
|
|
|
|
git:
|
|
|
|
repo: "{{ git_gpg_source }}"
|
|
|
|
dest: "{{ git_gpg_dest }}"
|
|
|
|
version: "{{ git_gpg_unsigned_commit.stdout }}"
|
|
|
|
verify_commit: yes
|
|
|
|
register: git_verify
|
|
|
|
ignore_errors: yes
|
|
|
|
when:
|
|
|
|
- git_version.stdout is version("2.1.0", '>=')
|
|
|
|
|
|
|
|
- name: GPG-VERIFICATION | Check that unsigned commit verification failed
|
|
|
|
assert:
|
|
|
|
that:
|
|
|
|
- git_verify is failed
|
|
|
|
- git_verify.msg is match("Failed to verify GPG signature of commit/tag.+")
|
|
|
|
when:
|
|
|
|
- git_version.stdout is version("2.1.0", '>=')
|
|
|
|
|
|
|
|
- name: GPG-VERIFICATION | Clone repo and verify a signed annotated tag
|
|
|
|
environment:
|
|
|
|
- GNUPGHOME: "{{ git_gpg_gpghome }}"
|
|
|
|
git:
|
|
|
|
repo: "{{ git_gpg_source }}"
|
|
|
|
dest: "{{ git_gpg_dest }}"
|
|
|
|
version: signed_annotated_tag
|
|
|
|
verify_commit: yes
|
|
|
|
|
|
|
|
- name: GPG-VERIFICATION | Clone repo and verify an unsigned annotated tag (should fail)
|
|
|
|
environment:
|
|
|
|
- GNUPGHOME: "{{ git_gpg_gpghome }}"
|
|
|
|
git:
|
|
|
|
repo: "{{ git_gpg_source }}"
|
|
|
|
dest: "{{ git_gpg_dest }}"
|
|
|
|
version: unsigned_annotated_tag
|
|
|
|
verify_commit: yes
|
|
|
|
register: git_verify
|
|
|
|
ignore_errors: yes
|
|
|
|
|
|
|
|
- name: GPG-VERIFICATION | Check that unsigned annotated tag verification failed
|
|
|
|
assert:
|
|
|
|
that:
|
|
|
|
- git_verify is failed
|
|
|
|
- git_verify.msg is match("Failed to verify GPG signature of commit/tag.+")
|
|
|
|
|
|
|
|
- name: GPG-VERIFICATION | Clone repo and verify a signed branch
|
|
|
|
environment:
|
|
|
|
- GNUPGHOME: "{{ git_gpg_gpghome }}"
|
|
|
|
git:
|
|
|
|
repo: "{{ git_gpg_source }}"
|
|
|
|
dest: "{{ git_gpg_dest }}"
|
|
|
|
version: some_branch/signed_tip
|
|
|
|
verify_commit: yes
|
|
|
|
when:
|
|
|
|
- git_version.stdout is version("2.1.0", '>=')
|
|
|
|
|
|
|
|
- name: GPG-VERIFICATION | Clone repo and verify an unsigned branch (should fail)
|
|
|
|
environment:
|
|
|
|
- GNUPGHOME: "{{ git_gpg_gpghome }}"
|
|
|
|
git:
|
|
|
|
repo: "{{ git_gpg_source }}"
|
|
|
|
dest: "{{ git_gpg_dest }}"
|
|
|
|
version: another_branch/unsigned_tip
|
|
|
|
verify_commit: yes
|
|
|
|
register: git_verify
|
|
|
|
ignore_errors: yes
|
|
|
|
when:
|
|
|
|
- git_version.stdout is version("2.1.0", '>=')
|
|
|
|
|
|
|
|
- name: GPG-VERIFICATION | Check that unsigned branch verification failed
|
|
|
|
assert:
|
|
|
|
that:
|
|
|
|
- git_verify is failed
|
|
|
|
- git_verify.msg is match("Failed to verify GPG signature of commit/tag.+")
|
|
|
|
when:
|
|
|
|
- git_version.stdout is version("2.1.0", '>=')
|
|
|
|
|
|
|
|
- name: GPG-VERIFICATION | Stop gpg-agent so we can remove any locks on the GnuPG dir
|
|
|
|
command: gpgconf --kill gpg-agent
|
|
|
|
environment:
|
|
|
|
GNUPGHOME: "{{ git_gpg_gpghome }}"
|
|
|
|
ignore_errors: yes
|
|
|
|
|
|
|
|
- name: GPG-VERIFICATION | Remove GnuPG verification workdir
|
|
|
|
file:
|
|
|
|
path: "{{ git_gpg_workdir.path }}"
|
|
|
|
state: absent
|