Skip to content

Commit 9b14b4e

Browse files
committed
ci: split into reusable workflows
Signed-off-by: Ettore Di Giacinto <[email protected]>
1 parent 2d64d8b commit 9b14b4e

File tree

2 files changed

+181
-97
lines changed

2 files changed

+181
-97
lines changed

.github/workflows/image.yml

Lines changed: 34 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,25 @@ concurrency:
1414
cancel-in-progress: true
1515

1616
jobs:
17-
image-build:
17+
cuda-image-build:
18+
uses: ./.github/workflows/image_build.yml
19+
with:
20+
tag-latest: ${{ matrix.tag-latest }}
21+
tag-suffix: ${{ matrix.tag-suffix }}
22+
ffmpeg: ${{ matrix.ffmpeg }}
23+
image-type: ${{ matrix.image-type }}
24+
build-type: ${{ matrix.build-type }}
25+
cuda-major-version: ${{ matrix.cuda-major-version }}
26+
cuda-minor-version: ${{ matrix.cuda-minor-version }}
27+
platforms: ${{ matrix.platforms }}
28+
runs-on: ${{ matrix.runs-on }}
29+
secrets:
30+
dockerUsername: ${{ secrets.LOCALAI_REGISTRY_USERNAME }}
31+
dockerPassword: ${{ secrets.LOCALAI_REGISTRY_PASSWORD }}
1832
strategy:
1933
# Pushing with all jobs in parallel
2034
# eats the bandwidth of all the nodes
21-
max-parallel: ${{ github.event_name != 'pull_request' && 1 || 4 }}
35+
max-parallel: ${{ github.event_name != 'pull_request' && 2 || 4 }}
2236
matrix:
2337
include:
2438
- build-type: ''
@@ -80,6 +94,24 @@ jobs:
8094
ffmpeg: ''
8195
image-type: 'extras'
8296
runs-on: 'arc-runner-set'
97+
cpu-image-build:
98+
uses: ./.github/workflows/image_build.yml
99+
with:
100+
tag-latest: ${{ matrix.tag-latest }}
101+
tag-suffix: ${{ matrix.tag-suffix }}
102+
ffmpeg: ${{ matrix.ffmpeg }}
103+
image-type: ${{ matrix.image-type }}
104+
build-type: ${{ matrix.build-type }}
105+
cuda-major-version: ${{ matrix.cuda-major-version }}
106+
cuda-minor-version: ${{ matrix.cuda-minor-version }}
107+
platforms: ${{ matrix.platforms }}
108+
runs-on: ${{ matrix.runs-on }}
109+
secrets:
110+
dockerUsername: ${{ secrets.LOCALAI_REGISTRY_USERNAME }}
111+
dockerPassword: ${{ secrets.LOCALAI_REGISTRY_PASSWORD }}
112+
strategy:
113+
matrix:
114+
include:
83115
- build-type: ''
84116
platforms: 'linux/amd64'
85117
tag-latest: 'false'
@@ -123,98 +155,3 @@ jobs:
123155
ffmpeg: 'true'
124156
image-type: 'core'
125157
runs-on: 'ubuntu-latest'
126-
127-
runs-on: ${{ matrix.runs-on }}
128-
steps:
129-
- name: Force Install GIT latest
130-
run: |
131-
sudo apt-get update \
132-
&& sudo apt-get install -y software-properties-common \
133-
&& sudo apt-get update \
134-
&& sudo add-apt-repository -y ppa:git-core/ppa \
135-
&& sudo apt-get update \
136-
&& sudo apt-get install -y git
137-
- name: Checkout
138-
uses: actions/checkout@v4
139-
# - name: Release space from worker
140-
# run: |
141-
# echo "Listing top largest packages"
142-
# pkgs=$(dpkg-query -Wf '${Installed-Size}\t${Package}\t${Status}\n' | awk '$NF == "installed"{print $1 "\t" $2}' | sort -nr)
143-
# head -n 30 <<< "${pkgs}"
144-
# echo
145-
# df -h
146-
# echo
147-
# sudo apt-get remove -y '^llvm-.*|^libllvm.*' || true
148-
# sudo apt-get remove --auto-remove android-sdk-platform-tools || true
149-
# sudo apt-get purge --auto-remove android-sdk-platform-tools || true
150-
# sudo rm -rf /usr/local/lib/android
151-
# sudo apt-get remove -y '^dotnet-.*|^aspnetcore-.*' || true
152-
# sudo rm -rf /usr/share/dotnet
153-
# sudo apt-get remove -y '^mono-.*' || true
154-
# sudo apt-get remove -y '^ghc-.*' || true
155-
# sudo apt-get remove -y '.*jdk.*|.*jre.*' || true
156-
# sudo apt-get remove -y 'php.*' || true
157-
# sudo apt-get remove -y hhvm powershell firefox monodoc-manual msbuild || true
158-
# sudo apt-get remove -y '^google-.*' || true
159-
# sudo apt-get remove -y azure-cli || true
160-
# sudo apt-get remove -y '^mongo.*-.*|^postgresql-.*|^mysql-.*|^mssql-.*' || true
161-
# sudo apt-get remove -y '^gfortran-.*' || true
162-
# sudo apt-get remove -y microsoft-edge-stable || true
163-
# sudo apt-get remove -y firefox || true
164-
# sudo apt-get remove -y powershell || true
165-
# sudo apt-get remove -y r-base-core || true
166-
# sudo apt-get autoremove -y
167-
# sudo apt-get clean
168-
# echo
169-
# echo "Listing top largest packages"
170-
# pkgs=$(dpkg-query -Wf '${Installed-Size}\t${Package}\t${Status}\n' | awk '$NF == "installed"{print $1 "\t" $2}' | sort -nr)
171-
# head -n 30 <<< "${pkgs}"
172-
# echo
173-
# sudo rm -rfv build || true
174-
# df -h
175-
- name: Docker meta
176-
id: meta
177-
uses: docker/metadata-action@v5
178-
with:
179-
images: quay.io/go-skynet/local-ai
180-
tags: |
181-
type=ref,event=branch
182-
type=semver,pattern={{raw}}
183-
type=sha
184-
flavor: |
185-
latest=${{ matrix.tag-latest }}
186-
suffix=${{ matrix.tag-suffix }}
187-
188-
- name: Set up QEMU
189-
uses: docker/setup-qemu-action@master
190-
with:
191-
platforms: all
192-
193-
- name: Set up Docker Buildx
194-
id: buildx
195-
uses: docker/setup-buildx-action@master
196-
197-
- name: Login to DockerHub
198-
if: github.event_name != 'pull_request'
199-
uses: docker/login-action@v3
200-
with:
201-
registry: quay.io
202-
username: ${{ secrets.LOCALAI_REGISTRY_USERNAME }}
203-
password: ${{ secrets.LOCALAI_REGISTRY_PASSWORD }}
204-
205-
- name: Build and push
206-
uses: docker/build-push-action@v5
207-
with:
208-
builder: ${{ steps.buildx.outputs.name }}
209-
build-args: |
210-
BUILD_TYPE=${{ matrix.build-type }}
211-
CUDA_MAJOR_VERSION=${{ matrix.cuda-major-version }}
212-
CUDA_MINOR_VERSION=${{ matrix.cuda-minor-version }}
213-
FFMPEG=${{ matrix.ffmpeg }}
214-
IMAGE_TYPE=${{ matrix.image-type }}
215-
context: .
216-
file: ./Dockerfile
217-
platforms: ${{ matrix.platforms }}
218-
push: ${{ github.event_name != 'pull_request' }}
219-
tags: ${{ steps.meta.outputs.tags }}
220-
labels: ${{ steps.meta.outputs.labels }}

