From: Dennis Maisenbacher Date: Wed, 25 Sep 2024 14:39:34 +0000 (+0000) Subject: CI: Add workflow for running tests on real nvme device X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=01abe63486033b4e7f7250bb1a87bcc508fa3087;p=users%2Fsagi%2Fnvme-cli.git CI: Add workflow for running tests on real nvme device Introducing a GitHub workflow which runs all test cases under the `tests` directory on real hardware through a self-hosted runner. This workflow is triggered nightly or on demand as the tests run about an hour. Signed-off-by: Dennis Maisenbacher --- diff --git a/.github/workflows/run-nightly-tests.yml b/.github/workflows/run-nightly-tests.yml new file mode 100644 index 00000000..d525986a --- /dev/null +++ b/.github/workflows/run-nightly-tests.yml @@ -0,0 +1,93 @@ +--- +name: run-nightly-tests + +on: + workflow_dispatch: + schedule: + - cron: '0 01 * * *' + +jobs: + nightly-tests: + runs-on: nvme-nvm + steps: + - name: Output kernel version + run: | + uname -a + - name: Clean up test device + run: | + #BDEV0 is an environment variable of the self-hosted runner instance + #that contains a valid nvme ctrl name which is capable of the nvm + #command set. + CONTROLLER=$(echo /dev/${BDEV0} | sed 's/n[0-9]*$//') + sudo nvme delete-ns $CONTROLLER -n 0xffffffff + sudo nvme format $CONTROLLER -n 0xffffffff -l 0 -f + SIZE=$(sudo nvme id-ctrl $CONTROLLER --output-format=json | jq -r '{tnvmcap} | .[]' | awk '{print $1/512}') + sudo nvme create-ns -s $SIZE -c $SIZE -f 0 -d 0 --csi=0 $CONTROLLER + sudo nvme attach-ns $CONTROLLER -n 1 -c 0 + - uses: actions/checkout@v4 + - name: Install dependencies + run: | + sudo apt-get update + sudo apt-get install --no-install-recommends -y \ + meson gcc pkg-config git libjson-c-dev libssl-dev libkeyutils-dev \ + libdbus-1-dev libpython3-dev pipx python3-dev swig xz-utils + pipx ensurepath + sudo PIPX_BIN_DIR=/usr/local/bin pipx install nose2 + sudo PIPX_BIN_DIR=/usr/local/bin pipx install flake8 + sudo PIPX_BIN_DIR=/usr/local/bin pipx install mypy + sudo PIPX_BIN_DIR=/usr/local/bin pipx install autopep8 + sudo PIPX_BIN_DIR=/usr/local/bin pipx install isort + - name: Build and install nvme-cli + run: | + scripts/build.sh -b release -c gcc + sudo meson install -C .build-ci + sudo ldconfig /usr/local/lib64 + - name: Overwrite test config + run: | + CONTROLLER=$(echo /dev/${BDEV0} | sed 's/n[0-9]*$//') + cat > tests/config.json << EOF + { + "controller" : "$CONTROLLER", + "ns1": "/dev/${BDEV0}", + "log_dir": "tests/nvmetests/" + } + EOF + - name: Run on device tests + run: | + sudo 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 + - name: Upload logs + uses: actions/upload-artifact@v4 + if: always() + with: + name: logs files + path: | + ./tests/nvmetests/**/*.log + - name: Clean up test device + if: always() + run: | + CONTROLLER=$(echo /dev/${BDEV0} | sed 's/n[0-9]*$//') + sudo nvme delete-ns $CONTROLLER -n 0xffffffff + sudo nvme format $CONTROLLER -n 0xffffffff -l 0 -f + SIZE=$(sudo nvme id-ctrl $CONTROLLER --output-format=json | jq -r '{tnvmcap} | .[]' | awk '{print $1/512}') + sudo nvme create-ns -s $SIZE -c $SIZE -f 0 -d 0 --csi=0 $CONTROLLER + sudo nvme attach-ns $CONTROLLER -n 1 -c 0