[thread-cert] cache Border Router test results (#7303)

This commit caches Border Router test results so that success BR tests
will be skipped when re-running the workflow.

The cache keys are chosen in a way that:
- Each new PR push will trigger cache miss and run the tests
- Each ot-br-posix change will trigger cache miss and run the tests
This commit is contained in:
Simon Lin
2022-01-11 23:25:21 -08:00
committed by GitHub
parent cb31c67e54
commit 3c260bd7c7
2 changed files with 58 additions and 2 deletions
+56 -2
View File
@@ -60,33 +60,53 @@ jobs:
- uses: actions/checkout@v2
with:
submodules: true
- name: Get Border Router Test ID
id: unique_action_id
env:
GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
run: |
./script/git-tool clone https://github.com/openthread/ot-br-posix.git --depth 1 "/tmp/otbr_unique_action_id"
echo ::set-output name=id::${GITHUB_WORKFLOW}-${GITHUB_JOB}-${GITHUB_RUN_ID}-$(cd /tmp/otbr_unique_action_id/ && git rev-parse HEAD)
- name: Check cached result
id: check_cache_result
uses: actions/cache@v2
with:
path: |
_test_complete_
key: "_test_complete_${{ steps.unique_action_id.outputs.id }}"
- name: Build OTBR Docker
if: ${{ success() && steps.check_cache_result.outputs.cache-hit != 'true' }}
env:
GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
run: |
./script/test build_otbr_docker
- name: Bootstrap
if: ${{ success() && steps.check_cache_result.outputs.cache-hit != 'true' }}
run: |
sudo rm /etc/apt/sources.list.d/* && sudo apt-get update
sudo apt-get --no-install-recommends install -y python3-setuptools python3-wheel ninja-build socat lcov
python3 -m pip install -r tests/scripts/thread-cert/requirements.txt
- name: Build
if: ${{ success() && steps.check_cache_result.outputs.cache-hit != 'true' }}
run: |
./script/test build
- name: Get Thread-Wireshark
if: ${{ success() && steps.check_cache_result.outputs.cache-hit != 'true' }}
run: |
./script/test get_thread_wireshark
- name: Run
if: ${{ success() && steps.check_cache_result.outputs.cache-hit != 'true' }}
run: |
export CI_ENV="$(bash <(curl -s https://codecov.io/env)) -e GITHUB_ACTIONS -e COVERAGE"
echo "CI_ENV=${CI_ENV}"
sudo -E ./script/test cert_suite ./tests/scripts/thread-cert/backbone/*.py || (sudo chmod a+r *.log *.json *.pcap && false)
- uses: actions/upload-artifact@v2
if: ${{ success() && steps.check_cache_result.outputs.cache-hit != 'true' }}
with:
name: cov-thread-1-2-backbone-docker
path: /tmp/coverage/
- uses: actions/upload-artifact@v2
if: ${{ failure() }}
if: ${{ failure() && steps.check_cache_result.outputs.cache-hit != 'true' }}
with:
name: thread-1-2-backbone-results
path: |
@@ -96,12 +116,18 @@ jobs:
coredump_*
otbr-agent_*
- name: Generate Coverage
if: ${{ success() && steps.check_cache_result.outputs.cache-hit != 'true' }}
run: |
./script/test generate_coverage gcc
- uses: actions/upload-artifact@v2
if: ${{ success() && steps.check_cache_result.outputs.cache-hit != 'true' }}
with:
name: cov-thread-1-2-backbone
path: tmp/coverage.info
- name: Cache test result
if: ${{ success() && steps.check_cache_result.outputs.cache-hit != 'true' }}
run: |
mkdir _test_complete_
thread-border-router:
runs-on: ubuntu-20.04
@@ -130,34 +156,54 @@ jobs:
MAX_JOBS: 3
steps:
- uses: actions/checkout@v2
- name: Get Border Router Test ID
id: unique_action_id
env:
GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
run: |
./script/git-tool clone https://github.com/openthread/ot-br-posix.git --depth 1 "/tmp/otbr_unique_action_id"
echo ::set-output name=id::${GITHUB_WORKFLOW}-${GITHUB_JOB}-${GITHUB_RUN_ID}-$(cd /tmp/otbr_unique_action_id/ && git rev-parse HEAD)-${{matrix.otbr_mdns}}-trel${{matrix.otbr_trel}}
- name: Check cached result
id: check_cache_result
uses: actions/cache@v2
with:
path: |
_test_complete_
key: "_test_complete_${{ steps.unique_action_id.outputs.id }}"
- name: Build OTBR Docker
if: ${{ success() && steps.check_cache_result.outputs.cache-hit != 'true' }}
env:
GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
TREL: ${{ matrix.otbr_trel }}
run: |
./script/test build_otbr_docker
- name: Bootstrap
if: ${{ success() && steps.check_cache_result.outputs.cache-hit != 'true' }}
run: |
sudo rm /etc/apt/sources.list.d/* && sudo apt-get update
sudo apt-get --no-install-recommends install -y python3-setuptools python3-wheel ninja-build socat lcov
python3 -m pip install -r tests/scripts/thread-cert/requirements.txt
- name: Build
if: ${{ success() && steps.check_cache_result.outputs.cache-hit != 'true' }}
run: |
./script/test build
- name: Get Thread-Wireshark
if: ${{ success() && steps.check_cache_result.outputs.cache-hit != 'true' }}
run: |
./script/test get_thread_wireshark
- name: Run
if: ${{ success() && steps.check_cache_result.outputs.cache-hit != 'true' }}
run: |
export CI_ENV="$(bash <(curl -s https://codecov.io/env)) -e GITHUB_ACTIONS -e COVERAGE"
echo "CI_ENV=${CI_ENV}"
sudo -E ./script/test cert_suite ./tests/scripts/thread-cert/border_router/*.py || (sudo chmod a+r *.log *.json *.pcap && false)
- uses: actions/upload-artifact@v2
if: ${{ success() && steps.check_cache_result.outputs.cache-hit != 'true' }}
with:
name: cov-thread-border-router-docker
path: /tmp/coverage/
- uses: actions/upload-artifact@v2
if: ${{ failure() }}
if: ${{ failure() && steps.check_cache_result.outputs.cache-hit != 'true' }}
with:
name: thread-border-router-results
path: |
@@ -167,12 +213,18 @@ jobs:
coredump_*
otbr-agent_*
- name: Generate Coverage
if: ${{ success() && steps.check_cache_result.outputs.cache-hit != 'true' }}
run: |
./script/test generate_coverage gcc
- uses: actions/upload-artifact@v2
if: ${{ success() && steps.check_cache_result.outputs.cache-hit != 'true' }}
with:
name: cov-thread-border-router
path: tmp/coverage.info
- name: Cache test result
if: ${{ success() && steps.check_cache_result.outputs.cache-hit != 'true' }}
run: |
mkdir _test_complete_
upload-coverage:
needs:
@@ -190,9 +242,11 @@ jobs:
with:
path: coverage/
- name: Combine Coverage
continue-on-error: true
run: |
script/test combine_coverage
- name: Upload Coverage
continue-on-error: true
uses: codecov/codecov-action@v1
with:
files: final.info
+2
View File
@@ -32,6 +32,7 @@ import json
import logging
import os
import signal
import stat
import subprocess
import sys
import time
@@ -522,6 +523,7 @@ class TestCase(NcpSupportMixin, unittest.TestCase):
time.sleep(0.2)
assert self._dumpcap_proc.poll() is None, 'tshark terminated unexpectedly'
logging.info('Backbone sniffer launched successfully: pid=%s', self._dumpcap_proc.pid)
os.chmod(pcap_file, stat.S_IWUSR | stat.S_IRUSR | stat.S_IRGRP | stat.S_IROTH)
def _get_backbone_pcap_filename(self):
backbone_pcap = self.test_name + '_backbone.pcap'