.github/workflows/image_build.yml

Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
1+
---
2+
name: 'build container images'
3+
4+
on:
5+
workflow_call:
6+
inputs:
7+
build-type:
8+
description: 'Build type'
9+
default: ''
10+
type: string
11+
cuda-major-version:
12+
description: 'CUDA major version'
13+
# default: 11
14+
type: number
15+
cuda-minor-version:
16+
description: 'CUDA minor version'
17+
# default: 7
18+
type: number
19+
platforms:
20+
description: 'Platforms'
21+
default: ''
22+
type: string
23+
tag-latest:
24+
description: 'Tag latest'
25+
default: ''
26+
type: string
27+
tag-suffix:
28+
description: 'Tag suffix'
29+
default: ''
30+
type: string
31+
ffmpeg:
32+
description: 'FFMPEG'
33+
default: ''
34+
type: string
35+
image-type:
36+
description: 'Image type'
37+
default: ''
38+
type: string
39+
runs-on:
40+
description: 'Runs on'
41+
required: true
42+
default: ''
43+
type: string
44+
secrets:
45+
dockerUsername:
46+
required: true
47+
dockerPassword:
48+
required: true
49+
jobs:
50+
reusable_image-build:
51+
runs-on: ${{ inputs.runs-on }}
52+
steps:
53+
- name: Force Install GIT latest
54+
run: |
55+
sudo apt-get update \
56+
&& sudo apt-get install -y software-properties-common \
57+
&& sudo apt-get update \
58+
&& sudo add-apt-repository -y ppa:git-core/ppa \
59+
&& sudo apt-get update \
60+
&& sudo apt-get install -y git
61+
- name: Checkout
62+
uses: actions/checkout@v4
63+
# - name: Release space from worker
64+
# run: |
65+
# echo "Listing top largest packages"
66+
# pkgs=$(dpkg-query -Wf '${Installed-Size}\t${Package}\t${Status}\n' | awk '$NF == "installed"{print $1 "\t" $2}' | sort -nr)
67+
# head -n 30 <<< "${pkgs}"
68+
# echo
69+
# df -h
70+
# echo
71+
# sudo apt-get remove -y '^llvm-.*|^libllvm.*' || true
72+
# sudo apt-get remove --auto-remove android-sdk-platform-tools || true
73+
# sudo apt-get purge --auto-remove android-sdk-platform-tools || true
74+
# sudo rm -rf /usr/local/lib/android
75+
# sudo apt-get remove -y '^dotnet-.*|^aspnetcore-.*' || true
76+
# sudo rm -rf /usr/share/dotnet
77+
# sudo apt-get remove -y '^mono-.*' || true
78+
# sudo apt-get remove -y '^ghc-.*' || true
79+
# sudo apt-get remove -y '.*jdk.*|.*jre.*' || true
80+
# sudo apt-get remove -y 'php.*' || true
81+
# sudo apt-get remove -y hhvm powershell firefox monodoc-manual msbuild || true
82+
# sudo apt-get remove -y '^google-.*' || true
83+
# sudo apt-get remove -y azure-cli || true
84+
# sudo apt-get remove -y '^mongo.*-.*|^postgresql-.*|^mysql-.*|^mssql-.*' || true
85+
# sudo apt-get remove -y '^gfortran-.*' || true
86+
# sudo apt-get remove -y microsoft-edge-stable || true
87+
# sudo apt-get remove -y firefox || true
88+
# sudo apt-get remove -y powershell || true
89+
# sudo apt-get remove -y r-base-core || true
90+
# sudo apt-get autoremove -y
91+
# sudo apt-get clean
92+
# echo
93+
# echo "Listing top largest packages"
94+
# pkgs=$(dpkg-query -Wf '${Installed-Size}\t${Package}\t${Status}\n' | awk '$NF == "installed"{print $1 "\t" $2}' | sort -nr)
95+
# head -n 30 <<< "${pkgs}"
96+
# echo
97+
# sudo rm -rfv build || true
98+
# df -h
99+
- name: Docker meta
100+
id: meta
101+
uses: docker/metadata-action@v5
102+
with:
103+
images: quay.io/go-skynet/local-ai
104+
tags: |
105+
type=ref,event=branch
106+
type=semver,pattern={{raw}}
107+
type=sha
108+
flavor: |
109+
latest=${{ inputs.tag-latest }}
110+
suffix=${{ inputs.tag-suffix }}
111+
112+
- name: Set up QEMU
113+
uses: docker/setup-qemu-action@master
114+
with:
115+
platforms: all
116+
117+
- name: Set up Docker Buildx
118+
id: buildx
119+
uses: docker/setup-buildx-action@master
120+
121+
- name: Login to DockerHub
122+
if: github.event_name != 'pull_request'
123+
uses: docker/login-action@v3
124+
with:
125+
registry: quay.io
126+
username: ${{ secrets.dockerUsername }}
127+
password: ${{ secrets.dockerPassword }}
128+
129+
- name: Build and push
130+
uses: docker/build-push-action@v5
131+
with:
132+
builder: ${{ steps.buildx.outputs.name }}
133+
build-args: |
134+
BUILD_TYPE=${{ inputs.build-type }}
135+
CUDA_MAJOR_VERSION=${{ inputs.cuda-major-version }}
136+
CUDA_MINOR_VERSION=${{ inputs.cuda-minor-version }}
137+
FFMPEG=${{ inputs.ffmpeg }}
138+
IMAGE_TYPE=${{ inputs.image-type }}
139+
context: .
140+
file: ./Dockerfile
141+
platforms: ${{ inputs.platforms }}
142+
push: ${{ github.event_name != 'pull_request' }}
143+
tags: ${{ steps.meta.outputs.tags }}
144+
labels: ${{ steps.meta.outputs.labels }}
145+
- name: job summary
146+
run: |
147+
echo "Built image: ${{ steps.meta.outputs.labels }}" >> $GITHUB_STEP_SUMMARY

0 commit comments

Comments
 (0)