forked from mysql/mysql-docker
-
Notifications
You must be signed in to change notification settings - Fork 6
172 lines (153 loc) · 7.22 KB
/
test_and_deploy.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
name: Building Image, Running Benchmarks and Deploying to Dockerhub
on:
push:
pull_request:
branches:
- main
types: [opened, synchronize, reopened, edited]
env:
RONDB_VERSION_LTS: 21.04.15
RONDB_VERSION_STABLE: 22.10.1
ARM_IMAGE_NAME: rondb-standalone-arm64
AMD_IMAGE_NAME: rondb-standalone-amd64
jobs:
integration-test-and-package:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Build and run Docker Compose cluster with benchmarking for RONDB_VERSION_LTS
run: |
./run.sh -lv \
--rondb-tarball-url https://repo.hops.works/master/rondb-$RONDB_VERSION_LTS-linux-glibc2.17-x86_64.tar.gz \
--rondb-version $RONDB_VERSION_LTS \
--size mini \
--run-benchmark sysbench_single \
--detached
- name: Wait for one container exit or timeout
run: |
start=`date +%s`
while true; do
end=`date +%s`
runtime=$((end-start))
if [ $( docker container ls --filter "status=exited" | grep rondb | wc -l ) -gt 0 ]; then
echo "One container is down. We can continue"
docker container ls --filter "status=exited"
exit 0
elif [ $runtime -gt 800 ]; then
echo "The benchmarking seems to be stuck. We're aborting now."
docker ps
exit 1
fi
sleep 2
done
- run: docker container ls
- run: docker logs mgmd_1
- run: docker logs ndbd_1
- run: docker logs mysqld_1
- run: docker logs rest_1
- run: docker logs bench_1
# At this point we only know that one container has exited. We want to
# check whether the bench container has exited with exit code 0. We need
# both status and exit code to do so, since Docker reports exit code 0
# for running containers.
- name: Check Benchmarking Exit Code
run: |
if [ "$(docker inspect bench_1 --format='{{.State.Status}}')" != "exited" ]
then
echo "Some container other than bench_1 exited unexpectedly."
docker ps -a
exit 1
elif [ "$(docker inspect bench_1 --format='{{.State.ExitCode}}')" != "0" ]
then
echo "Benchmarking failed."
cat autogenerated_files/*/volumes/sysbench_single/sysbench_results/oltp_rw_0_0.res
exit 1
fi
- name: Printing Sysbench results
run: cat autogenerated_files/*/volumes/sysbench_single/final_result.txt
- name: Login to Dockerhub
uses: docker/login-action@v2
if: github.repository == 'logicalclocks/rondb-docker' && github.ref_name == 'main'
with:
username: hopsworks
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build AMD64 image for RONDB_VERSION_STABLE
if: github.repository == 'logicalclocks/rondb-docker' && github.ref_name == 'main'
run: |
docker buildx build . \
--tag rondb-standalone:$RONDB_VERSION_STABLE \
--build-arg RONDB_VERSION=$RONDB_VERSION_STABLE \
--build-arg RONDB_TARBALL_LOCAL_REMOTE=remote \
--build-arg RONDB_TARBALL_URI=https://repo.hops.works/master/rondb-$RONDB_VERSION_STABLE-linux-glibc2.17-x86_64.tar.gz
- name: Push AMD64 images to Dockerhub
if: github.repository == 'logicalclocks/rondb-docker' && github.ref_name == 'main'
run: |
docker tag rondb-standalone:$RONDB_VERSION_LTS hopsworks/$AMD_IMAGE_NAME:$RONDB_VERSION_LTS
docker tag rondb-standalone:$RONDB_VERSION_STABLE hopsworks/$AMD_IMAGE_NAME:$RONDB_VERSION_STABLE
docker tag rondb-standalone:$RONDB_VERSION_STABLE hopsworks/$AMD_IMAGE_NAME:latest
docker push hopsworks/$AMD_IMAGE_NAME:$RONDB_VERSION_LTS
docker push hopsworks/$AMD_IMAGE_NAME:$RONDB_VERSION_STABLE
docker push hopsworks/$AMD_IMAGE_NAME:latest
build-and-push-ARM64:
runs-on: ubuntu-latest
if: github.repository == 'logicalclocks/rondb-docker' && github.ref_name == 'main'
steps:
- uses: actions/checkout@v3
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Login to Dockerhub
uses: docker/login-action@v2
with:
username: hopsworks
password: ${{ secrets.DOCKERHUB_TOKEN }}
# We're skipping the benchmarking on ARM64 as we assume this will be run on a regular basis
# during development. ARM64 images are only for development anyways. It is more important to add
# all types of benchmarking to the tests.
- name: Build and push ARM64 image for RONDB_VERSION_LTS
run: |
docker buildx build . \
--tag hopsworks/$ARM_IMAGE_NAME:$RONDB_VERSION_LTS \
--platform=linux/arm64 \
--output type=registry \
--build-arg RONDB_VERSION=$RONDB_VERSION_LTS \
--build-arg RONDB_TARBALL_LOCAL_REMOTE=remote \
--build-arg RONDB_TARBALL_URI=https://repo.hops.works/master/rondb-$RONDB_VERSION_LTS-linux-glibc2.35-arm64_v8.tar.gz \
--cache-to type=registry,ref=hopsworks/rondb-standalone-cache,mode=max \
--cache-from type=registry,ref=hopsworks/rondb-standalone-cache,mode=max
- name: Build and push ARM64 image for RONDB_VERSION_STABLE
run: |
docker buildx build . \
--tag hopsworks/$ARM_IMAGE_NAME:$RONDB_VERSION_STABLE \
--tag hopsworks/$ARM_IMAGE_NAME:latest \
--platform=linux/arm64 \
--output type=registry \
--build-arg RONDB_VERSION=$RONDB_VERSION_STABLE \
--build-arg RONDB_TARBALL_LOCAL_REMOTE=remote \
--build-arg RONDB_TARBALL_URI=https://repo.hops.works/master/rondb-$RONDB_VERSION_STABLE-linux-glibc2.35-arm64_v8.tar.gz \
--cache-to type=registry,ref=hopsworks/rondb-standalone-cache,mode=max \
--cache-from type=registry,ref=hopsworks/rondb-standalone-cache,mode=max
build-and-push-cross-platform-image:
runs-on: ubuntu-latest
if: github.repository == 'logicalclocks/rondb-docker' && github.ref_name == 'main'
needs: [integration-test-and-package, build-and-push-ARM64]
steps:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Login to Dockerhub
uses: docker/login-action@v2
with:
username: hopsworks
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Create and push multi-platform image
run: |
docker buildx imagetools create -t hopsworks/rondb-standalone:$RONDB_VERSION_LTS \
hopsworks/$AMD_IMAGE_NAME:$RONDB_VERSION_LTS \
hopsworks/$ARM_IMAGE_NAME:$RONDB_VERSION_LTS
docker buildx imagetools create -t hopsworks/rondb-standalone:$RONDB_VERSION_STABLE \
hopsworks/$AMD_IMAGE_NAME:$RONDB_VERSION_STABLE \
hopsworks/$ARM_IMAGE_NAME:$RONDB_VERSION_STABLE
docker buildx imagetools create -t hopsworks/rondb-standalone:latest \
hopsworks/$AMD_IMAGE_NAME:latest \
hopsworks/$ARM_IMAGE_NAME:latest