mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2024-12-29 04:50:03 +01:00
189 lines
6.7 KiB
YAML
189 lines
6.7 KiB
YAML
name: release-tests
|
|
|
|
# Run automated part of the tests specified by the release specs (see
|
|
# https://github.com/RIOT-OS/Release-Specs/) on `native` and IoT-LAB boards.
|
|
#
|
|
# It is split into `native` tests and IoT-LAB tests, as the tests are
|
|
# resource-wise disjunct and thus can be run parallel. For each IoT-LAB board
|
|
# test an IoT-LAB experiment is started using the `rici` account.
|
|
#
|
|
# This workflow is run periodically on master with a cron job, on new pushed
|
|
# release candidates tags and release tags, and can be triggered via workflow
|
|
# dispatch.
|
|
|
|
on:
|
|
schedule:
|
|
- cron: '0 3 * * 6'
|
|
push:
|
|
# Run on all new release candidates and release tags
|
|
tags:
|
|
- '[0-9][0-9][0-9][0-9].[0-9][0-9]-RC[0-9]*'
|
|
- '[0-9][0-9][0-9][0-9].[0-9][0-9]'
|
|
- '[0-9][0-9][0-9][0-9].[0-9][0-9].*'
|
|
workflow_dispatch:
|
|
inputs:
|
|
riot_version:
|
|
description: 'RIOT version to checkout'
|
|
required: true
|
|
default: 'master'
|
|
release_specs_version:
|
|
description: 'Release-Specs version to checkout'
|
|
required: true
|
|
default: 'master'
|
|
docker_version:
|
|
description: 'riot/riotbuild docker image version'
|
|
required: true
|
|
default: 'latest'
|
|
filter:
|
|
description: 'Pytest filter. Leave empty for all.'
|
|
required: false
|
|
|
|
env:
|
|
DOCKER_MAKE_ARGS: -j
|
|
# split up native and IoT-LAB tasks to parallelize somewhat and prevent
|
|
# to hit Github Limit of 6h per job.
|
|
jobs:
|
|
tasks:
|
|
runs-on: ubuntu-22.04
|
|
timeout-minutes: 360
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
pytest_mark:
|
|
- "iotlab_creds"
|
|
include:
|
|
- pytest_mark: "not iotlab_creds"
|
|
sudo: "sudo"
|
|
steps:
|
|
- name: Generate .riotgithubtoken
|
|
run: |
|
|
if [ -z "${{ matrix.sudo }}" ]; then
|
|
echo '${{ secrets.RIOT_CI_ACCESS_TOKEN }}' > ~/.riotgithubtoken
|
|
else
|
|
sudo sh -c "echo '${{ secrets.RIOT_CI_ACCESS_TOKEN }}' > ~/.riotgithubtoken"
|
|
fi
|
|
- name: Setup IoT-LAB credentials
|
|
if: ${{ matrix.pytest_mark == 'iotlab_creds' }}
|
|
run: |
|
|
echo '${{ secrets.IOTLABRC }}' > ~/.iotlabrc
|
|
- name: Setup SSH agent
|
|
if: ${{ matrix.pytest_mark == 'iotlab_creds' }}
|
|
uses: webfactory/ssh-agent@v0.9.0
|
|
with:
|
|
ssh-private-key: ${{ secrets.IOTLAB_PRIVATE_KEY }}
|
|
- name: Fetch host key from IoT-LAB saclay site
|
|
if: ${{ matrix.pytest_mark == 'iotlab_creds' }}
|
|
run: |
|
|
IOTLAB_USER=$(cat ~/.iotlabrc | cut -f1 -d:)
|
|
ssh -oStrictHostKeyChecking=accept-new \
|
|
${IOTLAB_USER}@saclay.iot-lab.info exit
|
|
- name: Fetch host key from IoT-LAB lille site
|
|
# Not being used in the most recent release specs but kept in for
|
|
# backwords compatibility
|
|
if: ${{ matrix.pytest_mark == 'iotlab_creds' }}
|
|
run: |
|
|
IOTLAB_USER=$(cat ~/.iotlabrc | cut -f1 -d:)
|
|
ssh -oStrictHostKeyChecking=accept-new \
|
|
${IOTLAB_USER}@lille.iot-lab.info exit
|
|
- name: Fetch host key from IoT-LAB strasbourg site
|
|
if: ${{ matrix.pytest_mark == 'iotlab_creds' }}
|
|
run: |
|
|
IOTLAB_USER=$(cat ~/.iotlabrc | cut -f1 -d:)
|
|
ssh -oStrictHostKeyChecking=accept-new \
|
|
${IOTLAB_USER}@strasbourg.iot-lab.info exit
|
|
- name: Checkout Release-Specs
|
|
uses: actions/checkout@main
|
|
with:
|
|
repository: RIOT-OS/Release-Specs
|
|
path: Release-Specs
|
|
fetch-depth: 1
|
|
ref: ${{ github.event.inputs.release_specs_version }}
|
|
- name: Checkout RIOT
|
|
uses: actions/checkout@main
|
|
with:
|
|
repository: RIOT-OS/RIOT
|
|
path: RIOT
|
|
fetch-depth: 1
|
|
ref: ${{ github.event.inputs.riot_version }}
|
|
- name: Set up Python 3.8
|
|
uses: actions/setup-python@v5
|
|
with:
|
|
python-version: 3.8
|
|
- name: Install Python dependencies
|
|
run: |
|
|
python -m pip install --upgrade pip
|
|
python -m pip install tox junit2html
|
|
- name: Pull riotbuild docker image
|
|
run: |
|
|
DOCKER_VERSION="${{ github.event.inputs.docker_version }}"
|
|
if [ -z "$DOCKER_VERSION" ]; then
|
|
DOCKER_VERSION="latest"
|
|
fi
|
|
docker pull riot/riotbuild:$DOCKER_VERSION
|
|
- name: Create TAP interfaces
|
|
if: ${{ matrix.pytest_mark == 'not iotlab_creds' }}
|
|
run: |
|
|
sudo RIOT/dist/tools/tapsetup/tapsetup -c 11
|
|
- name: Install native dependencies
|
|
if: ${{ matrix.pytest_mark == 'not iotlab_creds' }}
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install lib32asan6
|
|
- name: Run release tests
|
|
timeout-minutes: 350
|
|
run: |
|
|
RIOTBASE="$GITHUB_WORKSPACE/RIOT"
|
|
TOX_ARGS=""
|
|
if ! echo ${{ github.event.inputs.riot_version }} | \
|
|
grep -q "[0-9]\{4\}.[0-9]\{2\}-RC[0-9]\+"; then
|
|
TOX_ARGS+="--non-RC "
|
|
fi
|
|
if [ -n "${{ github.event.inputs.filter }}" ]; then
|
|
K="-k"
|
|
fi
|
|
|
|
cd Release-Specs
|
|
# definition in env does not work since $GITHUB_WORKSPACE seems not to
|
|
# be accessible
|
|
${{ matrix.sudo }} \
|
|
BUILD_IN_DOCKER=1 \
|
|
DOCKER_MAKE_ARGS=${DOCKER_MAKE_ARGS} \
|
|
DOCKER_ENV_VARS="USEMODULE QUIETER" \
|
|
GITHUB_REPOSITORY=${GITHUB_REPOSITORY} \
|
|
GITHUB_RUN_ID=${GITHUB_RUN_ID} \
|
|
GITHUB_SERVER_URL=${GITHUB_SERVER_URL} \
|
|
APPKEY="${{ secrets.CI_TTN_APPKEY }}" \
|
|
NWKSKEY="${{ secrets.CI_TTN_NWKSKEY_ABP }}" \
|
|
APPSKEY="${{ secrets.CI_TTN_APPSKEY_ABP }}" \
|
|
DEVEUI="70B3D57ED00463E7" \
|
|
APPEUI="0000000000000000" \
|
|
DEVADDR="260B41C7" \
|
|
TTN_DL_KEY="${{ secrets.CI_TTN_DL_KEY }}" \
|
|
TTN_APP_ID="release-tests" \
|
|
TTN_DEV_ID="eui-70b3d57ed00463e7-otaa" \
|
|
TTN_DEV_ID_ABP="eui-70b3d57ed0046d5d-abp" \
|
|
RIOTBASE=${RIOTBASE} \
|
|
$(which tox) -e test -- ${TOX_ARGS} \
|
|
${K} "${{ github.event.inputs.filter }}" -m "${{ matrix.pytest_mark }}"
|
|
- name: junit2html and XML deploy
|
|
if: always()
|
|
run: |
|
|
DATE=$(date +"%Y-%m-%d-%H-%M-%S")
|
|
if echo ${{ github.event.inputs.riot_version }} | \
|
|
grep -q "[0-9]\{4\}.[0-9]\{2\}"; then
|
|
VER=${{ github.event.inputs.riot_version }}
|
|
else
|
|
VER=$(git -C $GITHUB_WORKSPACE/RIOT rev-parse --short HEAD)
|
|
fi
|
|
MARK=$(echo "${{ matrix.pytest_mark }}" | tr '[ _]' '-')
|
|
REPORT_XML=$GITHUB_WORKSPACE/Release-Specs/test-report.xml
|
|
REPORT_NAME=test-reports/test-report-$MARK-$VER-$DATE
|
|
mkdir test-reports/
|
|
junit2html ${REPORT_XML} ${REPORT_NAME}.html
|
|
cp ${REPORT_XML} ${REPORT_NAME}.xml
|
|
- uses: actions/upload-artifact@v4
|
|
if: always()
|
|
with:
|
|
name: Test Reports
|
|
path: test-reports/*
|