mirror of
https://github.com/mudler/LocalAI.git
synced 2026-07-30 09:57:57 -04:00
The backend matrix path filter only matched files under a backend's own directory, so a change to shared build infrastructure rebuilt nothing at all: an empty matrix, every job green, and the change reaching no image. PR #10946 fixed scripts/build/package-gpu-libs.sh shipping a partial 4-of-8 cuDNN library set, which mixed versions with the venv's pip cuDNN and produced CUDNN_STATUS_SUBLIBRARY_VERSION_MISMATCH at inference time. It merged 1h48m after the weekly full-matrix cron had already run, so no backend image ever received the fix and nothing signalled that it had been un-shipped. Add a SHARED_BUILD_INPUTS table mapping each shared path to the narrowest set of matrix entries it can honestly invalidate, plus a generic rule for backend/Dockerfile.<x> (which each entry already names). A full matrix is 417 Linux + 56 Darwin builds, so package-gpu-libs.sh now rebuilds the 176 Python entries rather than everything. Unclassified files under scripts/build/ fall back to a full rebuild deliberately: over-building is recoverable, silently shipping nothing is not. Extract the filtering logic to scripts/lib/backend-filter.mjs so it can be unit-tested without bun, js-yaml or a GitHub API round-trip, and run those tests from the existing lint workflow via `make test-ci-scripts`. Assisted-by: Claude Code:claude-opus-4-8[1m] [Read] [Edit] [Bash] Signed-off-by: Ettore Di Giacinto <mudler@localai.io> Co-authored-by: Ettore Di Giacinto <mudler@localai.io>
69 lines
2.4 KiB
YAML
69 lines
2.4 KiB
YAML
---
|
|
name: 'lint'
|
|
|
|
on:
|
|
pull_request:
|
|
paths-ignore:
|
|
- 'docs/**'
|
|
- 'examples/**'
|
|
- 'README.md'
|
|
- '**/*.md'
|
|
push:
|
|
branches:
|
|
- master
|
|
|
|
concurrency:
|
|
group: ci-lint-${{ github.event.pull_request.number || github.sha }}-${{ github.repository }}
|
|
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
|
|
|
jobs:
|
|
golangci-lint:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v7
|
|
with:
|
|
# Full history so golangci-lint's new-from-merge-base can reach
|
|
# origin/master and compute the diff against it.
|
|
fetch-depth: 0
|
|
- uses: actions/setup-go@v5
|
|
with:
|
|
go-version: '1.26.x'
|
|
cache: false
|
|
- name: install golangci-lint
|
|
run: |
|
|
curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh \
|
|
| sh -s -- -b "$(go env GOPATH)/bin" v2.11.4
|
|
- name: generate grpc proto sources
|
|
# pkg/grpc/proto/*.go is generated, not checked in. Several packages
|
|
# import it, so without this step typecheck fails project-wide.
|
|
run: make protogen-go
|
|
- name: stub react-ui dist for go:embed
|
|
# core/http/app.go has //go:embed react-ui/dist/*; the glob needs at
|
|
# least one non-hidden entry to satisfy typecheck. We don't run
|
|
# `make react-ui` here because lint doesn't need the real bundle.
|
|
run: |
|
|
mkdir -p core/http/react-ui/dist
|
|
touch core/http/react-ui/dist/index.html
|
|
- name: lint
|
|
run: make lint
|
|
|
|
build-scripts:
|
|
# The image packaging scripts encode invariants that only surface inside a
|
|
# container build (a missing transitive dep, a partial cuDNN family). Their
|
|
# shell tests need nothing but bash + gcc + ldd, so run them on every PR
|
|
# rather than waiting on a multi-GB cross-arch backend image build.
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v7
|
|
- name: run packaging script tests
|
|
run: make test-build-scripts
|
|
|
|
# The backend matrix path filter fails silently: a miss emits an empty
|
|
# matrix, every job goes green, and the change reaches no image (#10946).
|
|
# Its tests need only node, so they ride along with this job.
|
|
- uses: actions/setup-node@v4
|
|
with:
|
|
node-version: '20'
|
|
- name: run CI script tests
|
|
run: make test-ci-scripts
|