|
72 | 72 | include: |
73 | 73 | - arch: amd64 |
74 | 74 | runner: ubuntu-latest |
75 | | - cross_target: arm64 |
76 | | - cross_triplet: aarch64-linux-gnu |
77 | | - expected_machine: AArch64 |
78 | 75 | - arch: arm64 |
79 | 76 | runner: ubuntu-24.04-arm |
80 | | - cross_target: amd64 |
81 | | - cross_triplet: x86_64-linux-gnu |
82 | | - expected_machine: X86-64 |
83 | 77 | runs-on: ${{ matrix.runner }} |
84 | 78 | steps: |
85 | 79 | - name: Checkout repository |
@@ -158,44 +152,6 @@ jobs: |
158 | 152 | cache-from: type=gha,scope=docker-build-develop-full-${{ matrix.arch }} |
159 | 153 | cache-to: type=gha,mode=max,scope=docker-build-develop-full-${{ matrix.arch }} |
160 | 154 |
|
161 | | - - name: Smoke test (cross build + readelf) |
162 | | - env: |
163 | | - IMAGE_DIGEST: ${{ steps.build_develop_full.outputs.digest }} |
164 | | - CROSS_TARGET: ${{ matrix.cross_target }} |
165 | | - CROSS_TRIPLET: ${{ matrix.cross_triplet }} |
166 | | - EXPECTED_MACHINE: ${{ matrix.expected_machine }} |
167 | | - run: | |
168 | | - set -euo pipefail |
169 | | - uid="$(id -u)" |
170 | | - gid="$(id -g)" |
171 | | - docker run --rm \ |
172 | | - --platform "linux/${{ matrix.arch }}" \ |
173 | | - --user "${uid}:${gid}" \ |
174 | | - -e HOME=/tmp/rmcs-home \ |
175 | | - -e RMCS_PATH=/workspaces/RMCS \ |
176 | | - -e CROSS_TARGET="${CROSS_TARGET}" \ |
177 | | - -e CROSS_TRIPLET="${CROSS_TRIPLET}" \ |
178 | | - -e EXPECTED_MACHINE="${EXPECTED_MACHINE}" \ |
179 | | - -v "$PWD:/workspaces/RMCS" \ |
180 | | - -w /workspaces/RMCS \ |
181 | | - "${{ env.REGISTRY_IMAGE_DEVELOP }}@${IMAGE_DIGEST}" \ |
182 | | - bash -lc ' |
183 | | - set -euo pipefail |
184 | | - mkdir -p "${HOME}" |
185 | | - test -d "/opt/sysroots/${CROSS_TARGET}" |
186 | | - command -v "${CROSS_TRIPLET}-gcc" |
187 | | - command -v "${CROSS_TRIPLET}-g++" |
188 | | - ./.script/build-rmcs-cross --target-arch "${CROSS_TARGET}" --packages-up-to rmcs_executor |
189 | | - lib_dir="/workspaces/RMCS/rmcs_ws/install-cross-${CROSS_TARGET}/lib" |
190 | | - for lib in librmcs_core.so librmcs_executor.so libserial.so; do |
191 | | - if [[ ! -f "${lib_dir}/${lib}" ]]; then |
192 | | - echo "Missing library: ${lib_dir}/${lib}" >&2 |
193 | | - exit 1 |
194 | | - fi |
195 | | - readelf -h "${lib_dir}/${lib}" | grep -q "Machine:.*${EXPECTED_MACHINE}" |
196 | | - done |
197 | | - ' |
198 | | -
|
199 | 155 | - name: Export digest (Develop Full) |
200 | 156 | run: | |
201 | 157 | mkdir -p "${{ runner.temp }}/digests-develop-full" |
@@ -233,11 +189,90 @@ jobs: |
233 | 189 | if-no-files-found: error |
234 | 190 | retention-days: 1 |
235 | 191 |
|
236 | | - merge: |
| 192 | + verify_images: |
| 193 | + needs: build_images |
| 194 | + strategy: |
| 195 | + fail-fast: false |
| 196 | + matrix: |
| 197 | + include: |
| 198 | + - arch: amd64 |
| 199 | + runner: ubuntu-latest |
| 200 | + cross_target: arm64 |
| 201 | + cross_triplet: aarch64-linux-gnu |
| 202 | + expected_machine: AArch64 |
| 203 | + - arch: arm64 |
| 204 | + runner: ubuntu-24.04-arm |
| 205 | + cross_target: amd64 |
| 206 | + cross_triplet: x86_64-linux-gnu |
| 207 | + expected_machine: X86-64 |
| 208 | + runs-on: ${{ matrix.runner }} |
| 209 | + steps: |
| 210 | + - name: Checkout repository |
| 211 | + uses: actions/checkout@v4 |
| 212 | + |
| 213 | + - name: Log in to Docker Hub |
| 214 | + uses: docker/login-action@v3 |
| 215 | + with: |
| 216 | + username: ${{ secrets.DOCKERHUB_USERNAME }} |
| 217 | + password: ${{ secrets.DOCKERHUB_TOKEN }} |
| 218 | + |
| 219 | + - name: Download digests (Develop Full) |
| 220 | + uses: actions/download-artifact@v7 |
| 221 | + with: |
| 222 | + path: ${{ runner.temp }}/digests/develop-full |
| 223 | + pattern: digests-develop-full-* |
| 224 | + merge-multiple: true |
| 225 | + |
| 226 | + - name: Resolve develop-full digest |
| 227 | + id: resolve |
| 228 | + run: | |
| 229 | + set -euo pipefail |
| 230 | + digest_file="${{ runner.temp }}/digests/develop-full/${{ matrix.arch }}.digest" |
| 231 | + image_digest="$(cat "${digest_file}")" |
| 232 | + echo "image_digest=${image_digest}" >> "$GITHUB_OUTPUT" |
| 233 | +
|
| 234 | + - name: Smoke test (cross build + readelf) |
| 235 | + env: |
| 236 | + IMAGE_DIGEST: ${{ steps.resolve.outputs.image_digest }} |
| 237 | + CROSS_TARGET: ${{ matrix.cross_target }} |
| 238 | + CROSS_TRIPLET: ${{ matrix.cross_triplet }} |
| 239 | + EXPECTED_MACHINE: ${{ matrix.expected_machine }} |
| 240 | + run: | |
| 241 | + set -euo pipefail |
| 242 | + uid="$(id -u)" |
| 243 | + gid="$(id -g)" |
| 244 | + docker run --rm \ |
| 245 | + --platform "linux/${{ matrix.arch }}" \ |
| 246 | + --user "${uid}:${gid}" \ |
| 247 | + -e HOME=/tmp/rmcs-home \ |
| 248 | + -e RMCS_PATH=/workspaces/RMCS \ |
| 249 | + -e CROSS_TARGET="${CROSS_TARGET}" \ |
| 250 | + -e CROSS_TRIPLET="${CROSS_TRIPLET}" \ |
| 251 | + -e EXPECTED_MACHINE="${EXPECTED_MACHINE}" \ |
| 252 | + -v "$PWD:/workspaces/RMCS" \ |
| 253 | + -w /workspaces/RMCS \ |
| 254 | + "${{ env.REGISTRY_IMAGE_DEVELOP }}@${IMAGE_DIGEST}" \ |
| 255 | + bash -lc ' |
| 256 | + set -euo pipefail |
| 257 | + mkdir -p "${HOME}" |
| 258 | + test -d "/opt/sysroots/${CROSS_TARGET}" |
| 259 | + command -v "${CROSS_TRIPLET}-gcc" |
| 260 | + command -v "${CROSS_TRIPLET}-g++" |
| 261 | + ./.script/build-rmcs-cross --target-arch "${CROSS_TARGET}" --packages-up-to rmcs_executor |
| 262 | + lib_path="/workspaces/RMCS/rmcs_ws/install-cross-${CROSS_TARGET}/lib/librmcs_executor.so" |
| 263 | + if [[ ! -f "${lib_path}" ]]; then |
| 264 | + echo "Missing library: ${lib_path}" >&2 |
| 265 | + exit 1 |
| 266 | + fi |
| 267 | + readelf -h "${lib_path}" | grep -q "Machine:.*${EXPECTED_MACHINE}" |
| 268 | + ' |
| 269 | +
|
| 270 | + promote: |
237 | 271 | runs-on: ubuntu-latest |
238 | 272 | needs: |
239 | 273 | - build_base |
240 | 274 | - build_images |
| 275 | + - verify_images |
241 | 276 | steps: |
242 | 277 | - name: Download digests (Base) |
243 | 278 | uses: actions/download-artifact@v7 |
|
0 commit comments