forked from dungeon-revealer/dungeon-revealer
-
Notifications
You must be signed in to change notification settings - Fork 0
147 lines (126 loc) · 4.99 KB
/
build-docker.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
139
140
141
142
143
144
145
146
147
name: Build Docker
on:
push:
branches: [ master ]
tags:
- 'v*'
jobs:
build:
name: Build
runs-on: ubuntu-latest
strategy:
matrix:
platform: [linux/amd64, linux/386, linux/arm/v6, linux/arm/v7, linux/arm64]
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Set environment
run: |
export PLATFORM=${{ matrix.platform }}
echo "::set-env name=PLATFORM_DASH::${PLATFORM////-}"
echo "::set-env name=BUILD_FAIL::true"
# ${foo////-} replaces slashes with dashes
# foo='linux/arm/v7'
# ${foo////-} -> linux-arm-v7
- name: Set up Docker Buildx
id: buildx
uses: crazy-max/ghaction-docker-buildx@v1
with:
buildx-version: latest
qemu-version: latest
- name: Available platforms
run: echo ${{ steps.buildx.outputs.platforms }}
- name: Login to DockerHub Registry
run: echo ${{ secrets.DOCKER_PASSWORD }} | docker login -u ${{ secrets.DOCKER_USERNAME }} --password-stdin
- name: Run Buildx cache from registry
continue-on-error: true
run: |
docker buildx build \
--platform ${{ matrix.platform }} \
--output "type=image,push=false" \
--cache-from=type=registry,ref=${{ secrets.DOCKER_REPO }}:build-cache-$PLATFORM_DASH \
. && echo "::set-env name=BUILD_FAIL::false"
- name: Run Buildx local build cache
if: env.BUILD_FAIL == 'true'
continue-on-error: true
run: |
docker buildx build \
--platform ${{ matrix.platform }} \
--output "type=image,push=false" \
. && echo "::set-env name=BUILD_FAIL::false"
- name: Run Buildx no cache
if: env.BUILD_FAIL == 'true'
run: |
docker buildx build \
--platform ${{ matrix.platform }} \
--output "type=image,push=false" \
--no-cache .
- name: Cache to registry
continue-on-error: true
run: |
docker buildx build \
--platform ${{ matrix.platform }} \
--cache-from=type=registry,ref=${{ secrets.DOCKER_REPO }}:build-cache-$PLATFORM_DASH \
--cache-to=type=registry,ref=${{ secrets.DOCKER_REPO }}:build-cache-$PLATFORM_DASH,mode=max .
- name: Cache to local
run: |
docker buildx build \
--platform ${{ matrix.platform }} \
--cache-from=type=registry,ref=${{ secrets.DOCKER_REPO }}:build-cache-$PLATFORM_DASH \
--cache-to=type=local,dest=docker-cache/${{ matrix.platform }},mode=max .
- name: Upload local cache to artifact
uses: actions/upload-artifact@v2
with:
name: docker-cache
path: docker-cache
deploy:
name: Deploy Images
needs: build
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Set environment
run: |
export TAG="${GITHUB_REF#'refs/tags/'}"
echo "::set-env name=GH_TAG::$TAG"
- name: Set up Docker Buildx
id: buildx
uses: crazy-max/ghaction-docker-buildx@v1
with:
buildx-version: latest
qemu-version: latest
- name: Login to DockerHub Registry
run: echo ${{ secrets.DOCKER_PASSWORD }} | docker login -u ${{ secrets.DOCKER_USERNAME }} --password-stdin
- name: Download local cache artifact
uses: actions/download-artifact@v2
with:
name: docker-cache
path: docker-cache
- name: Run Buildx Dev
if: startsWith(github.ref, 'refs/heads/') # Just the branches
run: |
docker buildx build \
--platform linux/amd64,linux/386,linux/arm/v6,linux/arm/v7,linux/arm64 \
--output "type=image,push=true" \
--cache-from=type=local,src=docker-cache/linux/amd64 \
--cache-from=type=local,src=docker-cache/linux/386 \
--cache-from=type=local,src=docker-cache/linux/arm/v6 \
--cache-from=type=local,src=docker-cache/linux/arm/v7 \
--cache-from=type=local,src=docker-cache/linux/arm64 \
-t ${{ secrets.DOCKER_REPO }}:dev .
- name: Run Buildx Release
if: startsWith(github.ref, 'refs/tags/') # Just the tags
run: |
docker buildx build \
--platform linux/amd64,linux/386,linux/arm/v6,linux/arm/v7,linux/arm64 \
--output "type=image,push=true" \
--cache-from=type=local,src=docker-cache/linux/amd64 \
--cache-from=type=local,src=docker-cache/linux/386 \
--cache-from=type=local,src=docker-cache/linux/arm/v6 \
--cache-from=type=local,src=docker-cache/linux/arm/v7 \
--cache-from=type=local,src=docker-cache/linux/arm64 \
-t ${{ secrets.DOCKER_REPO }}:release \
-t ${{ secrets.DOCKER_REPO }}:$GH_TAG \
-t ${{ secrets.DOCKER_REPO }}:stable \
-t ${{ secrets.DOCKER_REPO }}:latest .