mirror of
https://github.com/mudler/LocalAI.git
synced 2026-07-31 10:28:43 -04:00
Measured over the week to 2026-07-30, 97% of CI wall-clock is queueing and 3% is execution: a median 5-hour queue against a 4-20 minute median job. With the queue saturated, throughput is concurrency divided by service time, so cutting execution time raises the drain rate directly. Two steps stood out as paying nothing for what they cost. test.yml: drop the free-disk-space step (~3.1min per run, ~22 h/week). That action exists to make room for docker buildx layers and this job runs no buildx step. It was also sized for a `make test` that downloaded multi-GB GGUF/whisper fixtures and built llama-cpp/whisper/stablediffusion-ggml; the test-suite reorg moved all of that into tests/e2e-backends and tests/e2e-aio, as the Makefile test target already records. Its tool-cache:true wipe was additionally deleting /opt/hostedtoolcache, forcing setup-go and setup-node to re-download toolchains that ship preinstalled on the runner. build-test.yaml: build only the host target on pull_request. The three-platform cross-compile (linux/amd64, linux/arm64, darwin/arm64) is the bulk of that job's ~6.6min median, ~47 h/week, and nothing consumes a PR's binaries. goreleaser's --single-target still runs every before-hook (protogen-go, react-ui, go mod tidy), so the "is the release build broken" signal is unchanged. master pushes and tags keep building all three. Also record why the Linux Go workflows pass cache: false to actions/setup-go, since it reads as an oversight and is not. Set up Go has a median of 11 seconds on those runners, so there is nothing to win, and the repo already sits at GitHub's 10 GB Actions cache ceiling with 31 entries, where each setup-go entry is 222-375 MB on Linux and up to 1.4 GB on macOS. Re-enabling it would evict something that is earning its space. 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>
92 lines
3.0 KiB
YAML
92 lines
3.0 KiB
YAML
name: Build test
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- master
|
|
pull_request:
|
|
# GoReleaser and the darwin launcher take no gallery, docs or markdown
|
|
# input, so a diff confined to these paths cannot change either binary.
|
|
# The darwin job matters here: macOS is the scarcest runner class.
|
|
# See .agents/ci-caching.md.
|
|
paths-ignore:
|
|
- 'gallery/**'
|
|
- 'docs/**'
|
|
- 'examples/**'
|
|
- '**/*.md'
|
|
|
|
# Supersede an in-flight run when a PR gets a new push. Keyed on the PR number
|
|
# so every push to the same PR shares a group; on a master push the key falls
|
|
# back to github.sha (unique per commit) and cancel-in-progress is false, so
|
|
# master runs never cancel each other -- each commit is built on its own.
|
|
concurrency:
|
|
group: ci-build-test-${{ github.event.pull_request.number || github.sha }}-${{ github.repository }}
|
|
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
|
|
|
jobs:
|
|
build-test:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v7
|
|
with:
|
|
fetch-depth: 0
|
|
- name: Set up Go
|
|
uses: actions/setup-go@v5
|
|
with:
|
|
go-version: 1.25
|
|
# A PR builds only the host target. The three-platform cross-compile
|
|
# (linux/amd64, linux/arm64, darwin/arm64) is the bulk of this job's
|
|
# ~6.6min median and no PR consumes the resulting binaries. The
|
|
# before-hooks (protogen-go, react-ui, go mod tidy) run either way, so the
|
|
# "is the release build broken" signal is unchanged. master and tags still
|
|
# build everything.
|
|
- name: Run GoReleaser
|
|
run: |
|
|
make ${{ github.event_name == 'pull_request' && 'dev-dist-single' || 'dev-dist' }}
|
|
launcher-build-darwin:
|
|
runs-on: macos-latest
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v7
|
|
with:
|
|
fetch-depth: 0
|
|
- name: Set up Go
|
|
uses: actions/setup-go@v5
|
|
with:
|
|
go-version: 1.25
|
|
- name: Build launcher for macOS ARM64
|
|
run: |
|
|
make build-launcher-darwin
|
|
ls -liah dist
|
|
- name: Upload macOS launcher artifacts
|
|
uses: actions/upload-artifact@v7
|
|
with:
|
|
name: launcher-macos
|
|
path: dist/
|
|
retention-days: 30
|
|
|
|
launcher-build-linux:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v7
|
|
with:
|
|
fetch-depth: 0
|
|
- name: Configure apt mirror on runner
|
|
uses: ./.github/actions/configure-apt-mirror
|
|
- name: Set up Go
|
|
uses: actions/setup-go@v5
|
|
with:
|
|
go-version: 1.25
|
|
- name: Build launcher for Linux
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install golang gcc libgl1-mesa-dev xorg-dev libxkbcommon-dev
|
|
make build-launcher-linux
|
|
- name: Upload Linux launcher artifacts
|
|
uses: actions/upload-artifact@v7
|
|
with:
|
|
name: launcher-linux
|
|
path: local-ai-launcher-linux.tar.xz
|
|
retention-days: 30 |