1+ name : Publish Docker image for new releases
2+
3+ on :
4+ release :
5+ types :
6+ - published
7+
8+ jobs :
9+ build_and_push :
10+ name : Build and Push
11+ runs-on : ubuntu-18.04
12+ env :
13+ DOCKER_REPO : atactr/automata
14+ steps :
15+ - uses : actions/checkout@v2
16+ - name : Set up QEMU
17+ uses : docker/setup-qemu-action@v1
18+ - name : Set up Docker Buildx
19+ id : docker-builder
20+ uses : docker/setup-buildx-action@v1
21+ - name : Cache Buildx
22+ uses : actions/cache@v2
23+ id : buildx-cache
24+ with :
25+ path : /tmp/buildx-cache
26+ key : ${{ runner.os }}-buildx-${{ hashFiles('**/Cargo.lock') }}
27+ restore-keys : |
28+ ${{ runner.os }}-buildx-${{ hashFiles('**/Cargo.lock') }}
29+ ${{ runner.os }}-buildx-
30+ - name : Login to DockerHub
31+ uses : docker/login-action@v1
32+ with :
33+ username : ${{ secrets.DOCKERHUB_USERNAME }}
34+ password : ${{ secrets.DOCKERHUB_TOKEN }}
35+ - name : Prepare Environment Variables
36+ run : |
37+ echo "BUILDX_BUILDER=${{ steps.docker-builder.outputs.name }}" >> $GITHUB_ENV
38+ echo "BUILDX_BUILDER_CONTAINER=buildx_buildkit_${{ steps.docker-builder.outputs.name }}0" >> $GITHUB_ENV
39+ - name : Restore buildx cache
40+ # Handle cache mount in buildx
41+ # See https://github.com/docker/buildx/issues/156#issuecomment-537492942
42+ if : steps.buildx-cache.outputs.cache-hit == 'true'
43+ run : |
44+ docker buildx stop --builder "${BUILDX_BUILDER}"
45+ docker run --rm --volumes-from "${BUILDX_BUILDER_CONTAINER}" \
46+ -v /tmp/buildx-cache:/backup \
47+ alpine:3.10 /bin/sh -c "cd / && tar xf /backup/backup.tar.gz"
48+ docker buildx inspect --builder "${BUILDX_BUILDER}" --bootstrap
49+ docker buildx --builder "${BUILDX_BUILDER}" du --verbose
50+ - name : ContextFree - Build with cache and push images
51+ uses : docker/build-push-action@v2
52+ id : contextfree_docker_build
53+ with :
54+ builder : ${{ steps.docker-builder.outputs.name }}
55+ push : true
56+ cache-from : |
57+ type=registry,ref=${{ env.DOCKER_REPO }}:builder
58+ cache-to : |
59+ type=local,dest=/tmp/buildx-cache-cross-step,mode=max
60+ tags : |
61+ atactr/automata:contextfree-latest
62+ atactr/automata:contextfree-${{ github.event.release.tag_name }}
63+ build-args : |
64+ FEATURES=contextfree
65+ - name : Automata - Build with cache and push images
66+ uses : docker/build-push-action@v2
67+ id : automata_docker_build
68+ with :
69+ builder : ${{ steps.docker-builder.outputs.name }}
70+ push : true
71+ cache-from : |
72+ type=registry,ref=${{ env.DOCKER_REPO }}:builder
73+ cache-to : |
74+ type=local,dest=/tmp/buildx-cache-cross-step,mode=max
75+ tags : |
76+ atactr/automata:automata-latest
77+ atactr/automata:automata-${{ github.event.release.tag_name }}
78+ build-args : |
79+ FEATURES=automata
80+ - name : Update registry cache
81+ uses : docker/build-push-action@v2
82+ if : github.ref == 'refs/heads/main'
83+ with :
84+ builder : ${{ steps.docker-builder.outputs.name }}
85+ cache-from : |
86+ type=registry,ref=${{ env.DOCKER_REPO }}:builder
87+ type=local,src=/tmp/buildx-cache-cross-step
88+ cache-to : |
89+ type=registry,ref=${{ env.DOCKER_REPO }}:builder,mode=max
90+ - name : Backup buildx cache
91+ # Handle cache mount in buildx
92+ # See https://github.com/docker/buildx/issues/156#issuecomment-537492942
93+ env :
94+ KEEP_STORAGE : " 1073741824" # this is 1GB
95+ run : |
96+ echo "Before pruning"
97+ docker buildx --builder "${BUILDX_BUILDER}" du --verbose
98+ echo "Start pruning"
99+ docker buildx --builder "${BUILDX_BUILDER}" prune --force --filter type=frontend
100+ docker buildx --builder "${BUILDX_BUILDER}" prune --force --filter type=regular
101+ docker buildx --builder "${BUILDX_BUILDER}" prune --force --filter type=source.local
102+ docker buildx --builder "${BUILDX_BUILDER}" prune --force --keep-storage ${KEEP_STORAGE}
103+ echo "After pruning"
104+ docker buildx --builder "${BUILDX_BUILDER}" du --verbose
105+ echo "Backup buildx cache"
106+ docker run --rm --volumes-from "${BUILDX_BUILDER_CONTAINER}" \
107+ -v /tmp/buildx-cache:/backup \
108+ alpine:3.10 /bin/sh -c "cd / && tar cf /backup/backup.tar.gz /var/lib/buildkit"
109+
110+ - name : ContextFree Image digest
111+ run : echo ${{ steps.contextfree_docker_build.outputs.digest }}
112+
113+ - name : Automata Image digest
114+ run : echo ${{ steps.automata_docker_build.outputs.digest }}
0 commit comments