Skip to content

Commit

Permalink
Make isotovideo workflows more GitHub Native
Browse files Browse the repository at this point in the history
- Improved isotovideo example workflow, it can be easily extended
  with a matrix as per GitHub Actions docs [0].

  It brings:
  - A perl script for checking the test results, to remove `jq`
    usages.
  - Pipeline Artifacts, it's possible to inspect the test
    results after a run.

  And now the example workflow is green and not repeated.

- Skip job openQA if credentials are not configured

[0]: https://docs.github.com/en/actions/using-jobs/using-a-matrix-for-your-jobs#example-expanding-configurations

Co-authored-by: Martchus <martchus@gmx.net>
Co-authored-by: Tina Müller <cpan2@tinita.de>
Co-authored-by: Oliver Kurz <okurz@suse.de>
  • Loading branch information
4 people committed Dec 20, 2023
1 parent d0857d7 commit d5c8d46
Show file tree
Hide file tree
Showing 5 changed files with 81 additions and 43 deletions.
19 changes: 0 additions & 19 deletions .github/workflows/isotovideo-action.yml

This file was deleted.

16 changes: 0 additions & 16 deletions .github/workflows/isotovideo-check-all-test-modules.yml

This file was deleted.

50 changes: 44 additions & 6 deletions .github/workflows/isotovideo.yml
Original file line number Diff line number Diff line change
@@ -1,11 +1,49 @@
---
name: isotovideo
# yamllint disable-line rule:truthy
on: [push, pull_request]
on:
- push
- 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
11 changes: 9 additions & 2 deletions .github/workflows/openqa.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,16 @@ jobs:
container:
image: registry.opensuse.org/devel/openqa/containers/tumbleweed:client
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Trigger and monitor openQA test
run: >
id: openqa_schedule
run: |
if [[ -z "$OPENQA_API_KEY" && -z "$OPENQA_API_SECRET" ]]; then
echo "Skipping openQA scheduling step: No API Keys configured."
echo "Configure OPENQA_API_KEY & OPENQA_API_SECRET secrets"
exit 0
fi
openqa-cli schedule \
--monitor \
--host "${OPENQA_HOST:-https://openqa.opensuse.org}/" \
Expand Down
28 changes: 28 additions & 0 deletions scripts/validate-test-results
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
#!/usr/bin/env perl

# Copyright SUSE LLC
# SPDX-License-Identifier: GPL-2.0-or-later

use strict;
use warnings;
use experimental 'signatures';

use Mojo::JSON qw(decode_json);
use Mojo::Path;
use Mojo::File qw(path);
use Test::More;

sub validate_test_result($result_file_path) {
my $result_file = path(Mojo::Path->new($result_file_path)->canonicalize);
my $test_result = decode_json($result_file->slurp)->{result};
return is $test_result, 'ok', sprintf ('Test result [%s] ok', $result_file->to_string);
}

my ($dir) = @ARGV;

die "Missing argument DIR\n" unless $dir;

my @results = glob("$dir/result-*.json");
validate_test_result($_) for (@results);

done_testing;

0 comments on commit d5c8d46

Please sign in to comment.