1818
1919jobs :
2020 build-base-image :
21- name : Build base image
21+ name : Build base image (UBI10)
2222 strategy :
2323 fail-fast : false
2424 matrix :
2727 steps :
2828 - name : Checkout
2929 uses : actions/checkout@v4
30+ with :
31+ ref : ${{ github.event.pull_request.head.sha }}
3032 - name : Set arch environment variable
3133 run : |
3234 if [[ ${{matrix.runners}} == 'ubuntu-22.04' ]]; then
@@ -38,35 +40,45 @@ jobs:
3840 run : sudo rm -rf /usr/local/lib/android
3941 - name : Cleanup docker images
4042 run : docker system prune -af
41- - name : Add expiration label to base Dockerfile
43+ - name : Add expiration label to base Dockerfile (UBI10)
4244 run : sed -i '/^FROM/a LABEL quay.expires-after=4w' base/ubi10/Dockerfile
45+ - name : Set up Docker Buildx
46+ uses : docker/setup-buildx-action@v3
4347 - name : Login to Registry
4448 uses : docker/login-action@v3
4549 with :
4650 registry : ${{ env.REGISTRY }}
4751 username : ${{ secrets.QUAY_USERNAME }}
4852 password : ${{ secrets.QUAY_PASSWORD }}
49- - name : Build base image
53+ - name : Build base image (UBI10)
5054 run : |
55+ echo "=========================================="
56+ echo "Building UBI10 base image for ${{env.arch}}"
57+ echo "=========================================="
5158 cd base/ubi10 && docker buildx build \
5259 --platform linux/${{env.arch}} \
5360 --progress=plain \
5461 --push \
55- -t ${{ env.REGISTRY }}/base-developer-image:${{env.arch}}-ubi10-pr-${{github.event.number}} \
56- -t base-developer-image-${{env.arch}} .
62+ -t ${{ env.REGISTRY }}/base-developer-image:${{env.arch}}-ubi10-pr-${{github.event.number}} .
63+ - name : Verify base image is available (UBI10)
64+ run : |
65+ echo "Verifying base image is available in registry..."
66+ for i in {1..5}; do
67+ if docker manifest inspect ${{ env.REGISTRY }}/base-developer-image:${{env.arch}}-ubi10-pr-${{github.event.number}} >/dev/null 2>&1; then
68+ echo "Base image is available!"
69+ exit 0
70+ fi
71+ echo "Waiting for image to be available... ($i/5)"
72+ sleep 10
73+ done
74+ echo "ERROR: Base image not available after 5 attempts"
75+ exit 1
5776 - name : Display docker images
5877 run : docker images
59- - name : Compress image to a file
60- run : docker save base-developer-image-${{env.arch}} | gzip > base-developer-image-${{env.arch}}.tgz
61- - name : Upload image artifact
62- uses : actions/upload-artifact@v4
63- with :
64- name : base-developer-image-${{env.arch}}
65- path : base-developer-image-${{env.arch}}.tgz
6678
6779
6880 build-udi :
69- name : Build udi
81+ name : Build udi (UDI10)
7082 strategy :
7183 fail-fast : false
7284 matrix :
@@ -83,42 +95,45 @@ jobs:
8395 fi
8496 - name : Checkout
8597 uses : actions/checkout@v4
98+ with :
99+ ref : ${{ github.event.pull_request.head.sha }}
86100 - name : Free runner space
87101 run : sudo rm -rf /usr/local/lib/android
88102 - name : Cleanup docker images
89103 run : docker system prune -af
90- - name : Download BDI artifacts
91- uses : actions/download-artifact@v4
92- with :
93- pattern : base-developer-image-*
94- merge-multiple : true
95- path : .
96- - name : List downloaded files
97- run : ls -lah
98- - name : Load docker images
99- run : docker load -i base-developer-image-${{env.arch}}.tgz
100- - name : Display docker images
101- run : docker images
102- - name : Update UDI Dockerfile
103- run : sed "s|quay.io/devfile/base-developer-image:ubi10-latest|base-developer-image-${{env.arch}}|" -i "universal/ubi10/Dockerfile"
104- - name : Add expiration label to UDI Dockerfile
105- run : sed -i '/^FROM/a LABEL quay.expires-after=4w' universal/ubi10/Dockerfile
104+ - name : Set up Docker Buildx
105+ uses : docker/setup-buildx-action@v3
106106 - name : Login to Registry
107107 uses : docker/login-action@v3
108108 with :
109109 registry : ${{ env.REGISTRY }}
110110 username : ${{ secrets.QUAY_USERNAME }}
111111 password : ${{ secrets.QUAY_PASSWORD }}
112- - name : Build udi
112+ - name : Verify base image exists before UDI build (UDI10)
113+ run : |
114+ echo "Verifying base image exists in registry..."
115+ docker manifest inspect ${{ env.REGISTRY }}/base-developer-image:${{env.arch}}-ubi10-pr-${{github.event.number}} || {
116+ echo "ERROR: Base image not found: ${{ env.REGISTRY }}/base-developer-image:${{env.arch}}-ubi10-pr-${{github.event.number}}"
117+ exit 1
118+ }
119+ echo "Base image verified successfully!"
120+ - name : Update UDI Dockerfile (UDI10)
121+ run : sed "s|quay.io/devfile/base-developer-image:ubi10-latest|${{ env.REGISTRY }}/base-developer-image:${{env.arch}}-ubi10-pr-${{github.event.number}}|" -i "universal/ubi10/Dockerfile"
122+ - name : Add expiration label to UDI Dockerfile (UDI10)
123+ run : sed -i '/^FROM/a LABEL quay.expires-after=4w' universal/ubi10/Dockerfile
124+ - name : Build udi (UDI10)
113125 run : |
126+ echo "=========================================="
127+ echo "Building UDI10 image for ${{env.arch}}"
128+ echo "=========================================="
114129 cd universal/ubi10 && docker buildx build \
115130 --platform linux/${{env.arch}} \
116131 --progress=plain \
117132 --push \
118133 -t ${{ env.REGISTRY }}/universal-developer-image:${{env.arch}}-ubi10-pr-${{github.event.number}} .
119134
120135 publish-base-image :
121- name : Publish base image
136+ name : Publish base image (UBI10)
122137 runs-on : ubuntu-22.04
123138 needs : build-base-image
124139 steps :
@@ -128,23 +143,47 @@ jobs:
128143 registry : ${{ env.REGISTRY }}
129144 username : ${{ secrets.QUAY_USERNAME }}
130145 password : ${{ secrets.QUAY_PASSWORD }}
131- - name : publish
146+ - name : Publish UBI10 base image manifest
132147 run : |
148+ echo "=========================================="
149+ echo "Publishing UBI10 base image manifest"
150+ echo "=========================================="
151+ echo "Verifying both architecture images exist..."
152+ docker manifest inspect ${{ env.REGISTRY }}/base-developer-image:amd64-ubi10-pr-${{github.event.number}} || {
153+ echo "ERROR: amd64 base image not found"
154+ exit 1
155+ }
156+ docker manifest inspect ${{ env.REGISTRY }}/base-developer-image:arm64-ubi10-pr-${{github.event.number}} || {
157+ echo "ERROR: arm64 base image not found"
158+ exit 1
159+ }
160+ echo "Both images verified, extracting digests..."
161+
162+ # Extract the actual image digest for each architecture from the manifest list
163+ AMD64_DIGEST=$(docker manifest inspect ${{ env.REGISTRY }}/base-developer-image:amd64-ubi10-pr-${{github.event.number}} | \
164+ jq -r '.manifests[] | select(.platform.architecture == "amd64") | .digest')
165+ ARM64_DIGEST=$(docker manifest inspect ${{ env.REGISTRY }}/base-developer-image:arm64-ubi10-pr-${{github.event.number}} | \
166+ jq -r '.manifests[] | select(.platform.architecture == "arm64") | .digest')
167+
168+ echo "AMD64 digest: $AMD64_DIGEST"
169+ echo "ARM64 digest: $ARM64_DIGEST"
170+
171+ echo "Creating multi-arch manifest..."
133172 docker manifest create ${{ env.REGISTRY }}/base-developer-image:ubi10-pr-${{github.event.number}} \
134- --amend ${{ env.REGISTRY }}/base-developer-image:amd64-ubi10-pr-${{github.event.number}} \
135- --amend ${{ env.REGISTRY }}/base-developer-image:arm64-ubi10-pr-${{github.event.number}}
136-
173+ --amend ${{ env.REGISTRY }}/base-developer-image@$AMD64_DIGEST \
174+ --amend ${{ env.REGISTRY }}/base-developer-image@$ARM64_DIGEST
175+
137176 docker manifest annotate ${{ env.REGISTRY }}/base-developer-image:ubi10-pr-${{github.event.number}} \
138- ${{ env.REGISTRY }}/base-developer-image:amd64-ubi10-pr-${{github.event.number}} \
177+ ${{ env.REGISTRY }}/base-developer-image@$AMD64_DIGEST \
139178 --os linux --arch amd64
140179 docker manifest annotate ${{ env.REGISTRY }}/base-developer-image:ubi10-pr-${{github.event.number}} \
141- ${{ env.REGISTRY }}/base-developer-image:arm64-ubi10-pr-${{github.event.number}} \
180+ ${{ env.REGISTRY }}/base-developer-image@$ARM64_DIGEST \
142181 --os linux --arch arm64
143-
182+
144183 docker manifest push ${{ env.REGISTRY }}/base-developer-image:ubi10-pr-${{github.event.number}}
145184
146185 publish-udi :
147- name : Publish udi
186+ name : Publish udi (UDI10)
148187 runs-on : ubuntu-22.04
149188 needs : build-udi
150189 steps :
@@ -154,19 +193,43 @@ jobs:
154193 registry : ${{ env.REGISTRY }}
155194 username : ${{ secrets.QUAY_USERNAME }}
156195 password : ${{ secrets.QUAY_PASSWORD }}
157- - name : publish
196+ - name : Publish UDI10 manifest
158197 run : |
198+ echo "=========================================="
199+ echo "Publishing UDI10 manifest"
200+ echo "=========================================="
201+ echo "Verifying both architecture images exist..."
202+ docker manifest inspect ${{ env.REGISTRY }}/universal-developer-image:amd64-ubi10-pr-${{github.event.number}} || {
203+ echo "ERROR: amd64 UDI image not found"
204+ exit 1
205+ }
206+ docker manifest inspect ${{ env.REGISTRY }}/universal-developer-image:arm64-ubi10-pr-${{github.event.number}} || {
207+ echo "ERROR: arm64 UDI image not found"
208+ exit 1
209+ }
210+ echo "Both images verified, extracting digests..."
211+
212+ # Extract the actual image digest for each architecture from the manifest list
213+ AMD64_DIGEST=$(docker manifest inspect ${{ env.REGISTRY }}/universal-developer-image:amd64-ubi10-pr-${{github.event.number}} | \
214+ jq -r '.manifests[] | select(.platform.architecture == "amd64") | .digest')
215+ ARM64_DIGEST=$(docker manifest inspect ${{ env.REGISTRY }}/universal-developer-image:arm64-ubi10-pr-${{github.event.number}} | \
216+ jq -r '.manifests[] | select(.platform.architecture == "arm64") | .digest')
217+
218+ echo "AMD64 digest: $AMD64_DIGEST"
219+ echo "ARM64 digest: $ARM64_DIGEST"
220+
221+ echo "Creating multi-arch manifest..."
159222 docker manifest create ${{ env.REGISTRY }}/universal-developer-image:ubi10-pr-${{github.event.number}} \
160- --amend ${{ env.REGISTRY }}/universal-developer-image:amd64-ubi10-pr-${{github.event.number}} \
161- --amend ${{ env.REGISTRY }}/universal-developer-image:arm64-ubi10-pr-${{github.event.number}}
162-
223+ --amend ${{ env.REGISTRY }}/universal-developer-image@$AMD64_DIGEST \
224+ --amend ${{ env.REGISTRY }}/universal-developer-image@$ARM64_DIGEST
225+
163226 docker manifest annotate ${{ env.REGISTRY }}/universal-developer-image:ubi10-pr-${{github.event.number}} \
164- ${{ env.REGISTRY }}/universal-developer-image:amd64-ubi10-pr-${{github.event.number}} \
227+ ${{ env.REGISTRY }}/universal-developer-image@$AMD64_DIGEST \
165228 --os linux --arch amd64
166229 docker manifest annotate ${{ env.REGISTRY }}/universal-developer-image:ubi10-pr-${{github.event.number}} \
167- ${{ env.REGISTRY }}/universal-developer-image:arm64-ubi10-pr-${{github.event.number}} \
230+ ${{ env.REGISTRY }}/universal-developer-image@$ARM64_DIGEST \
168231 --os linux --arch arm64
169-
232+
170233 docker manifest push ${{ env.REGISTRY }}/universal-developer-image:ubi10-pr-${{github.event.number}}
171234 - name : ' Comment PR'
172235 uses : actions/github-script@v7
0 commit comments