Test Licensed Docker Image (amd64) #55
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # This workflow tests the licensed Docker image (amd64) generated by the licensed_image_build.yml workflow. | |
| # It pulls the image from GitHub Container Registry, clones the cmsis-mlek application repository, | |
| # builds multiple variants of the keyword spotting (kws) application, executes them on FVP models, | |
| # and verifies the output. | |
| name: Test Licensed Docker Image (amd64) | |
| on: | |
| workflow_run: | |
| workflows: ["Licensed Docker Image - Build and Push"] | |
| types: | |
| - completed | |
| workflow_dispatch: | |
| pull_request: | |
| paths: | |
| - .github/workflows/test_licensed_docker_image_amd64.yml | |
| - docker_licensed/** | |
| push: | |
| branches: [main] | |
| #schedule: | |
| # - cron: '00 20 * * 6' | |
| permissions: | |
| contents: read | |
| packages: read | |
| jobs: | |
| CI: | |
| strategy: | |
| matrix: | |
| context: [ | |
| # {proj: kws, build_type: Release-Live_Stream, target_type: SSE-300, model: FVP_Corstone_SSE-300_Ethos-U55, fvp_dir: Corstone-300, mps: mps3}, | |
| # {proj: kws, build_type: Debug-Live_Stream, target_type: SSE-300, model: FVP_Corstone_SSE-300_Ethos-U55, fvp_dir: Corstone-300, mps: mps3}, | |
| {proj: kws, build_type: Release-Data_Array, target_type: SSE-300, model: FVP_Corstone_SSE-300_Ethos-U55, fvp_dir: Corstone-300, mps: mps3}, | |
| {proj: kws, build_type: Debug-Data_Array, target_type: SSE-300, model: FVP_Corstone_SSE-300_Ethos-U55, fvp_dir: Corstone-300, mps: mps3}, | |
| # {proj: kws, build_type: Release-Live_Stream, target_type: SSE-300-U55, model: FVP_Corstone_SSE-300_Ethos-U55, fvp_dir: Corstone-300, mps: mps3}, | |
| # {proj: kws, build_type: Debug-Live_Stream, target_type: SSE-300-U55, model: FVP_Corstone_SSE-300_Ethos-U55, fvp_dir: Corstone-300, mps: mps3}, | |
| {proj: kws, build_type: Release-Data_Array, target_type: SSE-300-U55, model: FVP_Corstone_SSE-300_Ethos-U55, fvp_dir: Corstone-300, mps: mps3}, | |
| {proj: kws, build_type: Debug-Data_Array, target_type: SSE-300-U55, model: FVP_Corstone_SSE-300_Ethos-U55, fvp_dir: Corstone-300, mps: mps3}, | |
| # {proj: kws, build_type: Release-Live_Stream, target_type: SSE-300-U65, model: FVP_Corstone_SSE-300_Ethos-U65, fvp_dir: Corstone-300, mps: mps3}, | |
| # {proj: kws, build_type: Debug-Live_Stream, target_type: SSE-300-U65, model: FVP_Corstone_SSE-300_Ethos-U65, fvp_dir: Corstone-300, mps: mps3}, | |
| {proj: kws, build_type: Release-Data_Array, target_type: SSE-300-U65, model: FVP_Corstone_SSE-300_Ethos-U65, fvp_dir: Corstone-300, mps: mps3}, | |
| {proj: kws, build_type: Debug-Data_Array, target_type: SSE-300-U65, model: FVP_Corstone_SSE-300_Ethos-U65, fvp_dir: Corstone-300, mps: mps3}, | |
| # {proj: kws, build_type: Release-Live_Stream, target_type: SSE-310, model: FVP_Corstone_SSE-310, fvp_dir: Corstone-310, mps: mps3}, | |
| # {proj: kws, build_type: Debug-Live_Stream, target_type: SSE-310, model: FVP_Corstone_SSE-310, fvp_dir: Corstone-310, mps: mps3}, | |
| {proj: kws, build_type: Release-Data_Array, target_type: SSE-310, model: FVP_Corstone_SSE-310, fvp_dir: Corstone-310, mps: mps3}, | |
| {proj: kws, build_type: Debug-Data_Array, target_type: SSE-310, model: FVP_Corstone_SSE-310, fvp_dir: Corstone-310, mps: mps3}, | |
| # {proj: kws, build_type: Release-Live_Stream, target_type: SSE-310-U55, model: FVP_Corstone_SSE-310, fvp_dir: Corstone-310, mps: mps3}, | |
| # {proj: kws, build_type: Debug-Live_Stream, target_type: SSE-310-U55, model: FVP_Corstone_SSE-310, fvp_dir: Corstone-310, mps: mps3}, | |
| {proj: kws, build_type: Release-Data_Array, target_type: SSE-310-U55, model: FVP_Corstone_SSE-310, fvp_dir: Corstone-310, mps: mps3}, | |
| {proj: kws, build_type: Debug-Data_Array, target_type: SSE-310-U55, model: FVP_Corstone_SSE-310, fvp_dir: Corstone-310, mps: mps3}, | |
| # {proj: kws, build_type: Release-Live_Stream, target_type: SSE-310-U65, model: FVP_Corstone_SSE-310_Ethos-U65, fvp_dir: Corstone-310, mps: mps3}, | |
| # {proj: kws, build_type: Debug-Live_Stream, target_type: SSE-310-U65, model: FVP_Corstone_SSE-310_Ethos-U65, fvp_dir: Corstone-310, mps: mps3}, | |
| {proj: kws, build_type: Release-Data_Array, target_type: SSE-310-U65, model: FVP_Corstone_SSE-310_Ethos-U65, fvp_dir: Corstone-310, mps: mps3}, | |
| {proj: kws, build_type: Debug-Data_Array, target_type: SSE-310-U65, model: FVP_Corstone_SSE-310_Ethos-U65, fvp_dir: Corstone-310, mps: mps3}, | |
| # {proj: kws, build_type: Release-Live_Stream, target_type: SSE-315, model: FVP_Corstone_SSE-315, fvp_dir: Corstone-315, mps: mps4}, | |
| # {proj: kws, build_type: Debug-Live_Stream, target_type: SSE-315, model: FVP_Corstone_SSE-315, fvp_dir: Corstone-315, mps: mps4}, | |
| {proj: kws, build_type: Release-Data_Array, target_type: SSE-315, model: FVP_Corstone_SSE-315, fvp_dir: Corstone-315, mps: mps4}, | |
| {proj: kws, build_type: Debug-Data_Array, target_type: SSE-315, model: FVP_Corstone_SSE-315, fvp_dir: Corstone-315, mps: mps4}, | |
| # {proj: kws, build_type: Release-Live_Stream, target_type: SSE-315-U65, model: FVP_Corstone_SSE-315, fvp_dir: Corstone-315, mps: mps4}, | |
| # {proj: kws, build_type: Debug-Live_Stream, target_type: SSE-315-U65, model: FVP_Corstone_SSE-315, fvp_dir: Corstone-315, mps: mps4}, | |
| {proj: kws, build_type: Release-Data_Array, target_type: SSE-315-U65, model: FVP_Corstone_SSE-315, fvp_dir: Corstone-315, mps: mps4}, | |
| {proj: kws, build_type: Debug-Data_Array, target_type: SSE-315-U65, model: FVP_Corstone_SSE-315, fvp_dir: Corstone-315, mps: mps4}, | |
| # {proj: kws, build_type: Release-Live_Stream, target_type: SSE-320, model: FVP_Corstone_SSE-320, fvp_dir: Corstone-320, mps: mps4}, | |
| # {proj: kws, build_type: Debug-Live_Stream, target_type: SSE-320, model: FVP_Corstone_SSE-320, fvp_dir: Corstone-320, mps: mps4}, | |
| {proj: kws, build_type: Release-Data_Array, target_type: SSE-320, model: FVP_Corstone_SSE-320, fvp_dir: Corstone-320, mps: mps4}, | |
| {proj: kws, build_type: Debug-Data_Array, target_type: SSE-320, model: FVP_Corstone_SSE-320, fvp_dir: Corstone-320, mps: mps4}, | |
| # {proj: kws, build_type: Release-Live_Stream, target_type: SSE-320-U85, model: FVP_Corstone_SSE-320, fvp_dir: Corstone-320, mps: mps4}, | |
| # {proj: kws, build_type: Debug-Live_Stream, target_type: SSE-320-U85, model: FVP_Corstone_SSE-320, fvp_dir: Corstone-320, mps: mps4}, | |
| {proj: kws, build_type: Release-Data_Array, target_type: SSE-320-U85, model: FVP_Corstone_SSE-320, fvp_dir: Corstone-320, mps: mps4}, | |
| {proj: kws, build_type: Debug-Data_Array, target_type: SSE-320-U85, model: FVP_Corstone_SSE-320, fvp_dir: Corstone-320, mps: mps4} | |
| ] | |
| fail-fast: false | |
| if: ${{ github.event_name != 'workflow_run' || github.event.workflow_run.conclusion == 'success' }} | |
| runs-on: ubuntu-latest | |
| env: | |
| DOCKER_IMAGE: ghcr.io/arm-software/avh-mlops/arm-mlops-docker-licensed:latest-amd64 | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v6 | |
| - name: Log in to GitHub Container Registry | |
| uses: docker/login-action@v4 | |
| with: | |
| registry: ghcr.io | |
| username: ${{ github.actor }} | |
| password: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Pull Licensed Docker image (amd64) | |
| run: docker pull ${{ env.DOCKER_IMAGE }} | |
| - name: Start Docker container | |
| run: | | |
| docker run -d --name test_container \ | |
| ${{ env.DOCKER_IMAGE }} \ | |
| sleep infinity | |
| - name: Clone application repository | |
| run: | | |
| docker exec test_container runops \ | |
| git clone https://github.com/Arm-Examples/cmsis-mlek.git /home/arm_mlops_docker/cmsis-mlek | |
| - name: Initialize CMSIS pack root folder | |
| run: | | |
| docker exec test_container runops bash -c "\ | |
| cpackget init https://www.keil.com/pack/index.pidx && \ | |
| cpackget update-index" | |
| - name: Add local CMSIS packs | |
| run: | | |
| docker exec -w /home/arm_mlops_docker/cmsis-mlek test_container runops \ | |
| cpackget add ./ARM.CMSIS-MLEK.pdsc | |
| - name: Build Test | |
| run: | | |
| docker exec -w /home/arm_mlops_docker/cmsis-mlek/template/audio test_container runops \ | |
| cbuild mlek_audio.csolution.yml --update-rte --packs --no-schema-check \ | |
| --context ${{matrix.context.proj}}.${{matrix.context.build_type}}+${{matrix.context.target_type}} \ | |
| --toolchain AC6 --rebuild | |
| - name: Execution Test | |
| run: | | |
| docker exec -w /home/arm_mlops_docker/cmsis-mlek/template/audio test_container runops \ | |
| ${{ matrix.context.model }} \ | |
| -a ./out/${{matrix.context.proj}}/${{matrix.context.target_type}}/${{matrix.context.build_type}}/${{matrix.context.proj}}.axf \ | |
| -f ./board/${{matrix.context.fvp_dir}}/fvp_config.txt \ | |
| -C ${{matrix.context.mps}}_board.telnetterminal0.start_telnet=0 \ | |
| -C ${{matrix.context.mps}}_board.uart0.out_file=stdout_${{matrix.context.build_type}}_${{matrix.context.target_type}}.log \ | |
| --simlimit 30 | |
| - name: Show and check FVP UART output | |
| run: | | |
| docker exec -w /home/arm_mlops_docker/cmsis-mlek/template/audio test_container runops bash -c ' | |
| echo "Show FVP UART output..." | |
| cat stdout_${{matrix.context.build_type}}_${{matrix.context.target_type}}.log | |
| echo "Checking FVP UART output..." | |
| test "$(grep "FAIL: " stdout_${{matrix.context.build_type}}_${{matrix.context.target_type}}.log | wc -l)" -eq 0 | |
| ' | |
| - name: Copy FVP UART output log | |
| if: always() | |
| run: | | |
| docker cp test_container:/home/arm_mlops_docker/cmsis-mlek/template/audio/stdout_${{matrix.context.build_type}}_${{matrix.context.target_type}}.log ./ || true | |
| - name: Upload FVP UART output log | |
| if: always() | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: stdout_${{matrix.context.build_type}}_${{matrix.context.target_type}}.log | |
| path: ./stdout_${{matrix.context.build_type}}_${{matrix.context.target_type}}.log | |
| - name: Cleanup | |
| if: always() | |
| run: docker rm -f test_container |