Skip to content

validation-bare-metal #14

validation-bare-metal

validation-bare-metal #14

name: validation-bare-metal
on:
# allow manually trigger
workflow_dispatch:
inputs:
branch-to-checkout:
type: string
default: 'main'
required: false
description: 'Branch name to use'
validation-tests-1:
type: string
default: 'tests/single/video/pacing'
required: true
description: '1st validation tests to run'
validation-tests-2:
type: string
default: ''
required: false
description: '2nd validation tests to run'
validation-tests-3:
type: string
default: ''
required: false
description: '3th validation tests to run'
validation-tests-4:
type: string
default: ''
required: false
description: '4th validation tests to run'
validation-tests-5:
type: string
default: ''
required: false
description: '5th validation tests to run'
validation-pre-release-1:
description: 'Select from pre-release group tests nr-1'
required: false
type: choice
options:
- NONE
- ancillary
- kernel-socket
- rss-mode
- st20p
- st30p
- st41
- udp
- video
- xdp
validation-pre-release-2:
description: 'Select from pre-release group tests nr-2'
required: false
type: choice
options:
- NONE
- ffmpeg-plugin
- fuzzy-tests
- performance
- ptp
- rx-timing
- vero
- virtio-enable
- wrong-parameter
validation-pre-release-3:
description: 'Select from pre-release group tests nr-3'
required: false
type: choice
options:
- NONE
- gpu-direct
- gpu-enabling
env:
# Customize the env if
BUILD_TYPE: 'Release'
DPDK_VERSION: '23.11'
# Bellow ENV variables are required to be defined on runner side:
# TEST_PF_PORT_P: '0000:49:00.0'
# TEST_PF_PORT_R: '0000:49:00.1'
# TEST_PORT_P: '0000:49:01.2'
# TEST_PORT_R: '0000:49:01.3'
# TEST_DMA_PORT_P: '0000:6a:01.0'
# TEST_DMA_PORT_R: '0000:6f:01.0'
permissions:
contents: read
jobs:
validation-build-mtl:
runs-on: [Linux, self-hosted, DPDK]
timeout-minutes: 60
outputs:
pipenv-activate: ${{ steps.pipenv-install.outputs.VIRTUAL_ENV }}
steps:
- name: 'preparation: Harden Runner'
uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
with:
egress-policy: audit
- name: 'preparation: Checkout MTL'
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
ref: '${{ inputs.branch-to-checkout }}'
- name: 'preparation: Checkout DPDK'
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
repository: 'DPDK/dpdk'
ref: 'v${{ env.DPDK_VERSION }}'
path: 'dpdk'
- name: 'configuration: Install the build dependency'
run: |
sudo apt-get install -y git gcc meson python3 python3-pyelftools pkg-config libnuma-dev libjson-c-dev libpcap-dev libgtest-dev libsdl2-dev libsdl2-ttf-dev libssl-dev
sudo apt-get install -y systemtap-sdt-dev
- name: 'configuration: Apply dpdk patches'
run: |
patch -d "dpdk" -p1 -i <(cat patches/dpdk/${{ env.DPDK_VERSION }}/*.patch)
- name: 'installation: Build dpdk'
run: |
cd dpdk
meson build
ninja -C build
cd build
sudo ninja install
- name: 'installation: Build mtl'
run: |
./build.sh
sudo ldconfig
- name: 'installation: Install pipenv environment'
working-directory: tests/validation
id: pipenv-install
run: |
sudo apt remove -y pipenv || true
sudo apt install -y python3-virtualenv python3-pip
python3 -m pip install pipenv
python3 -m pipenv install -r requirements.txt
echo "VIRTUAL_ENV=$(python3 -m pipenv --venv)/bin/activate" >> "$GITHUB_ENV"
validation-run-tests:
needs: [validation-build-mtl]
runs-on: [Linux, self-hosted, DPDK]
env:
PYTEST_ALIAS: 'sudo --preserve-env python3 -m pipenv run pytest'
PYTEST_PARAMS: '--nic="${TEST_PORT_P},${TEST_PORT_R}" --media=/mnt/media --build="../.."'
steps:
- name: 'preparation: Harden Runner'
uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
with:
egress-policy: audit
- name: 'preparation: Kill MtlManager and pytest routines'
run: |
sudo killall -SIGINT pipenv || true
sudo killall -SIGINT pytest || true
sudo killall -SIGINT MtlManager || true
- name: 'preparation: Binding network adapter'
run: |
sudo ./script/nicctl.sh create_tvf "${TEST_PF_PORT_P}" || true
sudo ./dpdk/usertools/dpdk-devbind.py -b vfio-pci "${TEST_DMA_PORT_P}" || true
sudo ./dpdk/usertools/dpdk-devbind.py -b vfio-pci "${TEST_DMA_PORT_R}" || true
- name: 'preparation: Start MtlManager at background'
run: |
sudo MtlManager &
- name: 'execution: Run validation-tests-1 in pipenv environment'
if: always() && inputs.validation-tests-1 != ''
working-directory: tests/validation
run: |
${{ env.PYTEST_ALIAS }} '${{ inputs.validation-tests-1 }}' ${{ env.PYTEST_PARAMS }}
- name: 'execution: Run validation-tests-2 in pipenv environment'
if: always() && inputs.validation-tests-2 != ''
working-directory: tests/validation
run: |
${{ env.PYTEST_ALIAS }} '${{ inputs.validation-tests-2 }}' ${{ env.PYTEST_PARAMS }}
- name: 'execution: Run validation-tests-3 in pipenv environment'
if: always() && inputs.validation-tests-3 != ''
working-directory: tests/validation
run: |
${{ env.PYTEST_ALIAS }} '${{ inputs.validation-tests-3 }}' ${{ env.PYTEST_PARAMS }}
- name: 'execution: Run validation-tests-4 in pipenv environment'
if: always() && inputs.validation-tests-4 != ''
working-directory: tests/validation
run: |
${{ env.PYTEST_ALIAS }} '${{ inputs.validation-tests-4 }}' ${{ env.PYTEST_PARAMS }}
- name: 'execution: Run validation-tests-5 in pipenv environment'
if: always() && inputs.validation-tests-5 != ''
working-directory: tests/validation
run: |
${{ env.PYTEST_ALIAS }} '${{ inputs.validation-tests-5 }}' ${{ env.PYTEST_PARAMS }}
- name: 'execution: Run validation-pre-release-1 in pipenv environment'
if: always() && inputs.validation-pre-release-1 != 'NONE'
working-directory: tests/validation
run: |
echo "== TO BE IMPLEMENTED ${{ inputs.inputs.validation-pre-release-1 }} =="
- name: 'execution: Run validation-pre-release-2 in pipenv environment'
if: always() && inputs.validation-pre-release-2 != 'NONE'
working-directory: tests/validation
run: |
echo "== TO BE IMPLEMENTED ${{ inputs.inputs.validation-pre-release-2 }} =="
- name: 'execution: Run validation-pre-release-3 in pipenv environment'
if: always() && inputs.validation-pre-release-3 != 'NONE'
working-directory: tests/validation
run: |
echo "== TO BE IMPLEMENTED ${{ inputs.inputs.validation-pre-release-3 }} =="
- name: 'cleanup: Kill MtlManager and pytest routines'
if: always()
run: |
sudo killall -SIGINT pipenv || true
sudo killall -SIGINT pytest || true
sudo killall -SIGINT MtlManager || true
- name: 'cleanup: Restore valid owner to repository and directories'
if: always()
run: |
sudo chown -R "${USER}" "$(pwd)"