Skip to content

run-nightly-tests

run-nightly-tests #394

---
name: run-nightly-tests
on:
workflow_dispatch:
schedule:
- cron: '0 01 * * *'
jobs:
nightly-tests:
if: ${{ github.event_name == 'workflow_dispatch' || github.repository == 'linux-nvme/nvme-cli' }}
runs-on: arc-vm-nvme-cli
steps:
- uses: actions/checkout@v5
with:
repository: "linux-blktests/blktests-ci"
#We don't have to build the kernel here, as we have a cron job running on
#the k8s cluster that builds the linus-master target nightly.
- name: Run blktests in VM
id: blktests
uses: ./.github/actions/kubevirt-action
with:
kernel_version: linus-master
vm_artifact_upload_dir: blktests/results/
run_cmds: |
set -e
set -x
uname -a
sudo dnf remove -y nvme-cli libnvme
sudo dnf install -y gcc clang make util-linux llvm gawk fio udev \
kmod coreutils g++ gzip e2fsprogs xfsprogs f2fs-tools btrfs-progs \
device-mapper-multipath blktrace kernel-headers liburing \
liburing-devel nbd device-mapper ktls-utils dosfstools \
bc libnl3-cli cryptsetup sg3_utils pciutils unzip jq git wget \
meson json-c-devel openssl-devel keyutils-libs-devel dbus-devel \
swig xz-devel libcurl-devel curl libarchive libarchive-devel json-c \
expect
# mdadm has a buffer overflow in v4.3 and was fixed with this commit:
# https://git.kernel.org/pub/scm/utils/mdadm/mdadm.git/commit/?id=7f960c3bd050e76f8bf0a8a0c8fbdcbaa565fc78
# The Fedora packages ship v4.3.
# We are now compiling and installing mdadm from source with the most
# recent known good commit. The v4.4 release does not compile.
git clone https://git.kernel.org/pub/scm/utils/mdadm/mdadm.git
cd mdadm
git checkout d764c4829947923142a83251296d04edaee7d2f7
make -j$(nproc)
sudo make install
cd -
git clone https://github.com/${{ github.repository }} nvme-cli
cd nvme-cli
git checkout ${{ github.sha }}
scripts/build.sh -b release -c gcc
sudo meson install -C .build-ci
sudo ldconfig /usr/local/lib64
cd -
git clone https://github.com/linux-blktests/blktests.git blktests
cd blktests
make
mkdir -p results
nvme --version | tee -a results/nvme-cli.version
sudo nvme --version | tee -a results/nvme-cli.version
# Run blktests nvme and md group
cat > config << EF
TEST_DEVS=(${BDEV0})
NVMET_TRTYPES="loop rdma tcp"
EXCLUDE=(nvme/010 nvme/012 nvme/034 nvme/035)
EF
sudo ./check nvme md/001
- name: Run nvme-cli tests in VM
if: success() || steps.blktests.conclusion == 'failure'
uses: ./.github/actions/kubevirt-action
with:
kernel_version: linus-master
vm_artifact_upload_dir: nvme-cli/tests/nvmetests/
run_cmds: |
#Preventing bash variable expension for the outer cat by using
#single quotes around EOF
cat > test.sh << 'EOF'
#!/bin/bash
set -e
set -x
uname -a
PIPX_BIN_DIR=/usr/local/bin pipx install nose2 --force
git clone https://github.com/${{ github.repository }} /nvme-cli
git config --global --add safe.directory /nvme-cli
cd /nvme-cli
git checkout ${{ github.sha }}
scripts/build.sh -b release -c gcc
CONTROLLER=$(echo "${BDEV0}" | sed 's/n[0-9]*$//')
cat > tests/config.json << EOJ
{
"controller" : "${CONTROLLER}",
"ns1": "${BDEV0}",
"log_dir": "tests/nvmetests/",
"nvme_bin": "/nvme-cli/.build-ci/nvme"
}
EOJ
cat tests/config.json
nose2 --verbose --start-dir tests \
nvme_attach_detach_ns_test \
nvme_compare_test \
nvme_copy_test \
nvme_create_max_ns_test \
nvme_ctrl_reset_test \
nvme_dsm_test \
nvme_error_log_test \
nvme_flush_test \
nvme_format_test \
nvme_fw_log_test \
nvme_get_features_test \
nvme_get_lba_status_test \
nvme_id_ctrl_test \
nvme_id_ns_test \
nvme_lba_status_log_test \
nvme_read_write_test \
nvme_smart_log_test \
nvme_verify_test \
nvme_writeuncor_test \
nvme_writezeros_test
EOF
sudo chmod +x test.sh
#Create shared volume mount point for artifact upload
mkdir nvme-cli
#Expose all devices to the container through the `privileged` flag.
#
#BDEV0 is an environment variable of the self-hosted runner instance
#that contains a valid nvme namespace which is capable of the nvm
#command set.
sudo docker run --privileged \
-v "/dev":"/dev":z \
-e BDEV0 \
-v "${PWD}/test.sh":"/test.sh" \
-v "${PWD}/nvme-cli":"/nvme-cli":z \
ghcr.io/linux-nvme/debian.python:latest /test.sh