-
Notifications
You must be signed in to change notification settings - Fork 75
138 lines (118 loc) · 4.56 KB
/
create-release.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
name: Create Release
on:
workflow_dispatch:
inputs:
release_notes:
description: "Release Notes"
required: true
type: string
permissions:
contents: write
jobs:
build_wheels:
name: Build wheels on ${{ matrix.arch }}${{ matrix.suffix }} (HA ${{ matrix.home_assistant_version }})
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
# ARM variants
- home_assistant_version: "2023.12.4"
arch: "aarch64"
- home_assistant_version: "2024.2.1"
arch: "aarch64"
- home_assistant_version: "2023.12.4"
arch: "armhf"
- home_assistant_version: "2024.2.1"
arch: "armhf"
# Base x86
- home_assistant_version: "2024.2.1"
suffix: "-noavx"
arch: "amd64"
extra_defines: "-DLLAMA_AVX=OFF -DLLAMA_AVX2=OFF -DLLAMA_FMA=OFF -DLLAMA_F16C=OFF"
- home_assistant_version: "2023.12.4"
arch: "amd64"
suffix: "-noavx"
extra_defines: "-DLLAMA_AVX=OFF -DLLAMA_AVX2=OFF -DLLAMA_FMA=OFF -DLLAMA_F16C=OFF"
- home_assistant_version: "2024.2.1"
arch: "i386"
suffix: "-noavx"
extra_defines: "-DLLAMA_AVX=OFF -DLLAMA_AVX2=OFF -DLLAMA_FMA=OFF -DLLAMA_F16C=OFF"
- home_assistant_version: "2023.12.4"
arch: "i386"
suffix: "-noavx"
extra_defines: "-DLLAMA_AVX=OFF -DLLAMA_AVX2=OFF -DLLAMA_FMA=OFF -DLLAMA_F16C=OFF"
# AVX2 and AVX512
- home_assistant_version: "2024.2.1"
arch: "amd64"
extra_defines: "-DLLAMA_AVX=ON -DLLAMA_AVX2=ON -DLLAMA_FMA=ON -DLLAMA_F16C=ON"
- home_assistant_version: "2024.2.1"
arch: "amd64"
suffix: "-avx512"
extra_defines: "-DLLAMA_AVX512=ON -DLLAMA_FMA=ON -DLLAMA_F16C=ON"
- home_assistant_version: "2024.2.1"
arch: "i386"
extra_defines: "-DLLAMA_AVX=ON -DLLAMA_AVX2=ON -DLLAMA_FMA=ON -DLLAMA_F16C=ON"
- home_assistant_version: "2024.2.1"
arch: "i386"
suffix: "-avx512"
extra_defines: "-DLLAMA_AVX512=ON -DLLAMA_FMA=ON -DLLAMA_F16C=ON"
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Read llama-cpp-python version
run: cat custom_components/llama_conversation/const.py | grep "EMBEDDED_LLAMA_CPP_PYTHON_VERSION" | tr -d ' ' | tr -d '"' >> $GITHUB_ENV
- name: Build artifact
uses: uraimo/run-on-arch-action@v2
id: build
with:
arch: none
distro: none
base_image: homeassistant/${{ matrix.arch }}-homeassistant:${{ matrix.home_assistant_version }}
# Create an artifacts directory
setup: |
mkdir -p "${PWD}/artifacts"
# Mount the artifacts directory as /artifacts in the container
dockerRunArgs: |
--volume "${PWD}/artifacts:/artifacts"
# The shell to run commands with in the container
shell: /bin/bash
# Produce a binary artifact and place it in the mounted volume
run: |
apk update
apk add build-base python3-dev cmake
pip3 install build
cd /tmp
git clone --quiet --recurse-submodules https://github.com/abetlen/llama-cpp-python --branch "v${{ env.EMBEDDED_LLAMA_CPP_PYTHON_VERSION }}"
cd llama-cpp-python
export CMAKE_ARGS="-DLLAVA_BUILD=OFF -DLLAMA_NATIVE=OFF ${{ matrix.extra_defines }}"
python3 -m build --wheel
ls -la ./dist/
for filename in ./dist/*.whl; do
output_file=$(basename $filename .whl)${{ matrix.suffix }}.whl
echo "$filename -> $output_file"
mv "$filename" "/artifacts/${output_file}";
done;
ls -la /artifacts/
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
path: ./artifacts/*.whl
name: artifact_${{ matrix.arch }}${{ matrix.suffix }}_${{ matrix.home_assistant_version }}
release:
name: Create Release
needs: [ build_wheels ]
runs-on: ubuntu-latest
if: "startsWith(github.event.ref, 'refs/tags/v')" # only create a release if this was run on a tag
steps:
- name: Download artifacts
uses: actions/download-artifact@v4
with:
path: dist
merge-multiple: true
- name: Create GitHub release
uses: softprops/action-gh-release@v2
with:
files: dist/*
body: ${{ inputs.release_notes }}
make_latest: true