jobs:
linux:
- runs-on: ubuntu-slim
+ runs-on: [self-hosted, Linux, CPU]
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
- - name: Install dependencies
- run: |
- sudo apt update
- sudo apt install -y build-essential tcl cmake
-
- name: Build
run: |
PREFIX="$(pwd)"/inst
LLAMA_LOG_TIMESTAMPS: 1
jobs:
- determine-tag:
- name: Determine tag name
- runs-on: [self-hosted, fast]
- outputs:
- tag_name: ${{ steps.tag.outputs.name }}
- steps:
- - name: Clone
- uses: actions/checkout@v6
- with:
- fetch-depth: 0
- - name: Determine tag name
- id: tag
- uses: ./.github/actions/get-tag-name
- env:
- BRANCH_NAME: ${{ github.head_ref || github.ref_name }}
-
ggml-ci-nvidia-cuda:
- needs: determine-tag
runs-on: [self-hosted, Linux, NVIDIA]
steps:
- name: Test
id: ggml-ci
- env:
- HF_UI_VERSION: ${{ needs.determine-tag.outputs.tag_name }}
run: |
nvidia-smi
GG_BUILD_CUDA=1 bash ./ci/run.sh ~/results/llama.cpp ~/mnt/llama.cpp
ggml-ci-nvidia-vulkan-cm:
- needs: determine-tag
runs-on: [self-hosted, Linux, NVIDIA]
steps:
- name: Test
id: ggml-ci
- env:
- HF_UI_VERSION: ${{ needs.determine-tag.outputs.tag_name }}
run: |
vulkaninfo --summary
GG_BUILD_VULKAN=1 GGML_VK_DISABLE_COOPMAT2=1 bash ./ci/run.sh ~/results/llama.cpp ~/mnt/llama.cpp
ggml-ci-nvidia-vulkan-cm2:
- needs: determine-tag
runs-on: [self-hosted, Linux, NVIDIA, COOPMAT2]
steps:
- name: Test
id: ggml-ci
- env:
- HF_UI_VERSION: ${{ needs.determine-tag.outputs.tag_name }}
run: |
vulkaninfo --summary
GG_BUILD_VULKAN=1 bash ./ci/run.sh ~/results/llama.cpp ~/mnt/llama.cpp
ggml-ci-nvidia-webgpu:
- needs: determine-tag
runs-on: [self-hosted, Linux, NVIDIA, X64]
steps:
# TODO: provision AMX-compatible machine
#ggml-ci-cpu-amx:
- # needs: determine-tag
# runs-on: [self-hosted, Linux, CPU, AMX]
# steps:
# TODO: provision AMD GPU machine
# ggml-ci-amd-vulkan:
- # needs: determine-tag
# runs-on: [self-hosted, Linux, AMD]
# steps:
# TODO: provision AMD GPU machine
# ggml-ci-amd-rocm:
- # needs: determine-tag
# runs-on: [self-hosted, Linux, AMD]
# steps:
# GG_BUILD_ROCM=1 GG_BUILD_AMDGPU_TARGETS="gfx1101" bash ./ci/run.sh ~/results/llama.cpp ~/mnt/llama.cpp
ggml-ci-mac-metal:
- needs: determine-tag
runs-on: [self-hosted, macOS, ARM64]
steps:
- name: Test
id: ggml-ci
- env:
- HF_UI_VERSION: ${{ needs.determine-tag.outputs.tag_name }}
run: |
GG_BUILD_METAL=1 bash ./ci/run.sh ~/results/llama.cpp ~/mnt/llama.cpp
ggml-ci-mac-webgpu:
- needs: determine-tag
runs-on: [self-hosted, macOS, ARM64]
steps:
- name: Test
id: ggml-ci
- env:
- HF_UI_VERSION: ${{ needs.determine-tag.outputs.tag_name }}
run: |
GG_BUILD_WEBGPU=1 GG_BUILD_WEBGPU_DAWN_PREFIX="$GITHUB_WORKSPACE/dawn" \
bash ./ci/run.sh ~/results/llama.cpp ~/mnt/llama.cpp
ggml-ci-mac-vulkan:
- needs: determine-tag
runs-on: [self-hosted, macOS, ARM64]
steps:
- name: Test
id: ggml-ci
- env:
- HF_UI_VERSION: ${{ needs.determine-tag.outputs.tag_name }}
run: |
vulkaninfo --summary
GG_BUILD_VULKAN=1 bash ./ci/run.sh ~/results/llama.cpp ~/mnt/llama.cpp
ggml-ci-linux-intel-vulkan:
- needs: determine-tag
runs-on: [self-hosted, Linux, Intel]
steps:
- name: Test
id: ggml-ci
- env:
- HF_UI_VERSION: ${{ needs.determine-tag.outputs.tag_name }}
run: |
vulkaninfo --summary
GG_BUILD_VULKAN=1 bash ./ci/run.sh ~/results/llama.cpp ~/mnt/llama.cpp
ggml-ci-win-intel-vulkan:
- needs: determine-tag
runs-on: [self-hosted, Windows, X64, Intel]
steps:
MSYSTEM: UCRT64
CHERE_INVOKING: 1
PATH: C:\msys64\ucrt64\bin;C:\msys64\usr\bin;C:\Windows\System32;${{ env.PATH }}
- HF_UI_VERSION: ${{ needs.determine-tag.outputs.tag_name }}
run: |
vulkaninfo --summary
# Skip python related tests with GG_BUILD_LOW_PERF=1 since Windows MSYS2 UCRT64 currently fails to create
LLAMA_FATAL_WARNINGS=OFF GG_BUILD_NINJA=1 GG_BUILD_VULKAN=1 GG_BUILD_LOW_PERF=1 ./ci/run.sh ./results/llama.cpp ./mnt/llama.cpp
ggml-ci-intel-openvino-gpu-low-perf:
- needs: determine-tag
runs-on: [self-hosted, Linux, Intel, OpenVINO]
concurrency:
- name: Test
id: ggml-ci
- env:
- HF_UI_VERSION: ${{ needs.determine-tag.outputs.tag_name }}
run: |
source ./openvino_toolkit/setupvars.sh
GG_BUILD_OPENVINO=1 GGML_OPENVINO_DEVICE=GPU GG_BUILD_LOW_PERF=1 bash ./ci/run.sh ~/results/llama.cpp ~/mnt/llama.cpp
ggml-ci-arm64-cpu-low-perf:
- needs: determine-tag
- runs-on: [self-hosted, Linux, ARM64]
+ runs-on: [self-hosted, Linux, ARM64, CPU]
steps:
- name: Clone
LLAMA_ARG_THREADS=$(nproc) GG_BUILD_LOW_PERF=1 bash ./ci/run.sh ~/results/llama.cpp ~/mnt/llama.cpp
ggml-ci-arm64-cpu-high-perf:
- needs: determine-tag
- runs-on: [self-hosted, Linux, ARM64]
+ runs-on: [self-hosted, Linux, ARM64, CPU]
steps:
- name: Clone
# if we resolve this, we should be able to offload these jobs to the self-hosted runners
#
# ggml-ci-arm64-cpu-high-perf-sve:
-# needs: determine-tag
-# runs-on: [self-hosted, Linux, NVIDIA, ARM64]
+# runs-on: [self-hosted, Linux, ARM64, CPU]
#
# steps:
# - name: Clone
# LLAMA_ARG_THREADS=$(nproc) GG_BUILD_NO_BF16=1 GG_BUILD_EXTRA_TESTS_0=1 bash ./ci/run.sh ~/results/llama.cpp ~/mnt/llama.cpp
#
# ggml-ci-arm64-cpu-kleidiai:
-# needs: determine-tag
-# runs-on: [self-hosted, Linux, NVIDIA, ARM64]
+# runs-on: [self-hosted, Linux, ARM64, CPU]
#
# steps:
# - name: Clone
jobs:
check-vendor:
- runs-on: ubuntu-slim
+ runs-on: [self-hosted, fast]
steps:
- name: Checkout
jobs:
model-naming:
- runs-on: ubuntu-slim
+ runs-on: [self-hosted, fast]
steps:
- uses: actions/checkout@v6
- name: Check model naming conventions
jobs:
editorconfig:
- runs-on: ubuntu-slim
+ runs-on: [self-hosted, fast]
steps:
- uses: actions/checkout@v6
- uses: editorconfig-checker/action-editorconfig-checker@840e866d93b8e032123c23bac69dece044d4d84c # v2.2.0
jobs:
pre-tokenizer-hashes:
- runs-on: ubuntu-slim
+ runs-on: [self-hosted, fast]
steps:
- name: Checkout repository
jobs:
python-check-requirements:
- runs-on: ubuntu-slim
+ runs-on: [self-hosted, CPU, fast]
name: check-requirements
steps:
- name: Check out source repository
jobs:
flake8-lint:
- runs-on: ubuntu-slim
+ runs-on: [self-hosted, fast]
name: Lint
steps:
- name: Check out source repository
jobs:
python-type-check:
- runs-on: ubuntu-slim
+ runs-on: [self-hosted, fast]
name: python type-check
steps:
- name: Check out source repository
jobs:
build:
- name: Build static output
- runs-on: ubuntu-slim
+ runs-on: [self-hosted, fast]
env:
BRANCH_NAME: ${{ github.head_ref || github.ref_name }}
+++ /dev/null
-name: CI (UI)
-
-on:
- workflow_dispatch:
- inputs:
- sha:
- description: 'Commit SHA1 to build'
- required: false
- type: string
- push:
- branches:
- - master
- paths: [
- '.github/workflows/ui-ci.yml',
- 'tools/ui/**.*',
- 'tools/server/tests/**.*'
- ]
- pull_request:
- types: [opened, synchronize, reopened]
- paths: [
- '.github/workflows/ui-ci.yml',
- 'tools/ui/**.*',
- 'tools/server/tests/**.*'
- ]
-
-env:
- LLAMA_LOG_COLORS: 1
- LLAMA_LOG_PREFIX: 1
- LLAMA_LOG_TIMESTAMPS: 1
- LLAMA_LOG_VERBOSITY: 10
-
-concurrency:
- group: ${{ github.workflow }}-${{ github.ref }}-${{ github.head_ref || github.run_id }}
- cancel-in-progress: true
-
-jobs:
- ui-build:
- name: Build static output
- uses: ./.github/workflows/ui-build.yml
-
- ui-checks:
- name: UI Checks
- needs: ui-build
- runs-on: ubuntu-latest
- continue-on-error: true
- steps:
- - name: Checkout code
- uses: actions/checkout@v6
- with:
- fetch-depth: 0
- ref: ${{ github.event.inputs.sha || github.event.pull_request.head.sha || github.sha || github.head_ref || github.ref_name }}
-
- - name: Setup Node.js
- id: node
- uses: actions/setup-node@v6
- with:
- node-version: "24"
- cache: "npm"
- cache-dependency-path: "tools/ui/package-lock.json"
-
- - name: Install dependencies
- id: setup
- if: ${{ steps.node.conclusion == 'success' }}
- run: npm ci
- working-directory: tools/ui
-
- - name: Run type checking
- if: ${{ always() && steps.setup.conclusion == 'success' }}
- run: npm run check
- working-directory: tools/ui
-
- - name: Run linting
- if: ${{ always() && steps.setup.conclusion == 'success' }}
- run: npm run lint
- working-directory: tools/ui
-
- - name: Install Playwright browsers
- id: playwright
- if: ${{ always() && steps.setup.conclusion == 'success' }}
- run: npx playwright install --with-deps
- working-directory: tools/ui
-
- - name: Run Client tests
- if: ${{ always() && steps.playwright.conclusion == 'success' }}
- run: npm run test:client
- working-directory: tools/ui
-
- - name: Run Unit tests
- if: ${{ always() && steps.playwright.conclusion == 'success' }}
- run: npm run test:unit
- working-directory: tools/ui
-
- e2e-tests:
- name: E2E Tests
- needs: ui-build
- runs-on: ubuntu-latest
- steps:
- - name: Checkout code
- uses: actions/checkout@v6
- with:
- fetch-depth: 0
- ref: ${{ github.event.inputs.sha || github.event.pull_request.head.sha || github.sha || github.head_ref || github.ref_name }}
-
- - name: Setup Node.js
- id: node
- uses: actions/setup-node@v6
- with:
- node-version: "24"
- cache: "npm"
- cache-dependency-path: "tools/ui/package-lock.json"
-
- - name: Install dependencies
- id: setup
- if: ${{ steps.node.conclusion == 'success' }}
- run: npm ci
- working-directory: tools/ui
-
- - name: Build application
- if: ${{ always() && steps.setup.conclusion == 'success' }}
- run: npm run build
- working-directory: tools/ui
-
- - name: Install Playwright browsers
- id: playwright
- if: ${{ always() && steps.setup.conclusion == 'success' }}
- run: npx playwright install --with-deps
- working-directory: tools/ui
-
- - name: Build Storybook
- if: ${{ always() && steps.playwright.conclusion == 'success' }}
- run: npm run build-storybook
- working-directory: tools/ui
-
- - name: Run UI tests
- if: ${{ always() && steps.playwright.conclusion == 'success' }}
- run: npm run test:ui -- --testTimeout=60000
- working-directory: tools/ui
-
- - name: Run E2E tests
- if: ${{ always() && steps.playwright.conclusion == 'success' }}
- run: npm run test:e2e
- working-directory: tools/ui
--- /dev/null
+name: UI (self-hosted)
+
+# these are the same as ui.yml, but with self-hosted runners
+# the runners come with pre-installed Playwright browsers version: 1.56.1
+# the jobs are much lighter because they don't need to install node and playwright browsers
+
+on:
+ workflow_dispatch:
+ inputs:
+ sha:
+ description: 'Commit SHA1 to build'
+ required: false
+ type: string
+ push:
+ branches:
+ - master
+ paths: [
+ '.github/workflows/ui-self-hosted.yml',
+ '.github/workflows/ui-build.yml',
+ 'tools/ui/**.*',
+ 'tools/server/tests/**.*'
+ ]
+ pull_request:
+ types: [opened, synchronize, reopened]
+ paths: [
+ '.github/workflows/ui-self-hosted.yml',
+ '.github/workflows/ui-build.yml',
+ 'tools/ui/**.*',
+ 'tools/server/tests/**.*'
+ ]
+
+env:
+ LLAMA_LOG_COLORS: 1
+ LLAMA_LOG_PREFIX: 1
+ LLAMA_LOG_TIMESTAMPS: 1
+ LLAMA_LOG_VERBOSITY: 10
+
+concurrency:
+ group: ${{ github.workflow }}-${{ github.ref }}-${{ github.head_ref || github.run_id }}
+ cancel-in-progress: true
+
+jobs:
+ ui-build:
+ name: Build static output
+ uses: ./.github/workflows/ui-build.yml
+
+ ui-checks:
+ name: Checks
+ needs: ui-build
+ runs-on: [self-hosted, PLAYWRIGHT]
+ continue-on-error: true
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v6
+ with:
+ fetch-depth: 0
+ ref: ${{ github.event.inputs.sha || github.event.pull_request.head.sha || github.sha || github.head_ref || github.ref_name }}
+
+ - name: Install dependencies
+ id: setup
+ run: npm ci
+ working-directory: tools/ui
+
+ - name: Run type checking
+ if: ${{ always() && steps.setup.conclusion == 'success' }}
+ run: npm run check
+ working-directory: tools/ui
+
+ - name: Run linting
+ if: ${{ always() && steps.setup.conclusion == 'success' }}
+ run: npm run lint
+ working-directory: tools/ui
+
+ - name: Run Client tests
+ if: ${{ always() }}
+ run: npm run test:client
+ working-directory: tools/ui
+
+ - name: Run Unit tests
+ if: ${{ always() }}
+ run: npm run test:unit
+ working-directory: tools/ui
+
+ e2e-tests:
+ name: E2E Tests
+ needs: ui-build
+ runs-on: [self-hosted, PLAYWRIGHT]
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v6
+ with:
+ fetch-depth: 0
+ ref: ${{ github.event.inputs.sha || github.event.pull_request.head.sha || github.sha || github.head_ref || github.ref_name }}
+
+ - name: Install dependencies
+ id: setup
+ run: npm ci
+ working-directory: tools/ui
+
+ - name: Build application
+ if: ${{ always() && steps.setup.conclusion == 'success' }}
+ run: npm run build
+ working-directory: tools/ui
+
+ - name: Build Storybook
+ if: ${{ always() }}
+ run: npm run build-storybook
+ working-directory: tools/ui
+
+ - name: Run UI tests
+ if: ${{ always() }}
+ run: npm run test:ui -- --testTimeout=60000
+ working-directory: tools/ui
+
+ - name: Run E2E tests
+ if: ${{ always() }}
+ run: npm run test:e2e
+ working-directory: tools/ui
--- /dev/null
+name: UI
+
+on:
+ workflow_dispatch:
+ inputs:
+ sha:
+ description: 'Commit SHA1 to build'
+ required: false
+ type: string
+ push:
+ branches:
+ - master
+ paths: [
+ '.github/workflows/ui.yml',
+ '.github/workflows/ui-build.yml',
+ 'tools/ui/**.*',
+ 'tools/server/tests/**.*'
+ ]
+ pull_request:
+ types: [opened, synchronize, reopened]
+ paths: [
+ '.github/workflows/ui.yml',
+ '.github/workflows/ui-build.yml',
+ 'tools/ui/**.*',
+ 'tools/server/tests/**.*'
+ ]
+
+env:
+ LLAMA_LOG_COLORS: 1
+ LLAMA_LOG_PREFIX: 1
+ LLAMA_LOG_TIMESTAMPS: 1
+ LLAMA_LOG_VERBOSITY: 10
+
+concurrency:
+ group: ${{ github.workflow }}-${{ github.ref }}-${{ github.head_ref || github.run_id }}
+ cancel-in-progress: true
+
+jobs:
+ ui-build:
+ name: Build static output
+ uses: ./.github/workflows/ui-build.yml
+
+ ui-checks:
+ name: Checks
+ needs: ui-build
+ runs-on: ubuntu-latest
+ continue-on-error: true
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v6
+ with:
+ fetch-depth: 0
+ ref: ${{ github.event.inputs.sha || github.event.pull_request.head.sha || github.sha || github.head_ref || github.ref_name }}
+
+ - name: Setup Node.js
+ id: node
+ uses: actions/setup-node@v6
+ with:
+ node-version: "24"
+ cache: "npm"
+ cache-dependency-path: "tools/ui/package-lock.json"
+
+ - name: Install dependencies
+ id: setup
+ if: ${{ steps.node.conclusion == 'success' }}
+ run: npm ci
+ working-directory: tools/ui
+
+ - name: Run type checking
+ if: ${{ always() && steps.setup.conclusion == 'success' }}
+ run: npm run check
+ working-directory: tools/ui
+
+ - name: Run linting
+ if: ${{ always() && steps.setup.conclusion == 'success' }}
+ run: npm run lint
+ working-directory: tools/ui
+
+ - name: Install Playwright browsers
+ id: playwright
+ if: ${{ always() && steps.setup.conclusion == 'success' }}
+ run: npx playwright install --with-deps
+ working-directory: tools/ui
+
+ - name: Run Client tests
+ if: ${{ always() && steps.playwright.conclusion == 'success' }}
+ run: npm run test:client
+ working-directory: tools/ui
+
+ - name: Run Unit tests
+ if: ${{ always() && steps.playwright.conclusion == 'success' }}
+ run: npm run test:unit
+ working-directory: tools/ui
+
+ e2e-tests:
+ name: E2E Tests
+ needs: ui-build
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v6
+ with:
+ fetch-depth: 0
+ ref: ${{ github.event.inputs.sha || github.event.pull_request.head.sha || github.sha || github.head_ref || github.ref_name }}
+
+ - name: Setup Node.js
+ id: node
+ uses: actions/setup-node@v6
+ with:
+ node-version: "24"
+ cache: "npm"
+ cache-dependency-path: "tools/ui/package-lock.json"
+
+ - name: Install dependencies
+ id: setup
+ if: ${{ steps.node.conclusion == 'success' }}
+ run: npm ci
+ working-directory: tools/ui
+
+ - name: Build application
+ if: ${{ always() && steps.setup.conclusion == 'success' }}
+ run: npm run build
+ working-directory: tools/ui
+
+ - name: Install Playwright browsers
+ id: playwright
+ if: ${{ always() && steps.setup.conclusion == 'success' }}
+ run: npx playwright install --with-deps
+ working-directory: tools/ui
+
+ - name: Build Storybook
+ if: ${{ always() && steps.playwright.conclusion == 'success' }}
+ run: npm run build-storybook
+ working-directory: tools/ui
+
+ - name: Run UI tests
+ if: ${{ always() && steps.playwright.conclusion == 'success' }}
+ run: npm run test:ui -- --testTimeout=60000
+ working-directory: tools/ui
+
+ - name: Run E2E tests
+ if: ${{ always() && steps.playwright.conclusion == 'success' }}
+ run: npm run test:e2e
+ working-directory: tools/ui
on:
push:
paths:
+ - '.github/workflows/update-ops-docs.yml'
- 'docs/ops.md'
- 'docs/ops/**'
- 'scripts/create_ops_docs.py'
pull_request:
paths:
+ - '.github/workflows/update-ops-docs.yml'
- 'docs/ops.md'
- 'docs/ops/**'
- 'scripts/create_ops_docs.py'
jobs:
update-ops-docs:
- runs-on: ubuntu-slim
+ runs-on: [self-hosted, fast, ARM64]
steps:
- name: Checkout repository