Skip to content

mbed-edge-examples-make-and-test #45

mbed-edge-examples-make-and-test

mbed-edge-examples-make-and-test #45

Workflow file for this run

name: mbed-edge-examples-make-and-test
on:
workflow_dispatch:
push:
paths-ignore:
- '**/README.md'
schedule:
# Once week 04:14 on Saturday
- cron: '14 4 * * Sat'
# This allows a subsequently queued workflow run to interrupt previous runs
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
make-examples-and-test:
runs-on: client
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
EDGE_LOG: edge-core.log
PT_LOG: pt-example.log
SCRIPTS_INTERNAL: scripts-internal
RESULT_LOG_FILE: result_pytest.log
RESULT_HTML: result.html
RESULT_XML: result.xml
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
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 cmake
# sudo apt install libmosquitto-dev mosquitto-clients
# sudo apt install libglib2.0-dev
# sudo apt install doxygen
- name: git submodule update
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 >../../../${{ env.EDGE_LOG }} &
# 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: |
CONFIG_FILE=${{ env.SYSTEM_TESTS }}/prod-edge-core-config.json
cp .github/workflows/prod-edge-core-config.json "$CONFIG_FILE"
jq '.api_key = "${{ env.API_KEY }}"' "$CONFIG_FILE" > tmp.json && mv tmp.json "$CONFIG_FILE"
- name: Start pt-example
run: |
cd build-debug
./bin/pt-example -n pt-example >../../${{ env.PT_LOG }} &
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
./install.sh
pytest -v --config_path=prod-edge-core-config.json --html=../${{ env.RESULT_HTML }} \
--self-contained-html -log_cli=true --log-cli-level=DEBUG \
--log-file=../${{ env.RESULT_LOG_FILE }} --log-file-level=DEBUG \
--junitxml=../${{ env.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 - remove mcc_config -folder.
if: always()
run: |
# Delete the old identity/MCC contents to change identity in the next run
ls -al
rm -rf lib/mbed-edge/build/mcc_config
rm -rf mbed-edge-examples/lib/mbed-edge/build/mcc_config
rm -rf lib/mbed-edge/config/mbed_cloud_dev_credentials.c
rm -rf pelion-system-tests/prod-edge-core-config.json
- 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 clitest logs and results
uses: actions/upload-artifact@v3
if: always()
with:
name: mbed-edge-examples-logs
path: '**/*.log'
if-no-files-found: error
- name: Publish pytest result
uses: EnricoMi/publish-unit-test-result-action/composite@v2
if: always()
with:
junit_files: ${{ env.RESULT_XML }}
report_individual_runs: true
action_fail: true
action_fail_on_inconclusive: true
check_name: mbed-edge-examples-result
- name: Post status to Slack testing_builds
if: always()
uses: act10ns/slack@v2
with:
status: ${{ job.status }}
channel: '#testing_builds'
docker-build:
runs-on: client
env:
ACCESS_TOKEN: ${{ secrets.ACCESS_TOKEN }}
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
steps:
- name: Checkout continuous-integration
uses: actions/checkout@v4
- name: git submodule update
run: git submodule update --init --recursive
- name: Docker build pt-example
run: docker build -t pt-example:latest -f ./Dockerfile.pt-example .
# Don't run it - it will run forever essentially.
- name: Docker build pt-example
run: docker build -t simple-example:latest -f ./Dockerfile.simple-pt-example .
# Don't run it - it will run forever essentially.
- name: Docker system prune
if: always()
run: docker system prune -f
- name: Post status to Slack testing_builds
if: always()
uses: act10ns/slack@v2
with:
status: ${{ job.status }}
channel: '#testing_builds'