Skip to content

Commit be83216

Browse files
Backport P, Z and Arm runners to 3.21 (#2254)
* ROX-29116: (fix) Use ARM GH action workflow runners for ARM builds (#2106) * Revert "Revert GH arm changes (#2107)" * Add arm64 stable, beta, and dev channels for Google COS integration tests (#2096) * Use P and Z GHA runners (#2215) * Use go cross-compilation to speed up test builds on CI (#2210) After adding Arm runners on GHA, we made it so the Arm test image is always built. Unfortunately, because we use QEMU to build the images, the build has gotten quite slow. In order to speed up the build, this change makes it so we cross-compile the binaries for all our supported platforms locally and the image build simply copies the binaries into the final image. --------- Co-authored-by: Robby Cochran <rcochran@redhat.com>
1 parent 8e9e0ff commit be83216

File tree

10 files changed

+123
-358
lines changed

10 files changed

+123
-358
lines changed

.github/workflows/collector-builder.yml

Lines changed: 57 additions & 133 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,11 @@ on:
88
required: true
99
description: |
1010
The tag used to build the collector image
11+
1112
outputs:
1213
collector-builder-tag:
1314
description: The builder tag used by the build
14-
value: ${{ jobs.build-builder-image.outputs.collector-builder-tag || 'master' }}
15+
value: ${{ jobs.builder-needs-rebuilding.outputs.collector-builder-tag }}
1516

1617
env:
1718
COLLECTOR_TAG: ${{ inputs.collector-tag }}
@@ -23,7 +24,11 @@ jobs:
2324
name: Determine if builder image needs to be built
2425
runs-on: ubuntu-24.04
2526
outputs:
26-
build-image: ${{ steps.changed.outputs.builder-changed }}
27+
build-image: ${{ steps.builder-tag.outputs.build-image || false }}
28+
collector-builder-tag: ${{ steps.builder-tag.outputs.collector-builder-tag || 'master'}}
29+
30+
env:
31+
DEFAULT_BUILDER_TAG: master
2732

2833
steps:
2934
- uses: actions/checkout@v4
@@ -38,106 +43,76 @@ jobs:
3843
- builder/Dockerfile
3944
- .github/workflows/collector-builder.yml
4045
46+
- name: Check labels and define builder tag
47+
id: builder-tag
48+
if: |
49+
steps.changed.outputs.builder-changed == 'true' ||
50+
(github.event_name == 'push' && (
51+
github.ref_type == 'tag' || startsWith(github.ref_name, 'release-')
52+
)) ||
53+
contains(github.event.pull_request.labels.*.name, 'build-builder-image') ||
54+
github.event_name == 'schedule'
55+
run: |
56+
COLLECTOR_BUILDER_TAG="${DEFAULT_BUILDER_TAG}"
57+
if [[ "${{ github.event_name }}" == 'pull_request' || \
58+
"${{ github.ref_type }}" == 'tag' || \
59+
"${{ github.ref_name }}" =~ ^release- ]]; then
60+
COLLECTOR_BUILDER_TAG="${{ inputs.collector-tag }}"
61+
fi
62+
63+
echo "::notice::Rebuild builder image with tag ${COLLECTOR_BUILDER_TAG}"
64+
echo "collector-builder-tag=${COLLECTOR_BUILDER_TAG}" >> "$GITHUB_OUTPUT"
65+
echo "build-image=true" >> "$GITHUB_OUTPUT"
66+
4167
build-builder-image:
42-
name: Build the builder image
43-
runs-on: ubuntu-24.04
44-
# Multiarch builds sometimes take for eeeeeeeeeever
45-
timeout-minutes: 480
68+
name: Build builder image
4669
needs:
4770
- builder-needs-rebuilding
4871
if: |
49-
needs.builder-needs-rebuilding.outputs.build-image == 'true' ||
50-
(github.event_name == 'push' && (
51-
github.ref_type == 'tag' || startsWith(github.ref_name, 'release-')
52-
)) ||
53-
contains(github.event.pull_request.labels.*.name, 'build-builder-image') ||
54-
github.event_name == 'schedule'
55-
outputs:
56-
collector-builder-tag: ${{ steps.builder-tag.outputs.collector-builder-tag }}
72+
needs.builder-needs-rebuilding.outputs.build-image == 'true'
5773
strategy:
58-
fail-fast: false
5974
matrix:
60-
arch: [amd64, ppc64le, s390x, arm64]
75+
arch:
76+
- amd64
77+
- arm64
78+
- ppc64le
79+
- s390x
80+
runs-on: ${{ (matrix.arch == 'arm64' && 'ubuntu-24.04-arm') ||
81+
(matrix.arch == 'ppc64le' && 'ubuntu-24.04-ppc64le') ||
82+
(matrix.arch == 's390x' && 'ubuntu-24.04-s390x') ||
83+
'ubuntu-24.04' }}
6184

6285
env:
6386
PLATFORM: linux/${{ matrix.arch }}
6487
BUILD_TYPE: ci
88+
COLLECTOR_BUILDER_TAG: ${{ needs.builder-needs-rebuilding.outputs.collector-builder-tag }}
6589

6690
steps:
6791
- uses: actions/checkout@v4
6892
with:
6993
submodules: true
7094

71-
- name: Set up QEMU
72-
uses: docker/setup-qemu-action@v3
73-
with:
74-
image: tonistiigi/binfmt:qemu-v8.1.5
75-
7695
- name: Set up Docker Buildx
7796
uses: docker/setup-buildx-action@v3
7897

79-
- uses: actions/setup-python@v5
80-
with:
81-
python-version: "3.10"
82-
83-
- uses: 'google-github-actions/auth@v2'
84-
with:
85-
credentials_json: '${{ secrets.GOOGLE_CREDENTIALS_COLLECTOR_SVC_ACCT }}'
86-
87-
- uses: 'google-github-actions/setup-gcloud@v2'
88-
89-
- uses: ./.github/actions/setup-vm-creds
90-
with:
91-
gcp-ssh-key: ${{ secrets.GCP_SSH_KEY }}
92-
gcp-ssh-key-pub: ${{ secrets.GCP_SSH_KEY_PUB }}
93-
s390x-ssh-key: ${{ secrets.IBM_CLOUD_S390X_SSH_PRIVATE_KEY }}
94-
ppc64le-ssh-key: ${{ secrets.IBM_CLOUD_POWER_SSH_PRIVATE_KEY }}
95-
ppc64le-ssh-key-pub: ${{ secrets.IBM_CLOUD_POWER_SSH_PUBLIC_KEY }}
96-
s390x-key: ${{ secrets.IBM_CLOUD_S390x_API_KEY }}
97-
ppc64le-key: ${{ secrets.IBM_CLOUD_POWER_API_KEY }}
98-
redhat-username: ${{ secrets.REDHAT_USERNAME }}
99-
redhat-password: ${{ secrets.REDHAT_PASSWORD }}
100-
vm-type: all
101-
job-tag: builder
102-
103-
- name: Create Build VMs
104-
if: |
105-
matrix.arch == 's390x' &&
106-
(github.event_name != 'pull_request' || contains(github.event.pull_request.labels.*.name, 'run-multiarch-builds'))
98+
- name: Install ansible on P&Z runners
99+
if: matrix.arch == 'ppc64le' || matrix.arch == 's390x'
107100
run: |
108-
make -C "${{ github.workspace }}/ansible" create-build-vms
109-
110-
- name: Define builder tag
111-
id: builder-tag
112-
run: |
113-
COLLECTOR_BUILDER_TAG="${DEFAULT_BUILDER_TAG}"
114-
if [[ "${{ github.event_name }}" == 'pull_request' || \
115-
"${{ github.ref_type }}" == 'tag' || \
116-
"${{ github.ref_name }}" =~ ^release- ]]; then
117-
COLLECTOR_BUILDER_TAG="${{ inputs.collector-tag }}"
118-
fi
119-
120-
echo "COLLECTOR_BUILDER_TAG=${COLLECTOR_BUILDER_TAG}" >> "$GITHUB_ENV"
121-
echo "collector-builder-tag=${COLLECTOR_BUILDER_TAG}" >> "$GITHUB_OUTPUT"
101+
sudo apt-get install -y ansible
122102
123103
- name: Create ansible vars
124104
run: |
125-
{
126-
echo "---"
127-
echo "stackrox_io_username: ${{ secrets.QUAY_STACKROX_IO_RW_USERNAME }}"
128-
echo "stackrox_io_password: ${{ secrets.QUAY_STACKROX_IO_RW_PASSWORD }}"
129-
echo "rhacs_eng_username: ${{ secrets.QUAY_RHACS_ENG_RW_USERNAME }}"
130-
echo "rhacs_eng_password: ${{ secrets.QUAY_RHACS_ENG_RW_PASSWORD }}"
131-
echo "collector_git_ref: ${{ github.ref }}"
132-
echo "collector_builder_tag: ${{ env.COLLECTOR_BUILDER_TAG }}"
133-
} > ${{ github.workspace }}/ansible/secrets.yml
105+
cat << EOF > ${{ github.workspace }}/ansible/secrets.yml
106+
---
107+
stackrox_io_username: ${{ secrets.QUAY_STACKROX_IO_RW_USERNAME }}
108+
stackrox_io_password: ${{ secrets.QUAY_STACKROX_IO_RW_PASSWORD }}
109+
rhacs_eng_username: ${{ secrets.QUAY_RHACS_ENG_RW_USERNAME }}
110+
rhacs_eng_password: ${{ secrets.QUAY_RHACS_ENG_RW_PASSWORD }}
111+
collector_git_ref: ${{ github.ref }}
112+
collector_builder_tag: ${{ env.COLLECTOR_BUILDER_TAG }}
113+
EOF
134114
135115
- name: Build images
136-
if: |
137-
(github.event_name != 'pull_request' && matrix.arch != 's390x') ||
138-
matrix.arch == 'amd64' ||
139-
(contains(github.event.pull_request.labels.*.name, 'run-multiarch-builds') && matrix.arch != 's390x')
140-
timeout-minutes: 480
141116
run: |
142117
ansible-galaxy install -r ansible/requirements.yml
143118
ansible-playbook \
@@ -148,36 +123,18 @@ jobs:
148123
-e @'${{ github.workspace }}/ansible/secrets.yml' \
149124
ansible/ci-build-builder.yml
150125
151-
- name: Build s390x images
152-
if: |
153-
(github.event_name != 'pull_request' && matrix.arch == 's390x') ||
154-
(contains(github.event.pull_request.labels.*.name, 'run-multiarch-builds') && matrix.arch == 's390x')
155-
timeout-minutes: 480
156-
run: |
157-
ansible-playbook \
158-
-i ansible/ci \
159-
-e build_hosts='job_id_${{ env.JOB_ID }}' \
160-
-e arch='${{ matrix.arch }}' \
161-
-e @'${{ github.workspace }}/ansible/secrets.yml' \
162-
ansible/ci-build-builder.yml
163-
164-
- name: Destroy VMs
165-
if: always() && matrix.arch == 's390x'
166-
run: |
167-
make -C ansible destroy-vms
168-
169126
create-multiarch-manifest:
170127
needs:
128+
- builder-needs-rebuilding
171129
- build-builder-image
172130
name: Create Multiarch manifest
173131
runs-on: ubuntu-24.04
174132
if: |
175-
github.event_name != 'pull_request' ||
176-
(needs.build-builder-image.outputs.collector-builder-tag != 'cache' &&
177-
contains(github.event.pull_request.labels.*.name, 'run-multiarch-builds'))
133+
always() && !contains(join(needs.*.result, ','), 'failure') &&
134+
needs.builder-needs-rebuilding.outputs.build-image == 'true'
178135
env:
179-
COLLECTOR_BUILDER_TAG: ${{ needs.build-builder-image.outputs.collector-builder-tag }}
180-
ARCHS: amd64 ppc64le s390x arm64
136+
COLLECTOR_BUILDER_TAG: ${{ needs.builder-needs-rebuilding.outputs.collector-builder-tag }}
137+
ARCHS: amd64 arm64 ppc64le s390x
181138

182139
steps:
183140
- uses: actions/checkout@v4
@@ -208,45 +165,12 @@ jobs:
208165
base-image: quay.io/rhacs-eng/collector-builder:${{ env.COLLECTOR_BUILDER_TAG }}
209166
archs: ${{ env.ARCHS }}
210167

211-
retag-x86-image:
212-
needs:
213-
- build-builder-image
214-
name: Retag x86 builder image
215-
runs-on: ubuntu-24.04
216-
if: |
217-
github.event_name == 'pull_request' &&
218-
needs.build-builder-image.outputs.collector-builder-tag != 'cache' &&
219-
!contains(github.event.pull_request.labels.*.name, 'run-multiarch-builds')
220-
env:
221-
COLLECTOR_BUILDER_TAG: ${{ needs.build-builder-image.outputs.collector-builder-tag }}
222-
steps:
223-
- name: Pull image to retag
224-
run: |
225-
docker pull "quay.io/stackrox-io/collector-builder:${COLLECTOR_BUILDER_TAG}-amd64"
226-
227-
- name: Retag and push stackrox-io
228-
uses: stackrox/actions/images/retag-and-push@v1
229-
with:
230-
src-image: quay.io/stackrox-io/collector-builder:${{ env.COLLECTOR_BUILDER_TAG }}-amd64
231-
dst-image: quay.io/stackrox-io/collector-builder:${{ env.COLLECTOR_BUILDER_TAG }}
232-
username: ${{ secrets.QUAY_STACKROX_IO_RW_USERNAME }}
233-
password: ${{ secrets.QUAY_STACKROX_IO_RW_PASSWORD }}
234-
235-
- name: Retag and push rhacs-eng
236-
uses: stackrox/actions/images/retag-and-push@v1
237-
with:
238-
src-image: quay.io/stackrox-io/collector-builder:${{ env.COLLECTOR_BUILDER_TAG }}-amd64
239-
dst-image: quay.io/rhacs-eng/collector-builder:${{ env.COLLECTOR_BUILDER_TAG }}
240-
username: ${{ secrets.QUAY_RHACS_ENG_RW_USERNAME }}
241-
password: ${{ secrets.QUAY_RHACS_ENG_RW_PASSWORD }}
242-
243168
notify:
244169
runs-on: ubuntu-24.04
245170
if: always() && contains(join(needs.*.result, ','), 'failure') && github.event_name != 'pull_request'
246171
needs:
247172
- build-builder-image
248173
- create-multiarch-manifest
249-
- retag-x86-image
250174
steps:
251175
- name: Slack notification
252176
uses: rtCamp/action-slack-notify@v2

0 commit comments

Comments
 (0)