1
1
2
2
name : Build fat image
3
- ' on ' :
3
+ on :
4
4
workflow_dispatch :
5
5
inputs :
6
- use_RL8 :
6
+ ci_cloud :
7
+ description : ' Select the CI_CLOUD'
7
8
required : true
8
- description : Include RL8 image build
9
- type : boolean
10
- default : false
11
- concurrency :
12
- group : ${{ github.ref }}-{{ matrix.os_version }} # to branch/PR + OS
13
- cancel-in-progress : true
9
+ type : choice
10
+ options :
11
+ - LEAFCLOUD
12
+ - SMS
13
+ - ARCUS
14
14
jobs :
15
15
openstack :
16
16
name : openstack-imagebuild
17
- runs-on : ubuntu-20.04
17
+ concurrency :
18
+ group : ${{ github.workflow }}-${{ github.ref }}-${{ matrix.os_version }}-${{ matrix.build }} # to branch/PR + OS + build
19
+ cancel-in-progress : true
20
+ runs-on : ubuntu-22.04
18
21
strategy :
19
- matrix :
20
- os_version : [RL8, RL9]
21
- rl8_selected :
22
- - ${{ inputs.use_RL8 == true }} # only potentially true for workflow_dispatch
22
+ fail-fast : false # allow other matrix jobs to continue even if one fails
23
+ matrix : # build RL8+OFED, RL9+OFED, RL9+OFED+CUDA versions
24
+ os_version :
25
+ - RL8
26
+ - RL9
27
+ build :
28
+ - openstack.openhpc-ofed
29
+ - openstack.openhpc-cuda
23
30
exclude :
24
31
- os_version : RL8
25
- rl8_selected : false
32
+ build : openstack.openhpc-cuda
26
33
env :
27
34
ANSIBLE_FORCE_COLOR : True
28
35
OS_CLOUD : openstack
29
- CI_CLOUD : ${{ vars.CI_CLOUD }}
36
+ CI_CLOUD : ${{ github.event.inputs.ci_cloud }}
30
37
steps :
31
38
- uses : actions/checkout@v2
32
39
40
+ - name : Record settings for CI cloud
41
+ run : |
42
+ echo CI_CLOUD: ${{ env.CI_CLOUD }}
43
+
33
44
- name : Setup ssh
34
45
run : |
35
46
set -x
36
47
mkdir ~/.ssh
37
- echo "${{ secrets[format('{0}_SSH_KEY', vars .CI_CLOUD)] }}" > ~/.ssh/id_rsa
48
+ echo "${{ secrets[format('{0}_SSH_KEY', env .CI_CLOUD)] }}" > ~/.ssh/id_rsa
38
49
chmod 0600 ~/.ssh/id_rsa
39
50
shell : bash
40
51
48
59
- name : Write clouds.yaml
49
60
run : |
50
61
mkdir -p ~/.config/openstack/
51
- echo "${{ secrets[format('{0}_CLOUDS_YAML', vars .CI_CLOUD)] }}" > ~/.config/openstack/clouds.yaml
62
+ echo "${{ secrets[format('{0}_CLOUDS_YAML', env .CI_CLOUD)] }}" > ~/.config/openstack/clouds.yaml
52
63
shell : bash
53
64
54
65
- name : Setup environment
@@ -63,19 +74,66 @@ jobs:
63
74
. environments/.stackhpc/activate
64
75
cd packer/
65
76
packer init .
66
- PACKER_LOG=1 packer build -on-error=${{ vars.PACKER_ON_ERROR }} -except=openstack.openhpc-extra -var-file=$PKR_VAR_environment_root/${{ vars .CI_CLOUD }}.pkrvars.hcl openstack.pkr.hcl
77
+ PACKER_LOG=1 packer build -on-error=${{ vars.PACKER_ON_ERROR }} -only=${{ matrix.build }} -var-file=$PKR_VAR_environment_root/${{ env .CI_CLOUD }}.pkrvars.hcl openstack.pkr.hcl
67
78
env :
68
79
PKR_VAR_os_version : ${{ matrix.os_version }}
69
80
70
81
- name : Get created image names from manifest
71
82
id : manifest
72
83
run : |
73
84
. venv/bin/activate
74
- for IMAGE_ID in $(jq --raw-output '.builds[].artifact_id' packer/packer-manifest.json)
75
- do
76
- while ! openstack image show -f value -c name $IMAGE_ID; do
77
- sleep 5
78
- done
79
- IMAGE_NAME=$(openstack image show -f value -c name $IMAGE_ID)
80
- echo $IMAGE_NAME
85
+ IMAGE_ID=$(jq --raw-output '.builds[-1].artifact_id' packer/packer-manifest.json)
86
+ while ! openstack image show -f value -c name $IMAGE_ID; do
87
+ sleep 5
81
88
done
89
+ IMAGE_NAME=$(openstack image show -f value -c name $IMAGE_ID)
90
+ echo "image-name=${IMAGE_NAME}" >> "$GITHUB_OUTPUT"
91
+ echo "image-id=$IMAGE_ID" >> "$GITHUB_OUTPUT"
92
+
93
+ - name : Download image
94
+ run : |
95
+ . venv/bin/activate
96
+ sudo mkdir /mnt/images
97
+ sudo chmod 777 /mnt/images
98
+ openstack image save --file /mnt/images/${{ steps.manifest.outputs.image-name }}.qcow2 ${{ steps.manifest.outputs.image-name }}
99
+
100
+ - name : Set up QEMU
101
+ uses : docker/setup-qemu-action@v3
102
+
103
+ - name : install libguestfs
104
+ run : |
105
+ sudo apt -y update
106
+ sudo apt -y install libguestfs-tools
107
+
108
+ - name : mkdir for mount
109
+ run : sudo mkdir -p './${{ steps.manifest.outputs.image-name }}'
110
+
111
+ - name : mount qcow2 file
112
+ run : sudo guestmount -a /mnt/images/${{ steps.manifest.outputs.image-name }}.qcow2 -i --ro -o allow_other './${{ steps.manifest.outputs.image-name }}'
113
+
114
+ - name : Run Trivy vulnerability scanner
115
+ uses :
aquasecurity/[email protected]
116
+ with :
117
+ scan-type : fs
118
+ scan-ref : " ${{ steps.manifest.outputs.image-name }}"
119
+ scanners : " vuln"
120
+ format : sarif
121
+ output : " ${{ steps.manifest.outputs.image-name }}.sarif"
122
+ # turn off secret scanning to speed things up
123
+
124
+ - name : Upload Trivy scan results to GitHub Security tab
125
+ uses : github/codeql-action/upload-sarif@v3
126
+ with :
127
+ sarif_file : " ${{ steps.manifest.outputs.image-name }}.sarif"
128
+ category : " ${{ matrix.os_version }}-${{ matrix.build }}"
129
+
130
+ - name : Fail if scan has CRITICAL vulnerabilities
131
+ uses :
aquasecurity/[email protected]
132
+ with :
133
+ scan-type : fs
134
+ scan-ref : " ${{ steps.manifest.outputs.image-name }}"
135
+ scanners : " vuln"
136
+ format : table
137
+ exit-code : ' 1'
138
+ severity : ' CRITICAL'
139
+ ignore-unfixed : true
0 commit comments