mirror of
https://github.com/mudler/LocalAI.git
synced 2026-07-31 10:28:43 -04:00
Version-pin bumps dominate PR volume: 48 update/* PRs in the week to
2026-07-30, from 16 pins, each a two-line diff. bump_deps.yaml runs a 28-entry
matrix daily and opens one PR per moved pin; CRISPASR and the gallery checksum
produced one every day, ik-llama-cpp six in seven days. Almost all of them edit
nothing but a single backend/*/<name>/Makefile.
Neither image-pr.yml nor build-test.yaml can observe such a change. `make build`
is `go build ./cmd/local-ai`, GoReleaser builds that plus ./cmd/launcher, and
the core image's final stage ships only entrypoint.sh, healthcheck.sh and the
binary. The per-backend trees are copied into the builder but nothing in them
reaches the output. That is 7 + 3 jobs per bump PR that cannot fail for a reason
the diff caused, roughly 410 jobs a week.
Add backend/{cpp,go,python}/** to the paths-ignore of those two workflows. The
inputs that do reach the binary are deliberately outside those prefixes and so
still trigger a full run: backend/backend.proto (protogen-go), go.mod/go.sum
(the go mod tidy before-hook), and backend/Dockerfile.* .
Not applied to the workflows that genuinely read that tree:
test.yml TEST_PATHS names ./backend/go/{cloud-proxy,local-store,
valkey-store}/...
lint.yml .golangci.yml carries backend/-scoped rules
tests-e2e.yml the e2e suite drives real backends over gRPC
backend_pr.yml its whole job is rebuilding the changed backend
Simulated against the change shapes that occur in this repo. Pin bumps and
python requirement bumps skip; backend.proto, go.mod, a core Go edit, a
backend/Dockerfile edit and any mixed diff all still run, since paths-ignore
skips only when every changed file matches.
Assisted-by: Claude:opus-5 [claude-code]
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
Co-authored-by: Ettore Di Giacinto <mudler@localai.io>
124 lines
5.0 KiB
YAML
124 lines
5.0 KiB
YAML
---
|
|
name: 'build container images tests'
|
|
|
|
on:
|
|
pull_request:
|
|
# None of these seven image builds can observe a diff confined to these
|
|
# paths. Gallery metadata is parsed at runtime and never copied into an
|
|
# image; docs and markdown never enter one at all. Gallery content is
|
|
# still checked by yaml-check.yml and by
|
|
# core/gallery/variants_lint_test.go under 'tests'.
|
|
#
|
|
# backend/{cpp,go,python}/**: this workflow builds the core image, whose
|
|
# only compiled output is `make build` -> `go build ./cmd/local-ai`. The
|
|
# per-backend trees are copied into the builder but nothing in them reaches
|
|
# the binary or the final stage. backend/backend.proto is deliberately not
|
|
# listed: it feeds protogen-go and so does change the binary, and it does
|
|
# not live under any of these prefixes, so it still triggers a full run.
|
|
# See .agents/ci-caching.md.
|
|
paths-ignore:
|
|
- 'gallery/**'
|
|
- 'docs/**'
|
|
- 'examples/**'
|
|
- '**/*.md'
|
|
- 'backend/cpp/**'
|
|
- 'backend/go/**'
|
|
- 'backend/python/**'
|
|
|
|
concurrency:
|
|
group: ci-${{ github.event.pull_request.number || github.sha }}-${{ github.repository }}
|
|
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
|
|
|
jobs:
|
|
image-build:
|
|
uses: ./.github/workflows/image_build.yml
|
|
with:
|
|
tag-latest: ${{ matrix.tag-latest }}
|
|
tag-suffix: ${{ matrix.tag-suffix }}
|
|
build-type: ${{ matrix.build-type }}
|
|
cuda-major-version: ${{ matrix.cuda-major-version }}
|
|
cuda-minor-version: ${{ matrix.cuda-minor-version }}
|
|
platforms: ${{ matrix.platforms }}
|
|
platform-tag: ${{ matrix.platform-tag || '' }}
|
|
runs-on: ${{ matrix.runs-on }}
|
|
base-image: ${{ matrix.base-image }}
|
|
makeflags: ${{ matrix.makeflags }}
|
|
ubuntu-version: ${{ matrix.ubuntu-version }}
|
|
secrets:
|
|
dockerUsername: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
dockerPassword: ${{ secrets.DOCKERHUB_PASSWORD }}
|
|
quayUsername: ${{ secrets.LOCALAI_REGISTRY_USERNAME }}
|
|
quayPassword: ${{ secrets.LOCALAI_REGISTRY_PASSWORD }}
|
|
strategy:
|
|
# Pushing with all jobs in parallel
|
|
# eats the bandwidth of all the nodes
|
|
max-parallel: ${{ github.event_name != 'pull_request' && 4 || 8 }}
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- build-type: 'cublas'
|
|
cuda-major-version: "12"
|
|
cuda-minor-version: "8"
|
|
platforms: 'linux/amd64'
|
|
tag-latest: 'false'
|
|
tag-suffix: '-gpu-nvidia-cuda-12'
|
|
runs-on: 'ubuntu-latest'
|
|
base-image: "ubuntu:24.04"
|
|
makeflags: "--jobs=3 --output-sync=target"
|
|
ubuntu-version: '2404'
|
|
- build-type: 'cublas'
|
|
cuda-major-version: "13"
|
|
cuda-minor-version: "0"
|
|
platforms: 'linux/amd64'
|
|
tag-latest: 'false'
|
|
tag-suffix: '-gpu-nvidia-cuda-13'
|
|
runs-on: 'ubuntu-latest'
|
|
base-image: "ubuntu:24.04"
|
|
makeflags: "--jobs=3 --output-sync=target"
|
|
ubuntu-version: '2404'
|
|
- build-type: 'hipblas'
|
|
platforms: 'linux/amd64'
|
|
tag-latest: 'false'
|
|
tag-suffix: '-hipblas'
|
|
base-image: "rocm/dev-ubuntu-24.04:7.2.1"
|
|
runs-on: 'ubuntu-latest'
|
|
makeflags: "--jobs=3 --output-sync=target"
|
|
ubuntu-version: '2404'
|
|
- build-type: 'sycl'
|
|
platforms: 'linux/amd64'
|
|
tag-latest: 'false'
|
|
base-image: "intel/oneapi-basekit:2025.3.2-0-devel-ubuntu24.04"
|
|
tag-suffix: 'sycl'
|
|
runs-on: 'ubuntu-latest'
|
|
makeflags: "--jobs=3 --output-sync=target"
|
|
ubuntu-version: '2404'
|
|
- build-type: 'vulkan'
|
|
platforms: 'linux/amd64'
|
|
platform-tag: 'amd64'
|
|
tag-latest: 'false'
|
|
tag-suffix: '-vulkan-core'
|
|
runs-on: 'ubuntu-latest'
|
|
base-image: "ubuntu:24.04"
|
|
makeflags: "--jobs=4 --output-sync=target"
|
|
ubuntu-version: '2404'
|
|
- build-type: 'vulkan'
|
|
platforms: 'linux/arm64'
|
|
platform-tag: 'arm64'
|
|
tag-latest: 'false'
|
|
tag-suffix: '-vulkan-core'
|
|
runs-on: 'ubuntu-24.04-arm'
|
|
base-image: "ubuntu:24.04"
|
|
makeflags: "--jobs=4 --output-sync=target"
|
|
ubuntu-version: '2404'
|
|
- build-type: 'cublas'
|
|
cuda-major-version: "13"
|
|
cuda-minor-version: "0"
|
|
platforms: 'linux/arm64'
|
|
tag-latest: 'false'
|
|
tag-suffix: '-nvidia-l4t-arm64-cuda-13'
|
|
base-image: "ubuntu:24.04"
|
|
runs-on: 'ubuntu-24.04-arm'
|
|
makeflags: "--jobs=4 --output-sync=target"
|
|
skip-drivers: 'false'
|
|
ubuntu-version: '2404'
|
|
|