diff --git a/.github/workflows/build_slim_packages.yaml b/.github/workflows/build_slim_packages.yaml index 83d7588ef..692e4a987 100644 --- a/.github/workflows/build_slim_packages.yaml +++ b/.github/workflows/build_slim_packages.yaml @@ -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 diff --git a/build b/build index 82946eb7f..120fc5eec 100755 --- a/build +++ b/build @@ -6,7 +6,7 @@ set -euo pipefail -[ ${DEBUG:-0} -eq 1 ] && set -x +[ "${DEBUG:-0}" -eq 1 ] && set -x PROFILE_ARG="$1" ARTIFACT="$2" diff --git a/scripts/pkg-tests.sh b/scripts/pkg-tests.sh index 768a152c0..c17c47ad2 100755 --- a/scripts/pkg-tests.sh +++ b/scripts/pkg-tests.sh @@ -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' diff --git a/scripts/test/emqx-smoke-test.sh b/scripts/test/emqx-smoke-test.sh new file mode 100755 index 000000000..361137bc0 --- /dev/null +++ b/scripts/test/emqx-smoke-test.sh @@ -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