--- /dev/null
+name: "Install exe"
+description: "Download and install exe"
+inputs:
+ url:
+ description: "URL of the exe installer"
+ required: true
+ args:
+ description: "Installer arguments"
+ required: true
+ timeout:
+ description: "Timeout (in ms)"
+ required: false
+ default: "600000"
+
+runs:
+ using: "composite"
+ steps:
+ - name: Install EXE
+ shell: pwsh
+ run: |
+ $ErrorActionPreference = "Stop"
+ write-host "Downloading Installer EXE"
+ Invoke-WebRequest -Uri "${{ inputs.url }}" -OutFile "${env:RUNNER_TEMP}\temp-install.exe"
+ write-host "Installing"
+ $proc = Start-Process "${env:RUNNER_TEMP}\temp-install.exe" -ArgumentList '${{ inputs.args }}' -NoNewWindow -PassThru
+ $completed = $proc.WaitForExit(${{ inputs.timeout }})
+ if (-not $completed) {
+ Write-Error "Installer timed out. Killing the process"
+ $proc.Kill()
+ exit 1
+ }
+ if ($proc.ExitCode -ne 0) {
+ Write-Error "Installer failed with exit code $($proc.ExitCode)"
+ exit 1
+ }
+ write-host "Completed installation"
--- /dev/null
+name: "Linux - Setup SpacemiT Toolchain"
+description: "Setup SpacemiT Toolchain for Linux"
+inputs:
+ path:
+ description: "Installation path"
+ required: true
+ version:
+ description: "SpacemiT toolchain version"
+ required: true
+
+runs:
+ using: "composite"
+ steps:
+ - name: Setup SpacemiT Toolchain
+ id: setup
+ uses: ./.github/actions/unarchive-tar
+ with:
+ url: https://archive.spacemit.com/toolchain/spacemit-toolchain-linux-glibc-x86_64-v${{ inputs.version }}.tar.xz
+ path: ${{ inputs.path }}
+ strip: 1
--- /dev/null
+name: "Linux - Setup Vulkan SDK"
+description: "Setup Vulkan SDK for Linux"
+inputs:
+ path:
+ description: "Installation path"
+ required: true
+ version:
+ description: "Vulkan SDK version"
+ required: true
+
+runs:
+ using: "composite"
+ steps:
+ - name: Setup Vulkan SDK
+ id: setup
+ uses: ./.github/actions/unarchive-tar
+ with:
+ url: https://sdk.lunarg.com/sdk/download/${{ inputs.version }}/linux/vulkan_sdk.tar.xz
+ path: ${{ inputs.path }}
+ strip: 1
--- /dev/null
+name: "Unarchive tar"
+description: "Download and unarchive tar into directory"
+inputs:
+ url:
+ description: "URL of the tar archive"
+ required: true
+ path:
+ description: "Directory to unarchive into"
+ required: true
+ type:
+ description: "Compression type (tar option)"
+ required: false
+ default: "J"
+ strip:
+ description: "Strip components"
+ required: false
+ default: "0"
+
+runs:
+ using: "composite"
+ steps:
+ - name: Unarchive into directory
+ shell: bash
+ run: |
+ mkdir -p ${{ inputs.path }}
+ cd ${{ inputs.path }}
+ curl --no-progress-meter ${{ inputs.url }} | tar -${{ inputs.type }}x --strip-components=${{ inputs.strip }}
--- /dev/null
+name: "Windows - Setup ROCm"
+description: "Setup ROCm for Windows"
+inputs:
+ version:
+ description: "ROCm version"
+ required: true
+
+runs:
+ using: "composite"
+ steps:
+ - name: Setup ROCm
+ uses: ./.github/actions/install-exe
+ with:
+ url: https://download.amd.com/developer/eula/rocm-hub/AMD-Software-PRO-Edition-${{ inputs.version }}-WinSvr2022-For-HIP.exe
+ args: -install
--- /dev/null
+name: Build Actions Cache
+
+on:
+ workflow_dispatch: # allows manual triggering
+ schedule:
+ - cron: '0 * * * *'
+
+concurrency:
+ group: ${{ github.workflow }}-${{ github.head_ref && github.ref || github.run_id }}
+ cancel-in-progress: true
+
+jobs:
+ ubuntu-24-vulkan-cache:
+ runs-on: ubuntu-24.04
+
+ steps:
+ - name: Clone
+ id: checkout
+ uses: actions/checkout@v4
+
+ - name: Get latest Vulkan SDK version
+ id: vulkan_sdk_version
+ run: |
+ echo "VULKAN_SDK_VERSION=$(curl https://vulkan.lunarg.com/sdk/latest/linux.txt)" >> "$GITHUB_ENV"
+
+ - name: Setup Cache
+ uses: actions/cache@v4
+ id: cache-sdk
+ with:
+ path: ./vulkan_sdk
+ key: vulkan-sdk-${{ env.VULKAN_SDK_VERSION }}-${{ runner.os }}
+
+ - name: Setup Vulkan SDK
+ if: steps.cache-sdk.outputs.cache-hit != 'true'
+ uses: ./.github/actions/linux-setup-vulkan
+ with:
+ path: ./vulkan_sdk
+ version: ${{ env.VULKAN_SDK_VERSION }}
+
+ ubuntu-24-spacemit-cache:
+ runs-on: ubuntu-24.04
+
+ env:
+ # Make sure this is in sync with build-linux-cross.yml
+ SPACEMIT_IME_TOOLCHAIN_VERSION: "1.1.2"
+
+ steps:
+ - name: Clone
+ id: checkout
+ uses: actions/checkout@v4
+
+ - name: Setup Cache
+ uses: actions/cache@v4
+ id: cache-toolchain
+ with:
+ path: ./spacemit_toolchain
+ key: spacemit-ime-toolchain-v${{ env.SPACEMIT_IME_TOOLCHAIN_VERSION }}-${{ runner.os }}
+
+ - name: Setup SpacemiT Toolchain
+ if: steps.cache-toolchain.outputs.cache-hit != 'true'
+ uses: ./.github/actions/linux-setup-spacemit
+ with:
+ path: ./spacemit_toolchain
+ version: ${{ env.SPACEMIT_IME_TOOLCHAIN_VERSION }}
+
+ windows-2022-rocm-cache:
+ runs-on: windows-2022
+
+ env:
+ # Make sure this is in sync with build.yml
+ HIPSDK_INSTALLER_VERSION: "25.Q3"
+
+ steps:
+ - name: Clone
+ id: checkout
+ uses: actions/checkout@v4
+
+ - name: Setup Cache
+ uses: actions/cache@v4
+ id: cache-rocm
+ with:
+ path: C:\Program Files\AMD\ROCm
+ key: rocm-${{ env.HIPSDK_INSTALLER_VERSION }}-${{ runner.os }}
+
+ - name: Setup ROCm
+ if: steps.cache-rocm.outputs.cache-hit != 'true'
+ uses: ./.github/actions/windows-setup-rocm
+ with:
+ version: ${{ env.HIPSDK_INSTALLER_VERSION }}
runs-on: ubuntu-24.04
env:
+ # Make sure this is in sync with build-cache.yml
SPACEMIT_IME_TOOLCHAIN_VERSION: "1.1.2"
- SPACEMIT_IME_TOOLCHAIN_PATH: "spacemit-toolchain-linux-glibc-x86_64"
steps:
- uses: actions/checkout@v4
- - name: Cache Toolchain
+ - name: Use SpacemiT Toolchain Cache
uses: actions/cache@v4
- id: cache-spacemit-ime-cross-toolchain
+ id: cache-toolchain
with:
- path: ./${{ env.SPACEMIT_IME_TOOLCHAIN_PATH }}
- key: ${{ runner.os }}-spacemit-ime-toolchain-v${{ env.SPACEMIT_IME_TOOLCHAIN_VERSION }}
+ path: ./spacemit_toolchain
+ key: spacemit-ime-toolchain-v${{ env.SPACEMIT_IME_TOOLCHAIN_VERSION }}-${{ runner.os }}
- - name: Setup Toolchain
- if: steps.cache-spacemit-ime-cross-toolchain.outputs.cache-hit != 'true'
- run: |
- wget --quiet --no-check-certificate https://archive.spacemit.com/toolchain/spacemit-toolchain-linux-glibc-x86_64-v${{ env.SPACEMIT_IME_TOOLCHAIN_VERSION }}.tar.xz -O ${{ env.SPACEMIT_IME_TOOLCHAIN_PATH }}.tar.xz
- rm -rf ${{ env.SPACEMIT_IME_TOOLCHAIN_PATH }}
- mkdir -p ${{ env.SPACEMIT_IME_TOOLCHAIN_PATH }}
- tar xf ${{ env.SPACEMIT_IME_TOOLCHAIN_PATH }}.tar.xz -C ${{ env.SPACEMIT_IME_TOOLCHAIN_PATH }} --strip-components=1
- rm -rf ${{ env.SPACEMIT_IME_TOOLCHAIN_PATH }}.tar.xz
+ - name: Setup SpacemiT Toolchain
+ if: steps.cache-toolchain.outputs.cache-hit != 'true'
+ uses: ./.github/actions/linux-setup-spacemit
+ with:
+ path: ./spacemit_toolchain
+ version: ${{ env.SPACEMIT_IME_TOOLCHAIN_VERSION }}
- name: Build
run: |
- export RISCV_ROOT_PATH=${PWD}/${{ env.SPACEMIT_IME_TOOLCHAIN_PATH }}
+ export RISCV_ROOT_PATH=${PWD}/spacemit_toolchain
cmake -B build -DLLAMA_CURL=OFF \
-DCMAKE_BUILD_TYPE=Release \
-DGGML_OPENMP=OFF \
run: |
echo "VULKAN_SDK_VERSION=$(curl https://vulkan.lunarg.com/sdk/latest/linux.txt)" >> "$GITHUB_ENV"
- - name: Cache Vulkan SDK
- id: cache_vulkan_sdk
+ - name: Use Vulkan SDK Cache
uses: actions/cache@v4
+ id: cache-sdk
with:
path: ./vulkan_sdk
key: vulkan-sdk-${{ env.VULKAN_SDK_VERSION }}-${{ runner.os }}
- - name: Install Vulkan SDK
- if: steps.cache_vulkan_sdk.outputs.cache-hit != 'true'
- id: vulkan_sdk_install
- run: |
- mkdir -p vulkan_sdk
- cd vulkan_sdk
- curl --no-progress-meter https://sdk.lunarg.com/sdk/download/latest/linux/vulkan_sdk.tar.xz | tar -Jx --strip-components=1
+ - name: Setup Vulkan SDK
+ if: steps.cache-sdk.outputs.cache-hit != 'true'
+ uses: ./.github/actions/linux-setup-vulkan
+ with:
+ path: ./vulkan_sdk
+ version: ${{ env.VULKAN_SDK_VERSION }}
- name: Build
id: cmake_build
env:
# The ROCm version must correspond to the version used in the HIP SDK.
ROCM_VERSION: "6.4.2"
+ # Make sure this is in sync with build-cache.yml
HIPSDK_INSTALLER_VERSION: "25.Q3"
steps:
7z x rocwmma.deb
7z x data.tar
- - name: Cache ROCm Installation
- id: cache-rocm
+ - name: Use ROCm Installation Cache
uses: actions/cache@v4
+ id: cache-rocm
with:
path: C:\Program Files\AMD\ROCm
key: rocm-${{ env.HIPSDK_INSTALLER_VERSION }}-${{ runner.os }}
- - name: Install ROCm
+ - name: Setup ROCm
if: steps.cache-rocm.outputs.cache-hit != 'true'
- id: depends
- run: |
- $ErrorActionPreference = "Stop"
- write-host "Downloading AMD HIP SDK Installer"
- Invoke-WebRequest -Uri "https://download.amd.com/developer/eula/rocm-hub/AMD-Software-PRO-Edition-${{ env.HIPSDK_INSTALLER_VERSION }}-WinSvr2022-For-HIP.exe" -OutFile "${env:RUNNER_TEMP}\rocm-install.exe"
- write-host "Installing AMD HIP SDK"
- $proc = Start-Process "${env:RUNNER_TEMP}\rocm-install.exe" -ArgumentList '-install' -NoNewWindow -PassThru
- $completed = $proc.WaitForExit(600000)
- if (-not $completed) {
- Write-Error "ROCm installation timed out after 10 minutes. Killing the process"
- $proc.Kill()
- exit 1
- }
- if ($proc.ExitCode -ne 0) {
- Write-Error "ROCm installation failed with exit code $($proc.ExitCode)"
- exit 1
- }
- write-host "Completed AMD HIP SDK installation"
+ uses: ./.github/actions/windows-setup-rocm
+ with:
+ version: ${{ env.HIPSDK_INSTALLER_VERSION }}
- name: Verify ROCm
id: verify
# multiplie collaborators per item can be specified
/.devops/*.Dockerfile @ngxson
-/.github/actions/ @slaren
+/.github/actions/ @slaren @CISC
/.github/workflows/ @CISC
/.github/workflows/release.yml @slaren
/.github/workflows/winget.yml @slaren