-
Notifications
You must be signed in to change notification settings - Fork 184
173 lines (145 loc) · 6.71 KB
/
docker-publish.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
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
name: Allure Docker Service Workflow
on:
push:
branches:
- "*"
tags:
- v*
pull_request:
env:
DOCKER_IMAGE: frankescobar/allure-docker-service
ALLURE_RELEASE: 2.27.0
QEMU_VERSION: v4.0.0
DOCKER_CLI_EXPERIMENTAL: enabled
jobs:
build_release:
runs-on: ubuntu-latest
strategy:
matrix:
ARCH: [amd64, arm32v7, arm64v8]
include:
- ARCH: amd64
DOCKER_FILE: Dockerfile.bionic
JDK: adoptopenjdk:11-jre-openj9-bionic
QEMU_ARCH: x86_64
- ARCH: arm32v7
DOCKER_FILE: Dockerfile.bionic
JDK: adoptopenjdk:11-jdk-hotspot-bionic
QEMU_ARCH: arm
- ARCH: arm64v8
DOCKER_FILE: Dockerfile.bionic
JDK: adoptopenjdk:11-jre-hotspot-bionic
QEMU_ARCH: aarch64
if: github.event_name == 'push'
outputs:
build_version: ${{ steps.prepare.outputs.build_version }}
steps:
- name: Pulling code
uses: actions/checkout@v2
- name: Preparing
id: prepare
run: |
echo "DOCKER BUILD: Build Docker image."
echo "DOCKER BUILD: arch - ${{matrix.ARCH}}."
echo "DOCKER BUILD: jdk -> ${{matrix.JDK}}."
echo "DOCKER BUILD: build version -> ${VERSION}."
echo "DOCKER BUILD: allure version -> ${ALLURE_RELEASE}."
echo "DOCKER BUILD: qemu arch - ${{matrix.QEMU_ARCH}}."
echo "DOCKER BUILD: docker file - ${{matrix.DOCKER_FILE}}."
VERSION=na
TAGS="--tag ${DOCKER_IMAGE}:build"
if [[ $GITHUB_REF == refs/tags/* ]]; then
VERSION=${GITHUB_REF#refs/tags/v}
if [[ $GITHUB_REF == *"beta"* ]]; then
TAGS="--tag ${DOCKER_IMAGE}:${VERSION} --tag ${DOCKER_IMAGE}:${VERSION}-${{matrix.ARCH}} --tag ${DOCKER_IMAGE}:beta --tag ${DOCKER_IMAGE}:build"
else
TAGS="--tag ${DOCKER_IMAGE}:${VERSION} --tag ${DOCKER_IMAGE}:${VERSION}-${{matrix.ARCH}} --tag ${DOCKER_IMAGE}:latest --tag ${DOCKER_IMAGE}:build"
fi
fi
echo ::set-output name=docker_image::${DOCKER_IMAGE}
echo ::set-output name=build_version::${VERSION}
echo ::set-output name=docker_args::--build-arg ARCH=${{matrix.ARCH}} \
--build-arg JDK=${{matrix.JDK}} \
--build-arg QEMU_ARCH=${{matrix.QEMU_ARCH}} \
--build-arg BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ') \
--build-arg BUILD_VERSION=${VERSION} \
--build-arg BUILD_REF=${GITHUB_SHA::8} \
--build-arg ALLURE_RELEASE=${ALLURE_RELEASE} \
${TAGS} --file docker/Dockerfile.bionic .
- name: Setting up QEMU
run: |
# Prepare qemu to build non amd64 / x86_64 images
docker run --rm --privileged multiarch/qemu-user-static:register --reset
mkdir tmp
pushd tmp &&
curl -L -o qemu-x86_64-static.tar.gz https://github.com/multiarch/qemu-user-static/releases/download/$QEMU_VERSION/qemu-x86_64-static.tar.gz && tar xzf qemu-x86_64-static.tar.gz &&
curl -L -o qemu-arm-static.tar.gz https://github.com/multiarch/qemu-user-static/releases/download/$QEMU_VERSION/qemu-arm-static.tar.gz && tar xzf qemu-arm-static.tar.gz &&
curl -L -o qemu-aarch64-static.tar.gz https://github.com/multiarch/qemu-user-static/releases/download/$QEMU_VERSION/qemu-aarch64-static.tar.gz && tar xzf qemu-aarch64-static.tar.gz &&
popd
- name: Docker Building
run: |
docker build --no-cache ${{ steps.prepare.outputs.docker_args }}
- name: Docker Testing
run: |
echo "DOCKER TEST: Test Docker image."
echo "DOCKER TEST: testing image -> ${DOCKER_IMAGE}:build"
docker run -d --rm --name=testing ${DOCKER_IMAGE}:build
if [ $? -ne 0 ]; then
echo "DOCKER TEST: FAILED - Docker container testing failed to start."
exit 1
else
echo "DOCKER TEST: PASSED - Docker container testing succeeded to start."
fi
- name: DockerHub Login
if: success() && startsWith(github.ref, 'refs/tags/v')
env:
DOCKER_HUB_USER: ${{ secrets.DOCKER_HUB_USER }}
DOCKER_HUB_PASS: ${{ secrets.DOCKER_HUB_PASS }}
run: |
echo "${DOCKER_HUB_PASS}" | docker login -u "${DOCKER_HUB_USER}" --password-stdin
- name: Docker Publishing
if: success() && startsWith(github.ref, 'refs/tags/v')
run: |
echo "DOCKER PUSH: pushing - ${DOCKER_IMAGE}:${{ steps.prepare.outputs.build_version }}-${{matrix.ARCH}}."
docker push ${DOCKER_IMAGE}:${{ steps.prepare.outputs.build_version }}-${{matrix.ARCH}}
- name: Docker Logout
if: success() && startsWith(github.ref, 'refs/tags/v')
run: |
docker logout
manifest_release:
runs-on: ubuntu-latest
needs: build_release
steps:
- name: DockerHub Login
if: success() && startsWith(github.ref, 'refs/tags/v')
env:
DOCKER_HUB_USER: ${{ secrets.DOCKER_HUB_USER }}
DOCKER_HUB_PASS: ${{ secrets.DOCKER_HUB_PASS }}
run: |
echo "${DOCKER_HUB_PASS}" | docker login -u "${DOCKER_HUB_USER}" --password-stdin
- name: Docker Publishing Manifest
if: success() && startsWith(github.ref, 'refs/tags/v')
run: |
BUILD_VERSION=${{ needs.build_release.outputs.build_version }}
docker manifest create ${DOCKER_IMAGE}:${BUILD_VERSION} \
${DOCKER_IMAGE}:${BUILD_VERSION}-amd64 \
${DOCKER_IMAGE}:${BUILD_VERSION}-arm32v7 \
${DOCKER_IMAGE}:${BUILD_VERSION}-arm64v8
docker manifest annotate ${DOCKER_IMAGE}:${BUILD_VERSION} ${DOCKER_IMAGE}:${BUILD_VERSION}-arm32v7 --os=linux --arch=arm --variant=v7
docker manifest annotate ${DOCKER_IMAGE}:${BUILD_VERSION} ${DOCKER_IMAGE}:${BUILD_VERSION}-arm64v8 --os=linux --arch=arm64 --variant=v8
docker manifest push ${DOCKER_IMAGE}:${BUILD_VERSION}
TAG=beta
if [[ ${BUILD_VERSION} != *"beta"* ]]; then
TAG=latest
fi
docker manifest create ${DOCKER_IMAGE}:${TAG} \
${DOCKER_IMAGE}:${BUILD_VERSION}-amd64 \
${DOCKER_IMAGE}:${BUILD_VERSION}-arm32v7 \
${DOCKER_IMAGE}:${BUILD_VERSION}-arm64v8
docker manifest annotate ${DOCKER_IMAGE}:${TAG} ${DOCKER_IMAGE}:${BUILD_VERSION}-arm32v7 --os=linux --arch=arm --variant=v7
docker manifest annotate ${DOCKER_IMAGE}:${TAG} ${DOCKER_IMAGE}:${BUILD_VERSION}-arm64v8 --os=linux --arch=arm64 --variant=v8
docker manifest push ${DOCKER_IMAGE}:${TAG}
- name: Docker Logout
if: success() && startsWith(github.ref, 'refs/tags/v')
run: |
docker logout