diff --git a/.github/workflows/commit-message-checker.yml b/.github/workflows/commit-message-checker.yml new file mode 100644 index 0000000..7161a25 --- /dev/null +++ b/.github/workflows/commit-message-checker.yml @@ -0,0 +1,15 @@ +--- +name: 'Commit message check' + +on: + pull_request: + push: + branches: + # we must not fix commit messages when they already reached main + - '!main' + +jobs: + check-commit-message: + secrets: + accessToken: "${{ secrets.GITHUB_TOKEN }}" + uses: os-autoinst/os-autoinst-common/.github/workflows/base-commit-message-checker.yml@master diff --git a/.github/workflows/isotovideo-action.yml b/.github/workflows/isotovideo-action.yml deleted file mode 100644 index 078798b..0000000 --- a/.github/workflows/isotovideo-action.yml +++ /dev/null @@ -1,19 +0,0 @@ ---- -name: isotovideo - github action example -# yamllint disable-line rule:truthy -on: [push, pull_request] -jobs: - test: - runs-on: ubuntu-20.04 - container: - image: "registry.opensuse.org/devel/openqa/containers/isotovideo:qemu-x86-jq" - steps: - - uses: actions/checkout@v2 - - name: install jq - run: zypper -n in jq - - - name: Run isotovideo against test code - run: isotovideo qemu_no_kvm=1 casedir=. - - - name: fail if any test module failed - run: jq .result testresults/result-*.json | grep -v ok && echo "Test modules failed" && exit 1 diff --git a/.github/workflows/isotovideo-check-all-test-modules.yml b/.github/workflows/isotovideo-check-all-test-modules.yml deleted file mode 100644 index ee4ab09..0000000 --- a/.github/workflows/isotovideo-check-all-test-modules.yml +++ /dev/null @@ -1,16 +0,0 @@ ---- -name: isotovideo - check all test modules -# yamllint disable-line rule:truthy -on: [push, pull_request] -jobs: - test: - # "ubuntu-latest" at time of writing 2020-12-14 is Ubuntu 18.04 showing a - # network problem "level=error msg="could not find slirp4netns, the - # network namespace won't be configured: exec: \"slirp4netns\": executable - # file not found in $PATH"" - # which can be fixed with a more recent version of Ubuntu explicitly - runs-on: ubuntu-20.04 - steps: - - uses: actions/checkout@v2 - - name: Run isotovideo against test code, fail if any test module failed - run: podman run --rm -it -v .:/tests:Z --entrypoint '' registry.opensuse.org/devel/openqa/containers/isotovideo:qemu-x86-jq /bin/sh -c 'isotovideo qemu_no_kvm=1 casedir=/tests && jq .result testresults/result-*.json | grep -v ok && echo "Test modules failed" && exit 1' diff --git a/.github/workflows/isotovideo.yml b/.github/workflows/isotovideo.yml index a08209b..88fe743 100644 --- a/.github/workflows/isotovideo.yml +++ b/.github/workflows/isotovideo.yml @@ -1,11 +1,48 @@ --- name: isotovideo # yamllint disable-line rule:truthy -on: [push, pull_request] +on: + - pull_request jobs: - test: - runs-on: ubuntu-latest + isotovideo: + strategy: + matrix: + # An example matrix, it'll create a derivate job for each + # item specified here. For simplicity sake the example below + # has the full var line since it's easy enough. + # + # For more complex setups it'll be worth exploring advance matrix setups + # see: https://docs.github.com/en/actions/using-jobs/using-a-matrix-for-your-jobs#example-expanding-configurations + isotovideo-args: + - "qemu_no_kvm=1 casedir=." + runs-on: ubuntu-20.04 steps: - - uses: actions/checkout@v2 - - name: Run isotovideo against test code in happy-path scenario - run: podman run --rm -it -v .:/tests:Z registry.opensuse.org/devel/openqa/containers/isotovideo:qemu-x86 qemu_no_kvm=1 casedir=/tests + - uses: actions/checkout@v4 + + - name: Run isotovideo against test code + uses: "docker://registry.opensuse.org/devel/openqa/containers/isotovideo:qemu-x86" + with: + args: ${{ matrix.isotovideo-args }} ${{ env.ACTIONS_STEP_DEBUG && '--debug' || '' }} + entrypoint: 'isotovideo' + + - name: Validate test results + uses: "docker://registry.opensuse.org/devel/openqa/containers/isotovideo:qemu-x86" + with: + args: ./testresults/ + entrypoint: "./scripts/validate-test-results" + + - name: Archive test artifcats + if: always() + uses: actions/upload-artifact@v3 + with: + name: isotovideo-artifacts + path: | + ./testresults/ + ./video.ogv + ./video_time.vtt + ./qemu_state.json + ./serial_terminal.txt + ./virtio_console.log + ./virtio_console1.log + ./virtio_console_user.log + retention-days: 7 diff --git a/main.pm b/main.pm index 7134c7f..8b29f42 100644 --- a/main.pm +++ b/main.pm @@ -2,6 +2,8 @@ # SPDX-License-Identifier: GPL-2.0-or-later use strict; +use warnings; + use testapi; use autotest; diff --git a/scripts/validate-test-results b/scripts/validate-test-results new file mode 100644 index 0000000..9c23600 --- /dev/null +++ b/scripts/validate-test-results @@ -0,0 +1,31 @@ +#!/usr/bin/env perl + +# Copyright 2023 SUSE LLC +# SPDX-License-Identifier: GPL-2.0-or-later + +use strict; +use warnings; + +use Mojo::JSON qw(decode_json); +use Mojo::Path; +use Mojo::File qw(path); + +my @args = @ARGV; +my @test_results_to_check = (); + +while(@args){ + my $arg = shift @args; + @args = (@args, glob("$arg/result-*.json")) if -d $arg; + next unless $arg =~ m/result-.+\.json$/; + push @test_results_to_check, $arg if -f $arg; +} + +while(@test_results_to_check){ + my $path = Mojo::Path->new(shift @test_results_to_check)->canonicalize; + my $result = decode_json(path($path)->slurp)->{result}; + + printf "Test result [%s] -> [%s]\n", $path->to_string, $result; + exit 1 unless $result eq 'ok'; +} + +exit 0; diff --git a/tests/boot.pm b/tests/boot.pm index 45ec6b0..7a8f888 100644 --- a/tests/boot.pm +++ b/tests/boot.pm @@ -3,6 +3,9 @@ use base 'basetest'; use strict; +use warnings; + +use base 'basetest'; use testapi; sub run {