@@ -2,15 +2,17 @@ name: "Build"
2
2
3
3
on :
4
4
workflow_dispatch :
5
+
5
6
push :
6
7
branches :
7
- - " main"
8
+ - main
8
9
paths-ignore :
9
10
- " **.md"
10
11
- " proto/**"
12
+
11
13
pull_request :
12
14
branches :
13
- - " main"
15
+ - main
14
16
paths-ignore :
15
17
- " **.md"
16
18
- " proto/**"
@@ -21,102 +23,84 @@ defaults:
21
23
22
24
env :
23
25
CI : true
24
- DOCKER_BUILDKIT : 1
25
26
SERVER_IMAGE_NAME : " text-gen-server:0"
27
+ SERVER_IMAGE : " ghcr.io/ibm/text-gen-server:latest" # TODO: consider publishing to quay.io or icr.io instead
26
28
27
29
jobs :
28
30
build :
29
31
runs-on : ubuntu-latest
32
+ permissions :
33
+ packages : write
34
+ contents : read
30
35
env :
31
- BUILDKIT_INLINE_CACHE : 1
32
-
36
+ CACHE_IMAGE : " ghcr.io/ibm/text-gen-server:build-cache"
37
+ CACHE_REGISTRY : " ghcr.io"
38
+ CACHE_PACKAGE_NAME : " text-gen-server"
39
+
33
40
steps :
34
- - name : " Checkout"
35
- uses : actions/checkout@v4
36
-
37
- - name : " Free up disk space"
38
- uses : ./.github/actions/free-up-disk-space
39
-
40
- - name : " Set up QEMU"
41
- uses : docker/setup-qemu-action@v3
42
-
43
- - name : " Set up Docker Buildx"
44
- uses : docker/setup-buildx-action@v3
45
-
46
- - name : " Generate job steps to build stages sequentially"
47
- run : |
48
- build_targets=$(grep -iE "^FROM .+ as .*$" Dockerfile | grep -E -o "[^ ]+$")
49
- for t in $build_targets; do
50
- echo
51
- echo " - name: \"Docker build ${t}\""
52
- echo " run: docker build --target=$t -t $t ."
53
- done
54
-
55
- - name : " Docker build base"
56
- run : docker build --target=base -t base .
57
-
58
- - name : " Docker build cuda-base"
59
- run : docker build --target=cuda-base -t cuda-base .
60
-
61
- - name : " Docker build cuda-devel"
62
- run : docker build --target=cuda-devel -t cuda-devel .
63
-
64
- - name : " Docker build python-builder"
65
- run : docker build --target=python-builder -t python-builder .
66
-
67
- - name : " Docker build flash-att-v2-builder"
68
- run : docker build --target=flash-att-v2-builder -t flash-att-v2-builder .
69
-
70
- - name : " Docker build flash-att-builder"
71
- run : docker build --target=flash-att-builder -t flash-att-builder .
72
-
73
- - name : " Docker build flash-att-cache"
74
- run : docker build --target=flash-att-cache -t flash-att-cache .
75
-
76
- - name : " Docker build flash-att-v2-cache"
77
- run : docker build --target=flash-att-v2-cache -t flash-att-v2-cache .
78
-
79
- - name : " Docker build auto-gptq-installer"
80
- run : docker build --target=auto-gptq-installer -t auto-gptq-installer .
81
-
82
- - name : " Docker build auto-gptq-cache"
83
- run : docker build --target=auto-gptq-cache -t auto-gptq-cache .
84
-
85
- - name : " Docker build cuda-runtime"
86
- run : docker build --target=cuda-runtime -t cuda-runtime .
87
-
88
- - name : " Docker build rust-builder"
89
- run : docker build --target=rust-builder -t rust-builder .
90
-
91
- - name : " Docker build router-builder"
92
- run : docker build --target=router-builder -t router-builder .
93
-
94
- - name : " Docker build launcher-builder"
95
- run : docker build --target=launcher-builder -t launcher-builder .
96
-
97
- - name : " Docker build test-base"
98
- run : docker build --target=test-base -t test-base .
99
-
100
- - name : " Docker build cpu-tests"
101
- run : docker build --target=cpu-tests -t cpu-tests .
102
-
103
- - name : " Docker build build"
104
- run : docker build --target=build -t build .
105
-
106
- - name : " Docker build exllama-kernels-builder"
107
- run : docker build --target=exllama-kernels-builder -t exllama-kernels-builder .
108
-
109
- - name : " Docker build exllamav2-kernels-builder"
110
- run : docker build --target=exllamav2-kernels-builder -t exllamav2-kernels-builder .
111
-
112
- - name : " Docker build server-release"
113
- run : docker build --target=server-release -t server-release .
114
-
115
- - name : " List docker images"
116
- run : docker images
117
-
118
- - name : " Check disk usage"
119
- shell : bash
120
- run : |
121
- docker system df
122
- df -h
41
+ - name : " Checkout"
42
+ uses : actions/checkout@v4
43
+
44
+ - name : " Free up disk space"
45
+ uses : ./.github/actions/free-up-disk-space
46
+
47
+ - name : " Set up QEMU"
48
+ uses : docker/setup-qemu-action@v3
49
+
50
+ - name : " Set up Docker Buildx"
51
+ uses : docker/setup-buildx-action@v3
52
+
53
+ - name : " Log in to cache image container registry"
54
+ uses : docker/login-action@v3
55
+ with :
56
+ registry : ${{ env.CACHE_REGISTRY }}
57
+ username : ${{ github.actor }}
58
+ password : ${{ secrets.GITHUB_TOKEN }}
59
+
60
+ - name : " Set build cache target"
61
+ run : |
62
+ # For push to `main` (PR merged), push a new cache image with all layers (cache-mode=max).
63
+ # For PR builds, use GitHub action cache which isolates cached layers by PR/branch.
64
+ # to optimize builds for subsequent pushes to the same PR/branch.
65
+ # Do not set a cache-to image for PR builds to not overwrite the `main` cache image and
66
+ # to not ping-pong cache images for two or more different PRs.
67
+ # Do not push cache images for each PR or multiple branches to not exceed GitHub package
68
+ # usage and traffic limitations.
69
+ # UPDATE 2024/02/26: GHA cache appears to have issues, cannot use `cache-to: gha,mode=min`
70
+ # if `cache-from: reg...,mode=max` but `cache-to: gha,mode=max` takes longer than uncached
71
+ # build and exhausts GHA cache size limits, so use cache `type=inline` (no external cache).
72
+ if [ "${{ github.event_name }}" == "pull_request" ]
73
+ then
74
+ #CACHE_TO="type=gha,mode=min"
75
+ CACHE_TO="type=inline"
76
+ else
77
+ CACHE_TO="type=registry,ref=${{ env.CACHE_IMAGE }},mode=max"
78
+ fi
79
+ echo "CACHE_TO=$CACHE_TO" >> $GITHUB_ENV
80
+
81
+ - name : " Docker build server-release"
82
+ uses : docker/build-push-action@v5
83
+ with :
84
+ context : .
85
+ target : server-release
86
+ tags : ${{ env.SERVER_IMAGE }}
87
+ cache-from : type=registry,ref=${{ env.CACHE_IMAGE }}
88
+ cache-to : ${{ env.CACHE_TO }}
89
+ push : ${{ github.event_name != 'pull_request' }}
90
+
91
+ - name : " Cleanup old cache images"
92
+ uses : actions/delete-package-versions@v5
93
+ if : ${{ github.event_name == 'push' }}
94
+ with :
95
+ package-name : ${{ env.CACHE_PACKAGE_NAME }}
96
+ package-type : container
97
+ delete-only-untagged-versions : true
98
+
99
+ - name : " List docker images"
100
+ run : docker images
101
+
102
+ - name : " Check disk usage"
103
+ shell : bash
104
+ run : |
105
+ docker system df
106
+ df -h
0 commit comments