157 lines
5.3 KiB
YAML
157 lines
5.3 KiB
YAML
name: Helm tests
|
|
|
|
concurrency:
|
|
group: helm-${{ github.event_name }}-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
on:
|
|
workflow_call:
|
|
inputs:
|
|
version-emqx:
|
|
required: true
|
|
type: string
|
|
version-emqx-enterprise:
|
|
required: true
|
|
type: string
|
|
|
|
# on:
|
|
# push:
|
|
# branches:
|
|
# - master
|
|
# - 'ci/**'
|
|
# tags:
|
|
# - v*
|
|
# pull_request:
|
|
|
|
jobs:
|
|
helm_test:
|
|
runs-on: ubuntu-22.04
|
|
env:
|
|
EMQX_NAME: ${{ matrix.profile }}
|
|
PKG_VSN: ${{ matrix.profile == 'emqx-enterprise' && inputs.version-emqx-enterprise || inputs.version-emqx }}
|
|
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
discovery:
|
|
- k8s
|
|
- dns
|
|
profile:
|
|
- emqx
|
|
- emqx-enterprise
|
|
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
with:
|
|
path: source
|
|
- uses: actions/download-artifact@v3
|
|
with:
|
|
name: "${{ env.EMQX_NAME }}-docker"
|
|
path: /tmp
|
|
- name: load docker image
|
|
run: |
|
|
EMQX_TAG=$(docker load < /tmp/${EMQX_NAME}-${PKG_VSN}.tar.gz 2>/dev/null | sed 's/Loaded image: //g')
|
|
echo "EMQX_TAG=$EMQX_TAG" >> $GITHUB_ENV
|
|
echo "TARGET=emqx/${EMQX_NAME}" >> $GITHUB_ENV
|
|
- run: minikube start
|
|
- run: minikube image load $TARGET:$EMQX_TAG
|
|
- name: run emqx on chart (k8s)
|
|
if: matrix.discovery == 'k8s'
|
|
working-directory: source
|
|
run: |
|
|
helm install ${EMQX_NAME} \
|
|
--set emqxConfig.EMQX_CLUSTER__DISCOVERY_STRATEGY="k8s" \
|
|
--set emqxConfig.EMQX_CLUSTER__K8S__APISERVER="https://kubernetes.default.svc:443" \
|
|
--set emqxConfig.EMQX_CLUSTER__K8S__SERVICE_NAME="${EMQX_NAME}-headless" \
|
|
--set emqxConfig.EMQX_CLUSTER__K8S__NAMESPACE="default" \
|
|
--set image.repository=$TARGET \
|
|
--set image.pullPolicy=Never \
|
|
--set image.tag=$EMQX_TAG \
|
|
--set emqxAclConfig="" \
|
|
--set emqxConfig.EMQX_MQTT__RETRY_INTERVAL=2s \
|
|
--set emqxConfig.EMQX_MQTT__MAX_TOPIC_ALIAS=10 \
|
|
--set emqxConfig.EMQX_AUTHORIZATION__SOURCES=[] \
|
|
--set emqxConfig.EMQX_AUTHORIZATION__NO_MATCH=allow \
|
|
deploy/charts/${EMQX_NAME} \
|
|
--debug
|
|
- name: run emqx on chart (dns)
|
|
if: matrix.discovery == 'dns'
|
|
working-directory: source
|
|
run: |
|
|
helm install ${EMQX_NAME} \
|
|
--set emqxConfig.EMQX_CLUSTER__DISCOVERY_STRATEGY="dns" \
|
|
--set emqxConfig.EMQX_CLUSTER__DNS__RECORD_TYPE="srv" \
|
|
--set emqxConfig.EMQX_CLUSTER__DNS__NAME="${EMQX_NAME}-headless.default.svc.cluster.local" \
|
|
--set image.repository=$TARGET \
|
|
--set image.pullPolicy=Never \
|
|
--set image.tag=$EMQX_TAG \
|
|
--set emqxAclConfig="" \
|
|
--set emqxConfig.EMQX_MQTT__RETRY_INTERVAL=2s \
|
|
--set emqxConfig.EMQX_MQTT__MAX_TOPIC_ALIAS=10 \
|
|
--set emqxConfig.EMQX_AUTHORIZATION__SOURCES=[] \
|
|
--set emqxConfig.EMQX_AUTHORIZATION__NO_MATCH=allow \
|
|
deploy/charts/${EMQX_NAME} \
|
|
--debug
|
|
- name: waiting emqx started
|
|
timeout-minutes: 10
|
|
run: |
|
|
while [ "$(kubectl get StatefulSet -l app.kubernetes.io/instance=${EMQX_NAME} -o jsonpath='{.items[0].status.replicas}')" \
|
|
!= "$(kubectl get StatefulSet -l app.kubernetes.io/instance=${EMQX_NAME} -o jsonpath='{.items[0].status.readyReplicas}')" ]; do
|
|
echo "==============================";
|
|
kubectl get pods;
|
|
echo "==============================";
|
|
echo "waiting emqx started";
|
|
sleep 10;
|
|
done
|
|
- name: Get Token
|
|
timeout-minutes: 1
|
|
run: |
|
|
kubectl port-forward service/${EMQX_NAME} 18083:18083 > /dev/null &
|
|
|
|
while
|
|
[ "$(curl --silent -X 'GET' 'http://127.0.0.1:18083/api/v5/status' | tail -n1)" != "emqx is running" ]
|
|
do
|
|
echo "waiting emqx"
|
|
sleep 1
|
|
done
|
|
|
|
echo "TOKEN=$(curl --silent -X 'POST' 'http://127.0.0.1:18083/api/v5/login' -H 'accept: application/json' -H 'Content-Type: application/json' -d '{"username": "admin","password": "public"}' | jq -r ".token")" >> $GITHUB_ENV
|
|
|
|
- name: Check cluster
|
|
timeout-minutes: 10
|
|
run: |
|
|
while
|
|
[ "$(curl --silent -H "Authorization: Bearer $TOKEN" -X GET http://127.0.0.1:18083/api/v5/cluster| jq '.nodes|length')" != "3" ];
|
|
do
|
|
echo "waiting ${EMQX_NAME} cluster scale"
|
|
sleep 1
|
|
done
|
|
- uses: actions/checkout@v3
|
|
with:
|
|
repository: emqx/paho.mqtt.testing
|
|
ref: develop-5.0
|
|
path: paho.mqtt.testing
|
|
- name: install pytest
|
|
run: |
|
|
pip install pytest==7.1.2 pytest-retry
|
|
echo "$HOME/.local/bin" >> $GITHUB_PATH
|
|
- name: run paho test
|
|
timeout-minutes: 10
|
|
run: |
|
|
port_connected () {
|
|
local server="$1"
|
|
local port="$2"
|
|
echo > /dev/tcp/${server}/${port} 2>/dev/null
|
|
}
|
|
|
|
kubectl port-forward service/${EMQX_NAME} 1883:1883 > /dev/null &
|
|
|
|
while ! port_connected localhost 1883; do
|
|
echo server not listening yet...
|
|
sleep 10
|
|
done
|
|
|
|
pytest --retries 3 -v paho.mqtt.testing/interoperability/test_client/V5/test_connect.py -k test_basic --host "127.0.0.1"
|
|
- if: failure()
|
|
run: kubectl logs -l "app.kubernetes.io/instance=${EMQX_NAME}" -c emqx --tail=1000
|