run-nightly-tests #394
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
| --- | |
| 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 |