Skip to content

Commit f7ae26a

Browse files
authored
feat: Support building docker images with GitHub Action (#27)
1 parent ffdee88 commit f7ae26a

File tree

5 files changed

+163
-4
lines changed

5 files changed

+163
-4
lines changed
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
name: Build API Server Image and Push to Image Registry
2+
3+
on:
4+
push:
5+
tags:
6+
- "apiserver-v*.*.*"
7+
workflow_dispatch: ~
8+
9+
jobs:
10+
build-apiserver-image:
11+
runs-on: ubuntu-latest
12+
env:
13+
IMAGE_REGISTRY: ${{ vars.IMAGE_REGISTRY || 'higress-registry.cn-hangzhou.cr.aliyuncs.com' }}
14+
IMAGE_NAME: ${{ vars.API_SERVER_IMAGE_NAME || 'higress/api-server' }}
15+
steps:
16+
- name: "Checkout ${{ github.ref }}"
17+
uses: actions/checkout@v3
18+
with:
19+
fetch-depth: 1
20+
21+
- name: "Setup Go"
22+
uses: actions/setup-go@v3
23+
with:
24+
go-version: 1.20
25+
26+
- name: Setup Golang Caches
27+
uses: actions/cache@v3
28+
with:
29+
path: |-
30+
~/.cache/go-build
31+
~/go/pkg/mod
32+
key: ${{ runner.os }}-go-${{ github.run_id }}
33+
restore-keys: ${{ runner.os }}-go
34+
35+
- name: Calculate Docker metadata
36+
id: docker-meta
37+
uses: docker/metadata-action@v4
38+
with:
39+
images: |
40+
${{ env.IMAGE_REGISTRY }}/${{ env.IMAGE_NAME }}
41+
tags: |
42+
type=sha
43+
type=match,pattern=apiserver-v(.*),group=1
44+
type=raw,value=latest,enable=${{ github.ref == format('refs/heads/{0}', 'main') }}
45+
46+
- name: Login to Docker Registry
47+
uses: docker/login-action@v2
48+
with:
49+
registry: ${{ vars.IMAGE_REGISTRY }}
50+
username: ${{ secrets.REGISTRY_USERNAME }}
51+
password: ${{ secrets.REGISTRY_PASSWORD }}
52+
53+
- name: Set up QEMU
54+
uses: docker/setup-qemu-action@v2
55+
56+
- name: Set up Docker Buildx
57+
uses: docker/setup-buildx-action@v2
58+
59+
- name: Build Docker Image and Push
60+
run: |
61+
cd src/apiserver/
62+
readarray -t IMAGES <<< "${{ steps.docker-meta.outputs.tags }}"
63+
baseImage=""
64+
for image in ${IMAGES[@]}; do
65+
echo "Image: $image"
66+
if [ -z "$baseImage" ]; then
67+
GOPROXY="https://proxy.golang.org,direct" IMG="${image}" make docker-buildx-push
68+
baseImage="$image"
69+
else
70+
docker buildx imagetools create "$baseImage" --tag "$image"
71+
fi
72+
done
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
name: Build Runner Image and Push to Image Registry
2+
3+
on:
4+
push:
5+
tags:
6+
- "runner-v*.*.*"
7+
workflow_dispatch: ~
8+
9+
jobs:
10+
build-runner-image:
11+
runs-on: ubuntu-latest
12+
env:
13+
IMAGE_REGISTRY: ${{ vars.IMAGE_REGISTRY || 'higress-registry.cn-hangzhou.cr.aliyuncs.com' }}
14+
IMAGE_NAME: ${{ vars.RUNNER_IMAGE_NAME || 'higress/runner' }}
15+
steps:
16+
- name: "Checkout ${{ github.ref }}"
17+
uses: actions/checkout@v3
18+
with:
19+
fetch-depth: 1
20+
21+
- name: "Setup Go"
22+
uses: actions/setup-go@v3
23+
with:
24+
go-version: 1.20
25+
26+
- name: Setup Golang Caches
27+
uses: actions/cache@v3
28+
with:
29+
path: |-
30+
~/.cache/go-build
31+
~/go/pkg/mod
32+
key: ${{ runner.os }}-go-${{ github.run_id }}
33+
restore-keys: ${{ runner.os }}-go
34+
35+
- name: Calculate Docker metadata
36+
id: docker-meta
37+
uses: docker/metadata-action@v4
38+
with:
39+
images: |
40+
${{ env.IMAGE_REGISTRY }}/${{ env.IMAGE_NAME }}
41+
tags: |
42+
type=sha
43+
type=match,pattern=runner-v(.*),group=1
44+
type=raw,value=latest,enable=${{ github.ref == format('refs/heads/{0}', 'main') }}
45+
46+
- name: Login to Docker Registry
47+
uses: docker/login-action@v2
48+
with:
49+
registry: ${{ vars.IMAGE_REGISTRY }}
50+
username: ${{ secrets.REGISTRY_USERNAME }}
51+
password: ${{ secrets.REGISTRY_PASSWORD }}
52+
53+
- name: Set up QEMU
54+
uses: docker/setup-qemu-action@v2
55+
56+
- name: Set up Docker Buildx
57+
uses: docker/setup-buildx-action@v2
58+
59+
- name: Build Docker Image and Push
60+
run: |
61+
cd src/runner/
62+
readarray -t IMAGES <<< "${{ steps.docker-meta.outputs.tags }}"
63+
baseImage=""
64+
for image in ${IMAGES[@]}; do
65+
echo "Image: $image"
66+
if [ -z "$baseImage" ]; then
67+
GOPROXY="https://proxy.golang.org,direct" IMG="${image}" make docker-buildx-push
68+
baseImage="$image"
69+
else
70+
docker buildx imagetools create "$baseImage" --tag "$image"
71+
fi
72+
done

.github/workflows/run-tests.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ jobs:
1010
test:
1111
runs-on: ubuntu-latest
1212
steps:
13-
- name: "checkout ${{ github.ref }}"
13+
- name: "Checkout ${{ github.ref }}"
1414
uses: actions/checkout@v3
1515
with:
1616
fetch-depth: 1

src/apiserver/Makefile

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,14 @@ IMAGE_TAG = $(if $(strip $(IMAGE_VERSION)),${IMAGE_VERSION},${BUILD_TIME}-${COMM
77
IMG ?= ${REGISTRY}${IMAGE_NAME}:${IMAGE_TAG}
88

99
.DEFAULT:
10-
build:
10+
docker-build:
11+
docker build \
12+
-t ${IMG} \
13+
.
14+
@echo ""
15+
@echo "Image: ${IMG}"
16+
17+
docker-buildx-push:
1118
docker buildx build --no-cache \
1219
--platform linux/amd64,linux/arm64 \
1320
-t ${IMG} \

src/runner/Makefile

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,16 @@ IMG ?= ${REGISTRY}${IMAGE_NAME}:${IMAGE_TAG}
88
YQ_VERSION ?= 4.34.2
99

1010
.DEFAULT:
11-
build:
12-
DOCKER_BUILDKIT=1 docker buildx build --no-cache \
11+
docker-build:
12+
docker build \
13+
--build-arg YQ_VERSION=${YQ_VERSION} \
14+
-t ${IMG} \
15+
.
16+
@echo ""
17+
@echo "Image: ${IMG}"
18+
19+
docker-buildx-push:
20+
docker buildx build --no-cache \
1321
--build-arg YQ_VERSION=${YQ_VERSION} \
1422
--platform linux/amd64,linux/arm64 \
1523
-t ${IMG} \

0 commit comments

Comments
 (0)