Skip to content

Commit 8abaca7

Browse files
committed
feat: Add job for building sboms
Signed-off-by: Artem Goncharov <artem.goncharov@gmail.com>
1 parent ea2cb86 commit 8abaca7

File tree

23 files changed

+253
-0
lines changed

23 files changed

+253
-0
lines changed

playbooks/sbom/post.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
---
2+
- hosts: all
3+
tasks:

playbooks/sbom/pre.yaml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
---
2+
- hosts: all
3+
roles:
4+
- ensure-trivy
5+
- ensure-syft
6+
tasks:
7+
- name: "Create SBOMs directory"
8+
ansible.builtin.file:
9+
path: "{{ ansible_user_dir }}/zuul-output/artifacts/sboms"
10+
state: "directory"
11+
mode: 0755
12+
13+

playbooks/sbom/run.yaml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
---
2+
- hosts: all
3+
tasks:
4+
- name: Generate report with syft
5+
ansible.builtin.include_role:
6+
name: "generate-sbom-syft"
7+
vars:
8+
generate_sbom_syft_source: "{{ zj_item.registry }}/{{ zj_item.name }}:{{ zj_item.tag }}"
9+
generate_sbom_syft_path: "{{ ansible_user_dir }}/zuul-output/artifacts/sboms/{{ zj_item.name }}.syft.json"
10+
loop: "{{ images }}"
11+
loop_control:
12+
loop_var: zj_item

roles/ensure-base/README.rst

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
Install binary tool from GitHub
2+
3+
**Role Variables**
4+
5+
.. zuul:rolevar:: ensure_base_install_dir
6+
:default: /usr/local/bin
7+
8+
Directory to install binary in.
9+
10+
.. zuul:rolevar:: ensure_base_version
11+
:default: latest
12+
13+
Version of tool
14+
15+
.. zuul:rolevar:: ensure_base_os
16+
:default: {{ ansible_system | lower }}
17+
18+
.. zuul:rolevar:: ensure_base_arch
19+
:default: amd64 / 386
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
ensure_base_name: ""
2+
ensure_base_github_owner: ""
3+
ensure_base_github_repo: ""
4+
ensure_base_version: "latest"
5+
ensure_base_tag: "v{{ ensure_base_version }}"
6+
ensure_base_download_prefix: "https://github.com/{{ ensure_base_github_owner }}/{{ ensure_base_github_repo }}/releases/download"
7+
ensure_base_release_info_url_prefix: "https://github.com/{{ ensure_base_github_owner }}/{{ ensure_base_github_repo }}/releases/"
8+
ensure_base_os: "{{ ansible_system | lower }}"
9+
ensure_base_arch: "{{ ensure_base_arch_translation[ansible_architecture] }}"
10+
ensure_base_install_dir: "/usr/local/bin"
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
- name: Create temp directory
2+
ansible.builtin.tempfile:
3+
state: directory
4+
register: ensure_base_archive_tempdir
5+
6+
- name: Get GitHub release info
7+
ansible.builtin.uri:
8+
url: "{{ ensure_base_release_info_url_prefix }}/{{ (ensure_base_version == 'latest') | ternary(ensure_base_version, ensure_base_tag) }}"
9+
headers:
10+
accept: "application/json"
11+
register: ensure_base_release_info
12+
13+
- name: Download {{ ensure_base_name }} checksums
14+
ansible.builtin.uri:
15+
url: "{{ ensure_base_download_prefix }}/{{ ensure_base_release_info.json.tag_name }}/{{ ensure_base_name }}_{{ ensure_base_release_info.json.tag_name | regex_replace('^v', '') }}_checksums.txt"
16+
return_content: true
17+
register: ensure_base_checksums
18+
19+
- name: Download {{ ensure_base_name }} archive
20+
ansible.builtin.get_url:
21+
url: "{{ ensure_base_download_prefix }}/{{ ensure_base_release_info.json.tag_name }}/{{ ensure_base_name }}_{{ ensure_base_release_info.json.tag_name | regex_replace('^v', '') }}_{{ ensure_base_os }}_{{ ensure_base_arch }}.tar.gz"
22+
dest: "{{ ensure_base_archive_tempdir.path }}/{{ ensure_base_name }}_{{ ensure_base_release_info.json.tag_name | regex_replace('^v', '') }}_{{ ensure_base_os }}_{{ ensure_base_arch }}.tar.gz"
23+
checksum: "sha256:{{ ensure_base_checksums.content | regex_search('(?P<checksum>.*)\\b\\s+'+ensure_base_name+'_'+(ensure_base_release_info.json.tag_name | regex_replace('^v',''))+'_'+ensure_base_os+'_'+ensure_base_arch+'.tar.gz', '\\g<checksum>') }}"
24+
25+
- name: Install {{ ensure_base_name }}
26+
ansible.builtin.unarchive:
27+
src: "{{ ensure_base_archive_tempdir.path }}/{{ ensure_base_name }}_{{ ensure_base_release_info.json.tag_name | regex_replace('^v', '') }}_{{ ensure_base_os }}_{{ ensure_base_arch }}.tar.gz"
28+
dest: "{{ ensure_base_install_dir }}"
29+
remote_src: yes
30+
become: true

roles/ensure-base/tasks/main.yaml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
- name: Check installed {{ ensure_base_name }} version
2+
ansible.builtin.command: "{{ ensure_base_name }} version"
3+
register: ensure_base_installed_version
4+
environment:
5+
PATH: "{{ ansible_env.PATH }}:{{ ensure_base_install_dir }}"
6+
failed_when: false
7+
8+
- name: Skip if correct version of {{ ensure_base_name }} is installed
9+
ansible.builtin.include_tasks: install.yaml
10+
when:
11+
- ensure_base_installed_version.rc != 0 or
12+
ensure_base_version != (ensure_base_installed_version.stdout|regex_replace(ensure_base_version_pattern, '\\g<version>'))

roles/ensure-base/vars/main.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
ensure_base_arch_translation:
2+
amd64: amd64
3+
x86_64: amd64
4+
i386: 386
5+
6+
ensure_base_version_pattern: ^{{ ensure_base_name }} (?P<version>.*?)$

roles/ensure-syft/README.rst

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
Install Anchore Syft
2+
3+
**Role Variables**
4+
5+
.. zuul:rolevar:: syft_version
6+
:default: latest
7+
8+
Version of syft
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
---
2+
ensure_syft_version: "1.11.1"

0 commit comments

Comments
 (0)