From 6faa17397032e689679814beeeeca25d18ebf76b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Janne=20Kiiskil=C3=A4?= Date: Thu, 11 Jan 2024 16:24:03 +0200 Subject: [PATCH] make-and-test - add pt-example tests to action --- .github/workflows/make.yml | 111 ++++++++++++++++++- .github/workflows/prod-edge-core-config.json | 24 ++++ 2 files changed, 130 insertions(+), 5 deletions(-) create mode 100644 .github/workflows/prod-edge-core-config.json diff --git a/.github/workflows/make.yml b/.github/workflows/make.yml index 074050b..5b8f703 100644 --- a/.github/workflows/make.yml +++ b/.github/workflows/make.yml @@ -1,4 +1,4 @@ -name: mbed-edge-examples-make +name: mbed-edge-examples-make-and-test on: workflow_dispatch: @@ -12,17 +12,24 @@ concurrency: cancel-in-progress: true jobs: - make-examples: + make-examples-and-test: runs-on: edge-example-ci env: ACCESS_TOKEN: ${{ secrets.ACCESS_TOKEN }} + API_KEY: ${{ secrets.EDGE_EXAMPLES_API_KEY }} + DEV_CERT: ${{ secrets.EDGE_EXAMPLES_DEV_CERT}} + SYSTEM_TESTS: pelion-system-tests + SCRIPTS_INTERNAL: scripts-internal + RESULT_LOG_FILE: result_pytest.log + RESULT_HTML: result.html + RESULT_XML: result.xml steps: - name: Checkout continuous-integration uses: actions/checkout@v4 # Self hosted has dependencies in place already # - name: Install dependencies # run: | - # sudo apt install build-essential git libc6-dev + # sudo apt install build-essential git libc6-dev cmake # sudo apt install libmosquitto-dev mosquitto-clients # sudo apt install libglib2.0-dev # sudo apt install doxygen @@ -30,9 +37,103 @@ jobs: run: git submodule update --init --recursive # This builds release, debug and sanitize versions. - run: make all - + - name: Build edge-core + run: | + echo "$DEV_CERT" > lib/mbed-edge/config/mbed_cloud_dev_credentials.c + cd lib/mbed-edge + if [[ ! -d "build" ]]; then + rm -rf build + fi + mkdir -p build + cd build + cmake -DDEVELOPER_MODE=ON -DFIRMWARE_UPDATE=OFF .. + make -j$(nproc) + - name: Start edge-core + run: | + cd lib/mbed-edge/build + bin/edge-core & + # Wait a bit for it to connect.. + sleep 5 + - name: Check out ${{ env.SYSTEM_TESTS }} repository + uses: actions/checkout@v4 + with: + repository: PelionIoT/${{ env.SYSTEM_TESTS }} + token: ${{ secrets.ACCESS_TOKEN }} + path: ${{ env.SYSTEM_TESTS }} + - name: Check out $${{ env.SCRIPTS_INTERNAL }} repository + uses: actions/checkout@v4 + with: + repository: PelionIoT/${{ env.SCRIPTS_INTERNAL }} + token: ${{ secrets.ACCESS_TOKEN }} + path: ${{ env.SCRIPTS_INTERNAL }} + - name: Create pytest config + run: | + cp .github/workflows/prod-edge-core-config.json ${{ env.SYSTEM_TESTS }}/edge-core-config.json + CONFIG_FILE=${{ env.SYSTEM_TESTS }}/edge-core-config.json + jq '.api_key = "${{ secrets[env.API_KEY_SECRET_NAME] }}"' "$CONFIG_FILE" > tmp.json && mv tmp.json "$CONFIG_FILE" + - name: Start pt-example + run: | + cd build-debug + ./bin/pt-example -n pt-example & + sleep 5 + - name: Install Python + uses: actions/setup-python@v4 + with: + python-version: '3.8' + - name: Run pt-example-tests + run: | + cd ${{ env.SYSTEM_TESTS }} + # Check if venv folder exists, if not create it + if [[ ! -d "venv" ]]; then + python3 -m venv venv + fi + source venv/bin/activate + pip install --upgrade pip + pip install -U -r requirements.txt + pip install packages/*.whl + pip install -e systemtest-library + pytest -v --config_path=edge-core-config.json --html=$RESULT_HTML \ + --self-contained-html -log_cli=true --log-cli-level=DEBUG \ + --log-file=$RESULT_LOG_FILE --log-file-level=DEBUG \ + --junitxml=$RESULT_XML test_cases/edge/test_pt_example.py + deactivate + - name: Cleanup - delete device from Izuma DM + if: always() + run: | + devid=$(curl --no-progress-meter localhost:8080/status | jq -r '."endpoint-name"') + if [[ -n "$devid" ]]; then + echo "Delete $devid via Izuma V3 REST API" + scripts-internal/cloud/delete-device.sh $devid ${{ secrets.EDGE_EXAMPLES_API_KEY }} + fi + - name: Cleanup - kill edge-core process + if: always() + run: | + edgepid=$(ps -aux |grep bin/edge-core | awk '{print $2}' | head -n1) + if [[ -n "$edgepid" ]]; then + # Kill edge-core if pid is not empty + echo "Kill edge-core with pid: $edgepid" + kill $edgepid + fi + - name: Cleanup - kill pt-example + if: always() + run: | + ptpid=$(ps -aux |grep pt-example | awk '{print $2}' | head -n1) + if [[ -n "$ptpid" ]]; then + # Kill pt-example if pid is not empty + echo "Kill pt-example with pid: $ptpid" + kill $ptpid + fi + - name: Archive the logs and publish the results + if: always() + uses: ./.github/actions/archive-publish + with: + log_path: | + ${{ env.SYSTEM_TESTS }}/*.log + ${{ env.SYSTEM_TESTS }}/${{ env.RESULT_HTML }} + junit_files: ${{ env.SYSTEM_TESTS }}/${{ env.RESULT_XML }} + docker-build: - runs-on: edge-example-ci + runs-on: ubuntu22.04 env: ACCESS_TOKEN: ${{ secrets.ACCESS_TOKEN }} steps: diff --git a/.github/workflows/prod-edge-core-config.json b/.github/workflows/prod-edge-core-config.json new file mode 100644 index 0000000..ec42969 --- /dev/null +++ b/.github/workflows/prod-edge-core-config.json @@ -0,0 +1,24 @@ +{ + "api_gw" : "https://api.us-east-1.mbedcloud.com", + "api_key" : "", + "account_id" : "0158778f9f1002420a014c1100000000", + "edge_k8s_url" : "https://edge-k8s.us-east-1.mbedcloud.com", + "edge_build_type" : "edge-core", + "internal_id" : "", + "pcr_repo_path" : "containers.us-east-1.mbedcloud.com", + "connection_type" : "local", + "pt_example_skip_autostart" : false, + "pt_example_options" : "-n pt-example-edge-ci", + "edge_local_host_port" : "8080", + "callback_handler" : "https://callback-prod.kiiskila.cc", + "has_remote_terminal" : true, + "rest_user_agent" : "edge-examples-ci", + "endpoint_count" : "3", + "edge_skip_release" : true, + "test_edge_billing" : true, + "dockerhub_auth" : { + "username" : "pelionservices", + "email" : "DMdevopsandsre@izumanetworks.com", + "password" : "" + } +}