diff --git a/.fmf/version b/.fmf/version
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/.fmf/version
@@ -0,0 +1 @@
+1
diff --git a/.github/workflows/testing-farm.yml b/.github/workflows/testing-farm.yml
new file mode 100644
index 0000000..5a7241f
--- /dev/null
+++ b/.github/workflows/testing-farm.yml
@@ -0,0 +1,35 @@
+---
+name: Testing Farm
+on:
+ pull_request:
+ branches:
+ - master
+ issue_comment:
+ types: [created]
+
+permissions:
+ contents: read
+ pull-requests: write
+ statuses: write
+
+concurrency:
+ group: "testing-farm-${{ github.event.issue.number }}"
+ cancel-in-progress: true
+
+jobs:
+ tests:
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ matrix:
+ tox_env: [py311, py312, py313, py314]
+ steps:
+ - uses: sclorg/testing-farm-as-github-action@v4
+ with:
+ api_key: ${{ secrets.TF_PUBLIC_API_KEY }}
+ compose: Fedora-45
+ tmt_plan_regex: ".*"
+ variables: "TOX_ENV=${{ matrix.tox_env }}"
+ update_pull_request_status: "true"
+ pull_request_status_name: "Testing Farm - ${{ matrix.tox_env }}"
+ create_issue_comment: "true"
diff --git a/daily-tests/coverage.xml b/daily-tests/coverage.xml
new file mode 100644
index 0000000..69fedbf
--- /dev/null
+++ b/daily-tests/coverage.xml
@@ -0,0 +1,896 @@
+
+
+
+
+
+ /Users/phracek/work/scl-utils/ci-scripts/daily-tests/daily_tests
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/daily-tests/daily_tests/__pycache__/__init__.cpython-314.pyc b/daily-tests/daily_tests/__pycache__/__init__.cpython-314.pyc
new file mode 100644
index 0000000..e473e3a
Binary files /dev/null and b/daily-tests/daily_tests/__pycache__/__init__.cpython-314.pyc differ
diff --git a/daily-tests/daily_tests/__pycache__/daily_grades.cpython-314.pyc b/daily-tests/daily_tests/__pycache__/daily_grades.cpython-314.pyc
new file mode 100644
index 0000000..cb32cd8
Binary files /dev/null and b/daily-tests/daily_tests/__pycache__/daily_grades.cpython-314.pyc differ
diff --git a/daily-tests/daily_tests/__pycache__/daily_nightly_tests_report.cpython-314.pyc b/daily-tests/daily_tests/__pycache__/daily_nightly_tests_report.cpython-314.pyc
new file mode 100644
index 0000000..85b503b
Binary files /dev/null and b/daily-tests/daily_tests/__pycache__/daily_nightly_tests_report.cpython-314.pyc differ
diff --git a/daily-tests/daily_tests/__pycache__/download_logs.cpython-314.pyc b/daily-tests/daily_tests/__pycache__/download_logs.cpython-314.pyc
new file mode 100644
index 0000000..673d2ee
Binary files /dev/null and b/daily-tests/daily_tests/__pycache__/download_logs.cpython-314.pyc differ
diff --git a/daily-tests/daily_tests/__pycache__/show_logs.cpython-314.pyc b/daily-tests/daily_tests/__pycache__/show_logs.cpython-314.pyc
new file mode 100644
index 0000000..3b4a776
Binary files /dev/null and b/daily-tests/daily_tests/__pycache__/show_logs.cpython-314.pyc differ
diff --git a/daily-tests/main.fmf b/daily-tests/main.fmf
new file mode 100644
index 0000000..645e32f
--- /dev/null
+++ b/daily-tests/main.fmf
@@ -0,0 +1,13 @@
+summary: daily-tests unit tests
+test: ./test.sh
+tag:
+ - daily-tests
+duration: 10m
+require:
+ - python3-pytest
+ - python3-flexmock
+ - python3-pyyaml
+ - python3-requests
+ - python3-xmltodict
+ - python3-pyyaml
+ - python-tox
diff --git a/daily-tests/test.sh b/daily-tests/test.sh
new file mode 100755
index 0000000..2798e5b
--- /dev/null
+++ b/daily-tests/test.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+set -euo pipefail
+tox -e "${TOX_ENV:-py314}"
diff --git a/daily-tests/tests/__pycache__/__init__.cpython-314.pyc b/daily-tests/tests/__pycache__/__init__.cpython-314.pyc
new file mode 100644
index 0000000..f5a59f0
Binary files /dev/null and b/daily-tests/tests/__pycache__/__init__.cpython-314.pyc differ
diff --git a/daily-tests/tests/__pycache__/test_daily_grades.cpython-314-pytest-9.1.1.pyc b/daily-tests/tests/__pycache__/test_daily_grades.cpython-314-pytest-9.1.1.pyc
new file mode 100644
index 0000000..2c99f64
Binary files /dev/null and b/daily-tests/tests/__pycache__/test_daily_grades.cpython-314-pytest-9.1.1.pyc differ
diff --git a/daily-tests/tests/__pycache__/test_reports.cpython-314-pytest-9.1.1.pyc b/daily-tests/tests/__pycache__/test_reports.cpython-314-pytest-9.1.1.pyc
new file mode 100644
index 0000000..76513e6
Binary files /dev/null and b/daily-tests/tests/__pycache__/test_reports.cpython-314-pytest-9.1.1.pyc differ
diff --git a/daily-tests/tests/__pycache__/test_reports.cpython-314.pyc b/daily-tests/tests/__pycache__/test_reports.cpython-314.pyc
new file mode 100644
index 0000000..544302f
Binary files /dev/null and b/daily-tests/tests/__pycache__/test_reports.cpython-314.pyc differ
diff --git a/daily-tests/tests/__pycache__/test_show_logs.cpython-314-pytest-9.1.1.pyc b/daily-tests/tests/__pycache__/test_show_logs.cpython-314-pytest-9.1.1.pyc
new file mode 100644
index 0000000..f0721ea
Binary files /dev/null and b/daily-tests/tests/__pycache__/test_show_logs.cpython-314-pytest-9.1.1.pyc differ
diff --git a/daily-tests/tests/__pycache__/test_tf_log_downloader.cpython-314-pytest-9.1.1.pyc b/daily-tests/tests/__pycache__/test_tf_log_downloader.cpython-314-pytest-9.1.1.pyc
new file mode 100644
index 0000000..67e80cd
Binary files /dev/null and b/daily-tests/tests/__pycache__/test_tf_log_downloader.cpython-314-pytest-9.1.1.pyc differ
diff --git a/eol-checker/main.fmf b/eol-checker/main.fmf
new file mode 100644
index 0000000..c9e3415
--- /dev/null
+++ b/eol-checker/main.fmf
@@ -0,0 +1,9 @@
+summary: eol-checker unit tests
+test: ./test.sh
+tag:
+ - eol-checker
+duration: 10m
+require:
+ - python3-pytest
+ - python3-pyyaml
+ - python-tox
diff --git a/eol-checker/test.sh b/eol-checker/test.sh
new file mode 100755
index 0000000..2798e5b
--- /dev/null
+++ b/eol-checker/test.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+set -euo pipefail
+tox -e "${TOX_ENV:-py314}"
diff --git a/ocp-stream-generator/.coverage b/ocp-stream-generator/.coverage
new file mode 100644
index 0000000..2c6e424
Binary files /dev/null and b/ocp-stream-generator/.coverage differ
diff --git a/ocp-stream-generator/coverage.xml b/ocp-stream-generator/coverage.xml
new file mode 100644
index 0000000..636a22f
--- /dev/null
+++ b/ocp-stream-generator/coverage.xml
@@ -0,0 +1,177 @@
+
+
+
+
+
+ /Users/phracek/work/scl-utils/ci-scripts/ocp-stream-generator/ocp_stream_generator
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ocp-stream-generator/main.fmf b/ocp-stream-generator/main.fmf
new file mode 100644
index 0000000..fa9adc8
--- /dev/null
+++ b/ocp-stream-generator/main.fmf
@@ -0,0 +1,9 @@
+summary: ocp-stream-generator unit tests
+test: ./test.sh
+tag:
+ - ocp-stream-generator
+duration: 10m
+require:
+ - python3-pytest
+ - python3-pyyaml
+ - python-tox
diff --git a/ocp-stream-generator/ocp_stream_generator/__pycache__/__init__.cpython-314.pyc b/ocp-stream-generator/ocp_stream_generator/__pycache__/__init__.cpython-314.pyc
new file mode 100644
index 0000000..be404c0
Binary files /dev/null and b/ocp-stream-generator/ocp_stream_generator/__pycache__/__init__.cpython-314.pyc differ
diff --git a/ocp-stream-generator/ocp_stream_generator/__pycache__/distribution_data.cpython-314.pyc b/ocp-stream-generator/ocp_stream_generator/__pycache__/distribution_data.cpython-314.pyc
new file mode 100644
index 0000000..8111e4f
Binary files /dev/null and b/ocp-stream-generator/ocp_stream_generator/__pycache__/distribution_data.cpython-314.pyc differ
diff --git a/ocp-stream-generator/ocp_stream_generator/__pycache__/stream_generator.cpython-314.pyc b/ocp-stream-generator/ocp_stream_generator/__pycache__/stream_generator.cpython-314.pyc
new file mode 100644
index 0000000..0a74ff5
Binary files /dev/null and b/ocp-stream-generator/ocp_stream_generator/__pycache__/stream_generator.cpython-314.pyc differ
diff --git a/ocp-stream-generator/test.sh b/ocp-stream-generator/test.sh
new file mode 100755
index 0000000..2798e5b
--- /dev/null
+++ b/ocp-stream-generator/test.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+set -euo pipefail
+tox -e "${TOX_ENV:-py314}"
diff --git a/ocp-stream-generator/tests/__pycache__/__init__.cpython-314.pyc b/ocp-stream-generator/tests/__pycache__/__init__.cpython-314.pyc
new file mode 100644
index 0000000..f3cd5da
Binary files /dev/null and b/ocp-stream-generator/tests/__pycache__/__init__.cpython-314.pyc differ
diff --git a/ocp-stream-generator/tests/__pycache__/test_imagestream_file.cpython-314-pytest-9.1.1.pyc b/ocp-stream-generator/tests/__pycache__/test_imagestream_file.cpython-314-pytest-9.1.1.pyc
new file mode 100644
index 0000000..e04fb6f
Binary files /dev/null and b/ocp-stream-generator/tests/__pycache__/test_imagestream_file.cpython-314-pytest-9.1.1.pyc differ
diff --git a/ocp-stream-generator/tests/__pycache__/test_json_builder.cpython-314-pytest-9.1.1.pyc b/ocp-stream-generator/tests/__pycache__/test_json_builder.cpython-314-pytest-9.1.1.pyc
new file mode 100644
index 0000000..77508b1
Binary files /dev/null and b/ocp-stream-generator/tests/__pycache__/test_json_builder.cpython-314-pytest-9.1.1.pyc differ
diff --git a/ocp-stream-generator/tests/__pycache__/test_yaml_loader.cpython-314-pytest-9.1.1.pyc b/ocp-stream-generator/tests/__pycache__/test_yaml_loader.cpython-314-pytest-9.1.1.pyc
new file mode 100644
index 0000000..7f2841a
Binary files /dev/null and b/ocp-stream-generator/tests/__pycache__/test_yaml_loader.cpython-314-pytest-9.1.1.pyc differ
diff --git a/ocp-stream-generator/tests/data/__pycache__/data_json_builder.cpython-314.pyc b/ocp-stream-generator/tests/data/__pycache__/data_json_builder.cpython-314.pyc
new file mode 100644
index 0000000..db298c8
Binary files /dev/null and b/ocp-stream-generator/tests/data/__pycache__/data_json_builder.cpython-314.pyc differ
diff --git a/ocp-stream-generator/tests/data/__pycache__/data_yaml_loader.cpython-314.pyc b/ocp-stream-generator/tests/data/__pycache__/data_yaml_loader.cpython-314.pyc
new file mode 100644
index 0000000..a220e02
Binary files /dev/null and b/ocp-stream-generator/tests/data/__pycache__/data_yaml_loader.cpython-314.pyc differ
diff --git a/plans/daily-tests.fmf b/plans/daily-tests.fmf
new file mode 100644
index 0000000..bf4747c
--- /dev/null
+++ b/plans/daily-tests.fmf
@@ -0,0 +1,6 @@
+summary: Run daily-tests pytest suite
+discover:
+ how: fmf
+ filter: tag:daily-tests
+execute:
+ how: tmt
diff --git a/plans/eol-checker.fmf b/plans/eol-checker.fmf
new file mode 100644
index 0000000..7a13e68
--- /dev/null
+++ b/plans/eol-checker.fmf
@@ -0,0 +1,6 @@
+summary: Run eol-checker pytest suite
+discover:
+ how: fmf
+ filter: tag:eol-checker
+execute:
+ how: tmt
diff --git a/plans/ocp-stream-generator.fmf b/plans/ocp-stream-generator.fmf
new file mode 100644
index 0000000..c89b8b3
--- /dev/null
+++ b/plans/ocp-stream-generator.fmf
@@ -0,0 +1,6 @@
+summary: Run ocp-stream-generator pytest suite
+discover:
+ how: fmf
+ filter: tag:ocp-stream-generator
+execute:
+ how: tmt