-
Notifications
You must be signed in to change notification settings - Fork 1.8k
163 lines (143 loc) · 5.06 KB
/
Copy pathdocker.yml
File metadata and controls
163 lines (143 loc) · 5.06 KB
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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
name: Create and publish docker image
on:
workflow_dispatch:
schedule:
- cron: "0 20 */1 * *"
push:
tags:
- "v*"
- "!*-dev.*"
- "!vscode@*"
- '!vim@*'
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.ref_name }}
# If this is enabled it will cancel current running and start latest
cancel-in-progress: true
env:
RUST_TOOLCHAIN: 1.82.0
CUDA_VERSION: 12.4.1
jobs:
release-docker:
runs-on: buildjet-2vcpu-ubuntu-2204
permissions:
contents: read
packages: write
# This is used to complete the identity challenge
# with sigstore/fulcio when running outside of PRs.
id-token: write
strategy:
matrix:
device-type: [cuda]
include:
- device-type: cuda
image-suffix: ""
steps:
- name: Free Disk Space (Ubuntu)
uses: jlumbroso/free-disk-space@main
with:
# this might remove tools that are actually needed,
# if set to "true" but frees about 6 GB
tool-cache: true
# all of these default to true, but feel free to set to
# "false" if necessary for your workflow
android: true
dotnet: true
haskell: true
large-packages: false
swap-storage: true
- name: Checkout repository
uses: actions/checkout@v4
with:
submodules: recursive
# Workaround: https://github.com/docker/build-push-action/issues/461
- name: Setup Docker buildx
uses: docker/setup-buildx-action@v3
# Login against a Docker registry except on PR
# https://github.com/docker/login-action
- name: Log into GitHub Container registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Log into Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Generate image name
env:
IMAGE_SUFFIX: ${{ matrix.image-suffix }}
run: |
echo "IMAGE_NAME=${GITHUB_REPOSITORY,,}${IMAGE_SUFFIX}" >>${GITHUB_ENV}
- uses: int128/docker-build-cache-config-action@v1
id: cache
with:
image: ghcr.io/${{ env.IMAGE_NAME }}/cache
- name: Docker meta
id: meta
uses: docker/metadata-action@v5
with:
# list of Docker images to use as base name for tags
images: |
ghcr.io/${{ env.IMAGE_NAME }}
${{ env.IMAGE_NAME }}
# generate Docker tags based on the following events/attributes
tags: |
type=raw,value={{branch}}-{{sha}},enable=${{ startsWith(github.ref, 'refs/heads') }}
type=schedule,pattern=nightly
type=schedule,pattern={{date 'YYYYMMDD'}}
type=semver,pattern={{version}}
# Build and push Docker image with Buildx (don't push on PR)
# https://github.com/docker/build-push-action
- name: Build and push Docker image
id: build-and-push
uses: docker/build-push-action@v5
with:
file: docker/Dockerfile.${{ matrix.device-type }}
push: true
context: .
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: ${{ steps.cache.outputs.cache-from }}
cache-to: ${{ steps.cache.outputs.cache-to }}
build-args: |
RUST_TOOLCHAIN=${{ env.RUST_TOOLCHAIN }}
CUDA_VERSION=${{ env.CUDA_VERSION }}
- name: Docker meta for CUDA 11
if: startsWith(github.ref, 'refs/tags/v')
id: meta-cuda11
uses: docker/metadata-action@v5
with:
images: |
ghcr.io/${{ env.IMAGE_NAME }}
${{ env.IMAGE_NAME }}
# do not generate tags for latest since cuda12 is the latest
flavor: |
latest=false
suffix=-cuda11
tags: |
type=semver,pattern={{version}}
# Build and push Docker image with Buildx
# Only built on release tags for compatibility with previous versions
- name: Build and push Docker image for CUDA 11
if: startsWith(github.ref, 'refs/tags/v')
id: build-and-push-cuda11
uses: docker/build-push-action@v5
with:
file: docker/Dockerfile.${{ matrix.device-type }}
push: true
context: .
tags: ${{ steps.meta-cuda11.outputs.tags }}
labels: ${{ steps.meta-cuda11.outputs.labels }}
cache-from: ${{ steps.cache.outputs.cache-from }}
cache-to: ${{ steps.cache.outputs.cache-to }}
build-args: |
RUST_TOOLCHAIN=${{ env.RUST_TOOLCHAIN }}
CUDA_VERSION=11.7.1
- name: Docker Hub Description
uses: peter-evans/dockerhub-description@v4
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
repository: tabbyml/tabby