11
22name : Build fat image
3- ' on ' :
3+ on :
44 workflow_dispatch :
55 inputs :
6- use_RL8 :
6+ ci_cloud :
7+ description : ' Select the CI_CLOUD'
78 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
1414jobs :
1515 openstack :
1616 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
1821 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
2330 exclude :
2431 - os_version : RL8
25- rl8_selected : false
32+ build : openstack.openhpc-cuda
2633 env :
2734 ANSIBLE_FORCE_COLOR : True
2835 OS_CLOUD : openstack
29- CI_CLOUD : ${{ vars.CI_CLOUD }}
36+ CI_CLOUD : ${{ github.event.inputs.ci_cloud }}
3037 steps :
3138 - uses : actions/checkout@v2
3239
40+ - name : Record settings for CI cloud
41+ run : |
42+ echo CI_CLOUD: ${{ env.CI_CLOUD }}
43+
3344 - name : Setup ssh
3445 run : |
3546 set -x
3647 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
3849 chmod 0600 ~/.ssh/id_rsa
3950 shell : bash
4051
4859 - name : Write clouds.yaml
4960 run : |
5061 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
5263 shell : bash
5364
5465 - name : Setup environment
@@ -63,19 +74,66 @@ jobs:
6374 . environments/.stackhpc/activate
6475 cd packer/
6576 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
6778 env :
6879 PKR_VAR_os_version : ${{ matrix.os_version }}
6980
7081 - name : Get created image names from manifest
7182 id : manifest
7283 run : |
7384 . 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
8188 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