ci: test docker images and packages in the same way

This commit is contained in:
Ivan Dyachkov 2023-02-17 16:18:20 +01:00
parent b90d371836
commit 739455d844
4 changed files with 44 additions and 40 deletions

View File

@ -155,7 +155,7 @@ jobs:
path: _packages/**/*
docker:
runs-on: ubuntu-20.04
runs-on: ubuntu-22.04
strategy:
fail-fast: false
@ -168,32 +168,35 @@ jobs:
- uses: actions/checkout@v3
- name: prepare
run: |
echo "EMQX_NAME=${{ matrix.profile }}" >> $GITHUB_ENV
- name: build and test docker image
EMQX_NAME=${{ matrix.profile }}
PKG_VSN=${PKG_VSN:-$(./pkg-vsn.sh $EMQX_NAME)}
EMQX_IMAGE_TAG=emqx/$EMQX_NAME:test
echo "EMQX_NAME=$EMQX_NAME" >> $GITHUB_ENV
echo "PKG_VSN=$PKG_VSN" >> $GITHUB_ENV
echo "EMQX_IMAGE_TAG=$EMQX_IMAGE_TAG" >> $GITHUB_ENV
- uses: docker/setup-buildx-action@v2
- name: build and export to Docker
uses: docker/build-push-action@v4
with:
context: .
file: ./deploy/docker/Dockerfile
load: true
tags: ${{ env.EMQX_IMAGE_TAG }}
build-args: |
EMQX_NAME=${{ env.EMQX_NAME }}
- name: test docker image
run: |
set -x
make $EMQX_NAME-docker
PKG_VSN="${PKG_VSN:-$(./pkg-vsn.sh $EMQX_NAME)}"
EMQX_IMAGE_TAG="${EMQX_IMAGE_TAG:-emqx/$EMQX_NAME:$PKG_VSN}"
CID=$(docker run -d --rm -P $EMQX_IMAGE_TAG)
HTTP_PORT=$(docker inspect --format='{{(index (index .NetworkSettings.Ports "18083/tcp") 0).HostPort}}' $CID)
IDLE_TIME=0
while ! curl http://127.0.0.1:$HTTP_PORT/status >/dev/null 2>&1; do
if [ $IDLE_TIME -gt 5 ]
then
echo "emqx running error"
docker rm -f $CID
exit 1
fi
sleep 5
IDLE_TIME=$((IDLE_TIME+1))
done
./scripts/test/emqx-smoke-test.sh localhost $HTTP_PORT
docker stop $CID
- name: export docker image
run: |
docker save $EMQX_IMAGE_TAG | gzip > $EMQX_NAME-$PKG_VSN.tar.gz
- uses: actions/upload-artifact@v3
with:
name: "${{ matrix.profile }}-docker"
path: "*.tar.gz"
path: "${{ env.EMQX_NAME }}-${{ env.PKG_VSN }}.tar.gz"
spellcheck:
needs: linux

2
build
View File

@ -6,7 +6,7 @@
set -euo pipefail
[ ${DEBUG:-0} -eq 1 ] && set -x
[ "${DEBUG:-0}" -eq 1 ] && set -x
PROFILE_ARG="$1"
ARTIFACT="$2"

View File

@ -103,16 +103,7 @@ emqx_test(){
cat "${PACKAGE_PATH}"/emqx/log/emqx.log.1 || true
exit 1
fi
IDLE_TIME=0
while ! curl http://127.0.0.1:18083/status >/dev/null 2>&1; do
if [ $IDLE_TIME -gt 10 ]
then
echo "emqx running error"
exit 1
fi
sleep 10
IDLE_TIME=$((IDLE_TIME+1))
done
"$SCRIPTS/test/emqx-smoke-test.sh" 127.0.0.1 18083
pytest -v /paho-mqtt-testing/interoperability/test_client/V5/test_connect.py::test_basic
if ! "${PACKAGE_PATH}"/emqx/bin/emqx stop; then
cat "${PACKAGE_PATH}"/emqx/log/erlang.log.1 || true
@ -208,16 +199,7 @@ EOF
cat /var/log/emqx/emqx.log.1 || true
exit 1
fi
IDLE_TIME=0
while ! curl http://127.0.0.1:18083/status >/dev/null 2>&1; do
if [ $IDLE_TIME -gt 10 ]
then
echo "emqx running error"
exit 1
fi
sleep 10
IDLE_TIME=$((IDLE_TIME+1))
done
"$SCRIPTS/test/emqx-smoke-test.sh" 127.0.0.1 18083
pytest -v /paho-mqtt-testing/interoperability/test_client/V5/test_connect.py::test_basic
# shellcheck disable=SC2009 # pgrep does not support Extended Regular Expressions
ps -ef | grep -E '\-progname\s.+emqx\s'

19
scripts/test/emqx-smoke-test.sh Executable file
View File

@ -0,0 +1,19 @@
#!/usr/bin/env bash
set -euo pipefail
[ $# -ne 2 ] && { echo "Usage: $0 ip port"; exit 1; }
IP=$1
PORT=$2
URL="http://$IP:$PORT/status"
ATTEMPTS=10
while ! curl "$URL" >/dev/null 2>&1; do
if [ $ATTEMPTS -eq 0 ]; then
echo "emqx is not responding on $URL"
exit 1
fi
sleep 5
ATTEMPTS=$((ATTEMPTS-1))
done