name: Docker image tests concurrency: group: docker-tests-${{ github.event_name }}-${{ github.ref }} cancel-in-progress: true on: workflow_call: permissions: contents: read jobs: basic-tests: runs-on: ${{ endsWith(github.repository, '/emqx') && 'ubuntu-22.04' || fromJSON('["self-hosted","ephemeral","linux","x64"]') }} defaults: run: shell: bash strategy: fail-fast: false matrix: profile: - ["emqx", "emqx/emqx:5.0.16"] - ["emqx-enterprise", "emqx/emqx-enterprise:5.0.1"] env: EMQX_NAME: ${{ matrix.profile[0] }} EMQX_IMAGE_OLD_VERSION_TAG: ${{ matrix.profile[1] }} steps: - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - name: Set up environment id: env run: | source env.sh PKG_VSN=$(docker run --rm -v $(pwd):$(pwd) -w $(pwd) -u $(id -u) "$EMQX_BUILDER" ./pkg-vsn.sh "$EMQX_NAME") echo "PKG_VSN=$PKG_VSN" >> "$GITHUB_ENV" - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 with: name: ${{ env.EMQX_NAME }}-docker path: /tmp - name: load docker image run: | _EMQX_DOCKER_IMAGE_TAG=$(docker load < /tmp/${EMQX_NAME}-docker-${PKG_VSN}.tar.gz 2>/dev/null | sed 's/Loaded image: //g') echo "_EMQX_DOCKER_IMAGE_TAG=$_EMQX_DOCKER_IMAGE_TAG" >> $GITHUB_ENV - name: dashboard tests working-directory: ./scripts/ui-tests run: | set -eu docker compose up --abort-on-container-exit --exit-code-from selenium - name: test two nodes cluster with proto_dist=inet_tls in docker run: | ## -d 1 means only put node 1 (latest version) behind haproxy ./scripts/test/start-two-nodes-in-docker.sh -d 1 -P $_EMQX_DOCKER_IMAGE_TAG $EMQX_IMAGE_OLD_VERSION_TAG HTTP_PORT=$(docker inspect --format='{{(index (index .NetworkSettings.Ports "18083/tcp") 0).HostPort}}' haproxy) ./scripts/test/emqx-smoke-test.sh localhost $HTTP_PORT ## -c menas 'cleanup' ./scripts/test/start-two-nodes-in-docker.sh -c - name: cleanup if: always() working-directory: ./scripts/ui-tests run: | docker compose rm -fs paho-mqtt-testing: runs-on: ${{ github.repository_owner == 'emqx' && fromJSON('["self-hosted","ephemeral","linux","x64"]') || 'ubuntu-22.04' }} defaults: run: shell: bash env: EMQX_NAME: ${{ matrix.profile }} strategy: fail-fast: false matrix: profile: - emqx - emqx-enterprise - emqx-elixir steps: - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - name: Set up environment id: env run: | source env.sh if [ "$EMQX_NAME" = "emqx-enterprise" ]; then _EMQX_TEST_DB_BACKEND='rlog' else _EMQX_TEST_DB_BACKEND='mnesia' fi PKG_VSN=$(docker run --rm -v $(pwd):$(pwd) -w $(pwd) -u $(id -u) "$EMQX_BUILDER" ./pkg-vsn.sh "$EMQX_NAME") echo "PKG_VSN=$PKG_VSN" >> "$GITHUB_ENV" - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 with: name: ${{ env.EMQX_NAME }}-docker path: /tmp - name: load docker image run: | EMQX_IMAGE_TAG=$(docker load < /tmp/${EMQX_NAME}-docker-${PKG_VSN}.tar.gz 2>/dev/null | sed 's/Loaded image: //g') echo "_EMQX_DOCKER_IMAGE_TAG=$EMQX_IMAGE_TAG" >> $GITHUB_ENV - name: run emqx timeout-minutes: 5 run: | ./.ci/docker-compose-file/scripts/run-emqx.sh $_EMQX_DOCKER_IMAGE_TAG $_EMQX_TEST_DB_BACKEND - name: make paho tests run: | if ! docker exec -i python /scripts/pytest.sh "$_EMQX_TEST_DB_BACKEND"; then echo "DUMP_CONTAINER_LOGS_BGN" echo "============== haproxy ==============" docker logs haproxy echo "============== node1 ==============" docker logs node1.emqx.io echo "============== node2 ==============" docker logs node2.emqx.io echo "DUMP_CONTAINER_LOGS_END" exit 1 fi # simple smoke test for node_dump - name: test node_dump run: | docker exec -t -u root node1.emqx.io bash -c 'apt-get -y update && apt-get -y install net-tools' docker exec -t -u root node1.emqx.io node_dump