fix(diag): flag a tree that is behind its remote, and name what is mi… #71
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: install-matrix | |
| # Verifies the SYCL Containerfile builds across its documented | |
| # backend matrix (NVIDIA / AMD / Intel / CPU). Each job exercises a | |
| # different ACPP_TARGETS configuration via the existing production | |
| # Containerfile — the same one users build via scripts/build-container.sh. | |
| # | |
| # No actual accelerator hardware needed for the build; nvcc / hipcc | |
| # / icx etc. all compile fine without a runtime device present. The | |
| # assertion is "the container builds clean and `xchplot2 --help` | |
| # returns 0" — the runtime path is exercised by the parity tests | |
| # under the existing CI workflow. | |
| on: | |
| pull_request: | |
| paths-ignore: | |
| # Docs & metadata | |
| - '**.md' | |
| - 'docs/**' | |
| - 'LICENSE*' | |
| - '.gitignore' | |
| - '.gitattributes' | |
| - '.editorconfig' | |
| - '.markdownlint*' | |
| - '.github/dependabot.yml' | |
| - '.github/ISSUE_TEMPLATE/**' | |
| - '.github/PULL_REQUEST_TEMPLATE*' | |
| # Runtime scripts not exercised by the install matrix. | |
| # scripts/install-deps.sh IS used inside Containerfile RUNs, | |
| # so it's NOT in this list. | |
| - 'scripts/test/**' | |
| - 'scripts/test-multi-gpu.sh' | |
| - 'scripts/build-container.sh' | |
| - 'scripts/install-container-deps.sh' | |
| # docker-compose isn't exercised by CI (we drive podman build | |
| # directly). | |
| - 'compose.yaml' | |
| # Sibling CI workflows. | |
| - '.github/workflows/ci.yml' | |
| - '.github/workflows/arch-matrix.yml' | |
| push: | |
| branches: [main] | |
| paths-ignore: | |
| - '**.md' | |
| - 'docs/**' | |
| - 'LICENSE*' | |
| - '.gitignore' | |
| - '.gitattributes' | |
| - '.editorconfig' | |
| - '.markdownlint*' | |
| - '.github/dependabot.yml' | |
| - '.github/ISSUE_TEMPLATE/**' | |
| - '.github/PULL_REQUEST_TEMPLATE*' | |
| - 'scripts/test/**' | |
| - 'scripts/test-multi-gpu.sh' | |
| - 'scripts/build-container.sh' | |
| - 'scripts/install-container-deps.sh' | |
| - 'compose.yaml' | |
| - '.github/workflows/ci.yml' | |
| - '.github/workflows/arch-matrix.yml' | |
| permissions: | |
| contents: read | |
| jobs: | |
| build: | |
| name: build / ${{ matrix.target.name }} | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| target: | |
| # NVIDIA — default base, CUDA 13.x for Turing+; sets sm_75 so | |
| # we don't trip the preflight that bans pre-Turing on 13.x. | |
| - name: nvidia-cuda13 | |
| extra_args: "--build-arg CUDA_ARCH=75" | |
| # NVIDIA Pascal (sm_61) — must use the 12.9 base because | |
| # CUDA 13.x dropped Pascal codegen. Catches preflight | |
| # regressions. | |
| - name: nvidia-cuda12-pascal | |
| extra_args: >- | |
| --build-arg BASE_DEVEL=docker.io/nvidia/cuda:12.9.1-devel-ubuntu24.04 | |
| --build-arg BASE_RUNTIME=docker.io/nvidia/cuda:12.9.1-devel-ubuntu24.04 | |
| --build-arg CUDA_ARCH=61 | |
| # CPU-only — AdaptiveCpp OpenMP backend. No CUDA toolkit in | |
| # the runtime image; build still wants cuda_fp16.h headers, | |
| # supplied by INSTALL_CUDA_HEADERS=1. | |
| - name: cpu-omp | |
| extra_args: >- | |
| --build-arg BASE_DEVEL=docker.io/ubuntu:24.04 | |
| --build-arg BASE_RUNTIME=docker.io/ubuntu:24.04 | |
| --build-arg ACPP_TARGETS=omp | |
| --build-arg XCHPLOT2_BUILD_CUDA=OFF | |
| --build-arg INSTALL_CUDA_HEADERS=1 | |
| # AMD ROCm — AdaptiveCpp generic (SSCP JIT). Two reasons for | |
| # `generic` instead of `hip:gfxNNNN` AOT compilation in CI: | |
| # | |
| # 1. rocm/dev-ubuntu-24.04:latest ships device bitcode | |
| # (ocml.bc) built with rolling LLVM 22+. AdaptiveCpp's | |
| # install-deps.sh pins clang/lld to LLVM 18 for | |
| # compatibility with its own build. The LLVM-18 clang | |
| # can't link bitcode produced by LLVM-22 (attribute | |
| # kind 102 added in LLVM 22) — hard build error. | |
| # | |
| # 2. CI has no AMD GPU anyway, so AOT-for-gfxNNNN doesn't | |
| # give us runtime signal. SSCP defers device codegen | |
| # to runtime, lets the build prove "the SYCL TUs | |
| # compile against ROCm headers + libs" which is the | |
| # meaningful CI assertion. | |
| # | |
| # Same pattern the README recommends for RDNA1 cards | |
| # (gfx101x) and matches the Intel oneAPI entry below. | |
| - name: amd-rocm | |
| extra_args: >- | |
| --build-arg BASE_DEVEL=docker.io/rocm/dev-ubuntu-24.04:latest | |
| --build-arg BASE_RUNTIME=docker.io/rocm/dev-ubuntu-24.04:latest | |
| --build-arg ACPP_TARGETS=generic | |
| --build-arg XCHPLOT2_BUILD_CUDA=OFF | |
| --build-arg INSTALL_CUDA_HEADERS=1 | |
| # Intel oneAPI — AdaptiveCpp generic (SSCP) → Level Zero. | |
| # README flags this path as experimental / not perf-tested; | |
| # CI's role is "the build still works", not "it runs well". | |
| - name: intel-oneapi | |
| extra_args: >- | |
| --build-arg BASE_DEVEL=docker.io/intel/oneapi-basekit:latest | |
| --build-arg BASE_RUNTIME=docker.io/intel/oneapi-runtime:latest | |
| --build-arg ACPP_TARGETS=generic | |
| --build-arg XCHPLOT2_BUILD_CUDA=OFF | |
| --build-arg INSTALL_CUDA_HEADERS=1 | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - name: podman build (${{ matrix.target.name }}) | |
| run: | | |
| podman build -t xchplot2-ci:${{ matrix.target.name }} \ | |
| ${{ matrix.target.extra_args }} \ | |
| -f Containerfile . | |
| - name: xchplot2 --help inside image | |
| run: | | |
| podman run --rm xchplot2-ci:${{ matrix.target.name }} \ | |
| xchplot2 devices 2>&1 | head -10 || true | |
| # `devices` may fail without a real GPU; that's fine — what | |
| # we check is the binary runs at all (no library-load errors | |
| # like missing libcudart, missing libacpp-rt, etc.) | |
| podman run --rm --entrypoint /bin/sh \ | |
| xchplot2-ci:${{ matrix.target.name }} \ | |
| -c 'which xchplot2 && ldd $(which xchplot2) | head -20' |