-
Notifications
You must be signed in to change notification settings - Fork 104
111 lines (96 loc) · 3.81 KB
/
ci.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
name: ci
on: [push, pull_request]
jobs:
build-bin:
name: bin
runs-on: ubuntu-22.04-xl
services:
# Docker save / load does not support multi-arch images.
# This sets up a local registry that I can push the images to.
registry:
image: registry:2
ports:
- 5000:5000
env:
REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /var/lib/registry
volumes:
# The images pushed to the local registry will be persisted for this workflow.
- ${{github.workspace}}/registry:/var/lib/registry
steps:
- name: Clone repository
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build image
run: >
docker buildx build
-f bin.dockerfile
--platform=linux/amd64,linux/arm64
-t localhost:5000/bin --push
.
build:
needs: build-bin
name: ${{ matrix.kind }}
runs-on: ubuntu-22.04-xl
services:
# Service containers are spun up for each job, so it needs to be run again.
registry:
image: registry:2
ports:
- 5000:5000
env:
REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /var/lib/registry
volumes:
- ${{github.workspace}}/registry:/var/lib/registry
strategy:
matrix:
kind: ["alpine", "centos", "debian", "distroless", "ubuntu"]
steps:
- name: Clone repository
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build image
run: >
docker buildx build -f ${{ matrix.kind }}.dockerfile
--platform=linux/amd64,linux/arm64
--build-arg BIN_IMAGE=localhost:5000/bin
-t localhost:5000/${{ matrix.kind }} --push
.
- name: Test default CMD
run: |
docker run -t localhost:5000/${{ matrix.kind }}
- name: Test if entry script forwards to deno binary
run: |
docker run -t localhost:5000/${{ matrix.kind }} eval "console.log('Welcome to Deno!')"
# if typescript is present in the output, then probably deno --version worked
docker run -t localhost:5000/${{ matrix.kind }} --version | grep typescript
- name: Test if entry script forwards to other binaries
if: ${{ matrix.kind != 'distroless' }}
run: |
docker run -t localhost:5000/${{ matrix.kind }} deno eval "console.log('Welcome to Deno!')"
docker run -t localhost:5000/${{ matrix.kind }} echo 'test entry script'
- name: Login to Docker Hub
if: github.repository == 'denoland/deno_docker' && github.ref_type == 'tag'
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}
- name: Push named images
if: github.repository == 'denoland/deno_docker' && github.ref_type == 'tag'
run: >
docker buildx imagetools create localhost:8000/${{ matrix.kind }}
-t denoland/deno:${{ matrix.kind }}-${GITHUB_REF#refs/*/}
-t denoland/deno:${{ matrix.kind }}
- name: Push bin image
if: github.repository == 'denoland/deno_docker' && github.ref_type == 'tag' && matrix.kind == 'debian'
run: >
docker buildx imagetools create localhost:8000/bin
-t denoland/deno:bin-${GITHUB_REF#refs/*/}
-t denoland/deno:bin
- name: Push default image
if: github.repository == 'denoland/deno_docker' && github.ref_type == 'tag' && matrix.kind == 'debian'
run: >
docker buildx imagetools create localhost:8000/${{ matrix.kind }}
-t denoland/deno:${{ matrix.kind }}-${GITHUB_REF#refs/*/}
-t denoland/deno:latest