forked from rpms/leapp
Compare commits
No commits in common. "c8s-elevate" and "c8" have entirely different histories.
c8s-elevat
...
c8
@ -1 +0,0 @@
|
||||
1
|
||||
5
.gitignore
vendored
5
.gitignore
vendored
@ -1,4 +1 @@
|
||||
/leapp-0.18.0.tar.gz
|
||||
/leapp-0.19.0.tar.gz
|
||||
/leapp-0.20.0.tar.gz
|
||||
/leapp-0.21.0.tar.gz
|
||||
SOURCES/leapp-0.19.0.tar.gz
|
||||
|
||||
1
.leapp.metadata
Normal file
1
.leapp.metadata
Normal file
@ -0,0 +1 @@
|
||||
03632cf33458ec52b7fea2b8c7a5da68d953d4eb SOURCES/leapp-0.19.0.tar.gz
|
||||
@ -1,194 +0,0 @@
|
||||
From d67332c2234e437113493bfdce37594c1e2ae417 Mon Sep 17 00:00:00 2001
|
||||
From: Petr Stodulka <pstodulk@redhat.com>
|
||||
Date: Wed, 3 Dec 2025 08:48:08 +0100
|
||||
Subject: [PATCH 01/10] introduce the format_list function
|
||||
|
||||
The construction of report messages involving lists (e.g., package
|
||||
names, file paths) lacked a consistent formatting which led to
|
||||
inconsistencies and redefinitions when creating reports.
|
||||
|
||||
This patch introduces the format_list function to provide a consistent
|
||||
formatting option across all reports. The function is available from both
|
||||
leapp.libraries.stdlib and leapp.reporting. It supports custom sorting,
|
||||
item limits, and configurable separator.
|
||||
|
||||
Jira-ref: RHEL-126447
|
||||
---
|
||||
docs/source/best-practices.md | 17 +++++++++++
|
||||
leapp/libraries/stdlib/__init__.py | 36 +++++++++++++++++++++--
|
||||
leapp/reporting/__init__.py | 5 +++-
|
||||
packaging/leapp.spec | 2 +-
|
||||
tests/scripts/test_format_list.py | 47 ++++++++++++++++++++++++++++++
|
||||
5 files changed, 103 insertions(+), 4 deletions(-)
|
||||
create mode 100644 tests/scripts/test_format_list.py
|
||||
|
||||
diff --git a/docs/source/best-practices.md b/docs/source/best-practices.md
|
||||
index 11f861a..913dcbd 100644
|
||||
--- a/docs/source/best-practices.md
|
||||
+++ b/docs/source/best-practices.md
|
||||
@@ -155,6 +155,23 @@ In case of [StopActorExecutionError](leapp.exceptions.StopActorExecutionError) t
|
||||
|
||||
You can also use the [StopActorExecution](leapp.exceptions.StopActorExecution) and [StopActorExecutionError](leapp.exceptions.StopActorExecutionError) exceptions inside a private or shared library.
|
||||
|
||||
+## Consistent list formatting in reports
|
||||
+
|
||||
+When constructing report messages that include lists of items (e.g. package names, file paths), use the `format_list` function to ensure consistent formatting across all reports. The function is available from both `leapp.libraries.stdlib` and `leapp.reporting`. It supports custom sorting, item limits, and configurable separators.
|
||||
+
|
||||
+```python
|
||||
+from leapp.reporting import format_list
|
||||
+
|
||||
+pkgs = ['kernel', 'bash', 'glibc']
|
||||
+msg = 'The following packages will be removed:{}'.format(format_list(pkgs))
|
||||
+
|
||||
+# Output:
|
||||
+#The following packages will be removed:
|
||||
+# - bash
|
||||
+# - glibc
|
||||
+# - kernel
|
||||
+```
|
||||
+
|
||||
## Use the LEAPP and LEAPP\_DEVEL prefixes for new envars
|
||||
|
||||
In case you need to change a behaviour of actor(s) for testing or development purposes - e.g. be able to skip a functionality in your actor - use environment variables. Such environment variables should start with prefix *LEAPP\_DEVEL*. Such variables are not possible to use on production systems without special *LEAPP\_UNSUPPORTED* variable. This prevents users to break their systems by a mistake.
|
||||
diff --git a/leapp/libraries/stdlib/__init__.py b/leapp/libraries/stdlib/__init__.py
|
||||
index 89e59b2..efe2029 100644
|
||||
--- a/leapp/libraries/stdlib/__init__.py
|
||||
+++ b/leapp/libraries/stdlib/__init__.py
|
||||
@@ -8,12 +8,15 @@ import logging
|
||||
import os
|
||||
import sys
|
||||
import uuid
|
||||
+from itertools import islice
|
||||
|
||||
from leapp.exceptions import LeappError
|
||||
-from leapp.utils.audit import create_audit_entry
|
||||
from leapp.libraries.stdlib import api
|
||||
-from leapp.libraries.stdlib.call import _call, STDOUT
|
||||
+from leapp.libraries.stdlib.call import STDOUT, _call
|
||||
from leapp.libraries.stdlib.config import is_debug
|
||||
+from leapp.utils.audit import create_audit_entry
|
||||
+
|
||||
+FMT_LIST_SEPARATOR = '\n - '
|
||||
|
||||
|
||||
class CalledProcessError(LeappError):
|
||||
@@ -214,3 +217,32 @@ def run(args, split=False, callback_raw=_console_logging_handler, callback_lineb
|
||||
)
|
||||
api.current_logger().debug('External command has finished: {0}'.format(str(args)))
|
||||
return result
|
||||
+
|
||||
+
|
||||
+def format_list(data, sep=FMT_LIST_SEPARATOR, callback_sort=sorted, limit=0):
|
||||
+ """
|
||||
+ Format an iterable into a string using a specified separator that is prepended to every item.
|
||||
+
|
||||
+ This function can be used to consistently format lists in reports, logs, and error messages.
|
||||
+
|
||||
+ :param data: Iterable of items to format.
|
||||
+ :type data: Iterable
|
||||
+ :param sep: Separator prepended to each item. Defaults to FMT_LIST_SEPARATOR.
|
||||
+ :type sep: str
|
||||
+ :param callback_sort: Callable returning a new list, called before the limit is applied.
|
||||
+ Set to None to preserve original order. Defaults to sorted.
|
||||
+ :type callback_sort: Callable or None
|
||||
+ :param limit: Maximum number of items to include. Defaults to 0 (no limit).
|
||||
+ :type limit: int
|
||||
+ :returns: A string with each item prefixed by the specified separator.
|
||||
+ :rtype: str
|
||||
+ """
|
||||
+ items = data
|
||||
+ if callback_sort is not None:
|
||||
+ items = callback_sort(data)
|
||||
+
|
||||
+ if limit > 0:
|
||||
+ items = islice(items, limit)
|
||||
+
|
||||
+ res = ['{}{}'.format(sep, item) for item in items]
|
||||
+ return ''.join(res)
|
||||
diff --git a/leapp/reporting/__init__.py b/leapp/reporting/__init__.py
|
||||
index 7a0e223..34af17a 100644
|
||||
--- a/leapp/reporting/__init__.py
|
||||
+++ b/leapp/reporting/__init__.py
|
||||
@@ -6,9 +6,12 @@ import os
|
||||
import six
|
||||
|
||||
from leapp.compat import string_types
|
||||
+# NOTE(pstodulk): the format_list is imported to provide the function
|
||||
+# also in this library. Its use is not planned here however.
|
||||
+from leapp.libraries.stdlib import format_list
|
||||
+from leapp.libraries.stdlib.api import produce
|
||||
from leapp.models import fields, Model, ErrorModel
|
||||
from leapp.topics import ReportTopic
|
||||
-from leapp.libraries.stdlib.api import produce
|
||||
from leapp.utils.deprecation import deprecated
|
||||
|
||||
|
||||
diff --git a/packaging/leapp.spec b/packaging/leapp.spec
|
||||
index 1e32cf6..a06b141 100644
|
||||
--- a/packaging/leapp.spec
|
||||
+++ b/packaging/leapp.spec
|
||||
@@ -13,7 +13,7 @@
|
||||
# This is kind of help for more flexible development of leapp repository,
|
||||
# so people do not have to wait for new official release of leapp to ensure
|
||||
# it is installed/used the compatible one.
|
||||
-%global framework_version 6.2
|
||||
+%global framework_version 6.3
|
||||
|
||||
# IMPORTANT: everytime the requirements are changed, increment number by one
|
||||
# - same for Provides in deps subpackage
|
||||
diff --git a/tests/scripts/test_format_list.py b/tests/scripts/test_format_list.py
|
||||
new file mode 100644
|
||||
index 0000000..1b0ca24
|
||||
--- /dev/null
|
||||
+++ b/tests/scripts/test_format_list.py
|
||||
@@ -0,0 +1,47 @@
|
||||
+import pytest
|
||||
+
|
||||
+from leapp.libraries.stdlib import FMT_LIST_SEPARATOR, format_list
|
||||
+
|
||||
+SEP = ', '
|
||||
+
|
||||
+
|
||||
+@pytest.mark.parametrize('data, kwargs, expected', [
|
||||
+ # Basic usage
|
||||
+ ([], {}, ''),
|
||||
+ (['c', 'a', 'b'], {}, '{0}a{0}b{0}c'.format(FMT_LIST_SEPARATOR)),
|
||||
+ (['c', 'a', 'b'], {'sep': SEP}, ', a, b, c'),
|
||||
+ (['a'], {'sep': SEP}, ', a'),
|
||||
+ # Sorting
|
||||
+ (['c', 'a', 'b'], {'sep': SEP, 'callback_sort': None}, ', c, a, b'),
|
||||
+ (['c', 'a', 'b'], {'sep': SEP, 'callback_sort': lambda d: sorted(d, reverse=True)}, ', c, b, a'),
|
||||
+ # Limit
|
||||
+ (['c', 'a', 'b'], {'sep': SEP, 'limit': 2}, ', a, b'),
|
||||
+ (['c', 'a', 'b'], {'sep': SEP, 'limit': 0}, ', a, b, c'),
|
||||
+ (['b', 'a'], {'sep': SEP, 'limit': 10}, ', a, b'),
|
||||
+ (['c', 'a', 'b'], {'sep': SEP, 'limit': -1}, ', a, b, c'),
|
||||
+ # Non-list iterables
|
||||
+ ({'a', 'b', 'c'}, {'sep': SEP, 'limit': 2}, ', a, b'),
|
||||
+ (('a', 'b'), {'sep': SEP}, ', a, b'),
|
||||
+ ({'b': 1, 'a': 2}, {'sep': SEP}, ', a, b'),
|
||||
+ # Generators
|
||||
+ ((x for x in ['c', 'a', 'b']), {'sep': SEP}, ', a, b, c'),
|
||||
+ ((x for x in ['c', 'a', 'b']), {'sep': SEP, 'callback_sort': None, 'limit': 2}, ', c, a'),
|
||||
+], ids=[
|
||||
+ 'empty_data',
|
||||
+ 'single_item',
|
||||
+ 'default_separator',
|
||||
+ 'custom_separator',
|
||||
+ 'no_sort',
|
||||
+ 'reverse_sort',
|
||||
+ 'limit',
|
||||
+ 'limit_zero',
|
||||
+ 'limit_larger_than_data',
|
||||
+ 'negative_limit_ignored',
|
||||
+ 'set_input',
|
||||
+ 'tuple_input',
|
||||
+ 'dict_keys_input',
|
||||
+ 'generator_sorted',
|
||||
+ 'generator_unsorted_with_limit',
|
||||
+])
|
||||
+def test_format_list(data, kwargs, expected):
|
||||
+ assert format_list(data, **kwargs) == expected
|
||||
--
|
||||
2.53.0
|
||||
|
||||
@ -1,61 +0,0 @@
|
||||
From 2f210e763a8b851f1804f518fb02466db9cb55fa Mon Sep 17 00:00:00 2001
|
||||
From: Peter Mocary <pmocary@redhat.com>
|
||||
Date: Tue, 3 Mar 2026 16:30:31 +0100
|
||||
Subject: [PATCH 02/10] packit: remove unsupported upgrade path from tests
|
||||
|
||||
---
|
||||
.packit.yaml | 31 -------------------------------
|
||||
1 file changed, 31 deletions(-)
|
||||
|
||||
diff --git a/.packit.yaml b/.packit.yaml
|
||||
index 0566801..254b24b 100644
|
||||
--- a/.packit.yaml
|
||||
+++ b/.packit.yaml
|
||||
@@ -326,15 +326,6 @@ jobs:
|
||||
provisioning:
|
||||
tags:
|
||||
BusinessUnit: sst_upgrades@leapp_upstream_test
|
||||
- - &tmt-env-settings-centos9torhel101
|
||||
- tmt:
|
||||
- context: &tmt-context-centos9torhel101
|
||||
- distro: "centos-9"
|
||||
- distro_target: "rhel-10.1"
|
||||
- settings:
|
||||
- provisioning:
|
||||
- tags:
|
||||
- BusinessUnit: sst_upgrades@leapp_upstream_test
|
||||
- &tmt-env-settings-98to102
|
||||
tmt:
|
||||
context: &tmt-context-98to102
|
||||
@@ -521,28 +512,6 @@ jobs:
|
||||
# ###################### CentOS Stream > RHEL ########################## #
|
||||
# ###################################################################### #
|
||||
|
||||
-# ###################################################################### #
|
||||
-# ############################ 9 > 10.1 ################################ #
|
||||
-# ###################################################################### #
|
||||
-
|
||||
-- &sanity-centos9torhel101
|
||||
- <<: *sanity-abstract-9to10
|
||||
- trigger: pull_request
|
||||
- identifier: sanity-CentOS9toRHEL10.1
|
||||
- targets:
|
||||
- epel-9-x86_64:
|
||||
- distros: [CentOS-Stream-9]
|
||||
- tf_extra_params:
|
||||
- test:
|
||||
- tmt:
|
||||
- plan_filter: 'tag:9to10 & tag:tier0 & enabled:true & tag:-rhsm'
|
||||
- environments:
|
||||
- - artifacts: *artifacts-for-rhel9
|
||||
- - *tmt-env-settings-centos9torhel101
|
||||
- env: &env-centos9to101
|
||||
- SOURCE_RELEASE: "9"
|
||||
- TARGET_RELEASE: "10.1"
|
||||
-
|
||||
# ###################################################################### #
|
||||
# ############################ 9 > 10.2 ################################ #
|
||||
# ###################################################################### #
|
||||
--
|
||||
2.53.0
|
||||
|
||||
@ -1,300 +0,0 @@
|
||||
From 80c700223948b7a11af1b71c1ed81145662786ae Mon Sep 17 00:00:00 2001
|
||||
From: Peter Mocary <pmocary@redhat.com>
|
||||
Date: Fri, 6 Mar 2026 17:56:10 +0100
|
||||
Subject: [PATCH 03/10] packit: add new upgrade paths to tests
|
||||
|
||||
Adds the 8.10 -> 9.9 -> 10.3 upgrade paths to CI tests.
|
||||
---
|
||||
.packit.yaml | 187 ++++++++++++++++++++++++++++++++++++++++++++++++---
|
||||
1 file changed, 179 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/.packit.yaml b/.packit.yaml
|
||||
index 254b24b..cd45f27 100644
|
||||
--- a/.packit.yaml
|
||||
+++ b/.packit.yaml
|
||||
@@ -23,6 +23,7 @@ jobs:
|
||||
get-current-version:
|
||||
# get version from spec file instead from git tag
|
||||
- bash -c "grep -m1 '^Version:' packaging/leapp.spec | grep -om1 '[0-9].[0-9.]**'"
|
||||
+
|
||||
- job: copr_build
|
||||
trigger: commit
|
||||
metadata:
|
||||
@@ -107,6 +108,15 @@ jobs:
|
||||
provisioning:
|
||||
tags:
|
||||
BusinessUnit: sst_upgrades@leapp_upstream_test
|
||||
+ - &tmt-env-settings-810to99
|
||||
+ tmt:
|
||||
+ context: &tmt-context-810to99
|
||||
+ distro: "rhel-8.10"
|
||||
+ distro_target: "rhel-9.9"
|
||||
+ settings:
|
||||
+ provisioning:
|
||||
+ tags:
|
||||
+ BusinessUnit: sst_upgrades@leapp_upstream_test
|
||||
|
||||
- &sanity-abstract-8to9-aws
|
||||
<<: *sanity-abstract-8to9
|
||||
@@ -188,7 +198,7 @@ jobs:
|
||||
tf_extra_params:
|
||||
test:
|
||||
tmt:
|
||||
- plan_filter: 'tag:8to9 & tag:kernel-rt & enabled:true & tag:-rhsm'
|
||||
+ plan_filter: 'tag:8to9 & tag:kernel-rt & enabled:true & tag:-rhsm'
|
||||
environments:
|
||||
- artifacts: *artifacts-for-rhel8
|
||||
- *tmt-env-settings-810to96
|
||||
@@ -217,7 +227,6 @@ jobs:
|
||||
env:
|
||||
<<: *env-810to96
|
||||
|
||||
-
|
||||
# ###################################################################### #
|
||||
# ############################# 8.10 > 9.8 ############################# #
|
||||
# ###################################################################### #
|
||||
@@ -268,13 +277,70 @@ jobs:
|
||||
tf_extra_params:
|
||||
test:
|
||||
tmt:
|
||||
- plan_filter: 'tag:8to9 & tag:kernel-rt & enabled:true'
|
||||
+ plan_filter: 'tag:8to9 & tag:kernel-rt & enabled:true'
|
||||
environments:
|
||||
- artifacts: *artifacts-for-rhel8
|
||||
- *tmt-env-settings-810to98
|
||||
env:
|
||||
<<: *env-810to98
|
||||
|
||||
+# ###################################################################### #
|
||||
+# ############################# 8.10 > 9.9 ############################# #
|
||||
+# ###################################################################### #
|
||||
+
|
||||
+- &sanity-810to99
|
||||
+ <<: *sanity-abstract-8to9
|
||||
+ trigger: pull_request
|
||||
+ identifier: sanity-8.10to9.9
|
||||
+ tf_extra_params:
|
||||
+ test:
|
||||
+ tmt:
|
||||
+ plan_filter: 'tag:8to9 & tag:tier0 & enabled:true'
|
||||
+ environments:
|
||||
+ - artifacts: *artifacts-for-rhel8
|
||||
+ - *tmt-env-settings-810to99
|
||||
+ env: &env-810to99
|
||||
+ SOURCE_RELEASE: "8.10"
|
||||
+ TARGET_RELEASE: "9.9"
|
||||
+
|
||||
+# On-demand minimal beaker tests
|
||||
+- &beaker-minimal-810to99
|
||||
+ <<: *beaker-minimal-8to9-abstract-ondemand
|
||||
+ trigger: pull_request
|
||||
+ labels:
|
||||
+ - beaker-minimal
|
||||
+ - beaker-minimal-8.10to9.9
|
||||
+ - 8.10to9.9
|
||||
+ identifier: sanity-8.10to9.9-beaker-minimal-ondemand
|
||||
+ tf_extra_params:
|
||||
+ test:
|
||||
+ tmt:
|
||||
+ plan_filter: 'tag:8to9 & tag:partitioning & enabled:true'
|
||||
+ environments:
|
||||
+ - artifacts: *artifacts-for-rhel8
|
||||
+ - *tmt-env-settings-810to99
|
||||
+ env:
|
||||
+ <<: *env-810to99
|
||||
+
|
||||
+# On-demand kernel-rt tests
|
||||
+- &kernel-rt-810to99
|
||||
+ <<: *kernel-rt-abstract-8to9-ondemand
|
||||
+ trigger: pull_request
|
||||
+ labels:
|
||||
+ - kernel-rt
|
||||
+ - kernel-rt-8.10to9.9
|
||||
+ - 8.10to9.9
|
||||
+ identifier: sanity-8.10to9.9-kernel-rt-ondemand
|
||||
+ tf_extra_params:
|
||||
+ test:
|
||||
+ tmt:
|
||||
+ plan_filter: 'tag:8to9 & tag:kernel-rt & enabled:true'
|
||||
+ environments:
|
||||
+ - artifacts: *artifacts-for-rhel8
|
||||
+ - *tmt-env-settings-810to99
|
||||
+ env:
|
||||
+ <<: *env-810to99
|
||||
+
|
||||
# ###################################################################### #
|
||||
# ############################## 9 TO 10 ################################ #
|
||||
# ###################################################################### #
|
||||
@@ -344,6 +410,24 @@ jobs:
|
||||
provisioning:
|
||||
tags:
|
||||
BusinessUnit: sst_upgrades@leapp_upstream_test
|
||||
+ - &tmt-env-settings-99to103
|
||||
+ tmt:
|
||||
+ context: &tmt-context-99to103
|
||||
+ distro: "rhel-9.9"
|
||||
+ distro_target: "rhel-10.3"
|
||||
+ settings:
|
||||
+ provisioning:
|
||||
+ tags:
|
||||
+ BusinessUnit: sst_upgrades@leapp_upstream_test
|
||||
+ - &tmt-env-settings-centos9torhel103
|
||||
+ tmt:
|
||||
+ context: &tmt-context-centos9torhel103
|
||||
+ distro: "centos-9"
|
||||
+ distro_target: "rhel-10.3"
|
||||
+ settings:
|
||||
+ provisioning:
|
||||
+ tags:
|
||||
+ BusinessUnit: sst_upgrades@leapp_upstream_test
|
||||
|
||||
- &sanity-abstract-9to10-aws
|
||||
<<: *sanity-abstract-9to10
|
||||
@@ -412,7 +496,7 @@ jobs:
|
||||
tf_extra_params:
|
||||
test:
|
||||
tmt:
|
||||
- plan_filter: 'tag:8to9 & tag:partitioning & enabled:true & tag:-rhsm'
|
||||
+ plan_filter: 'tag:9to10 & tag:partitioning & enabled:true & tag:-rhsm'
|
||||
environments:
|
||||
- artifacts: *artifacts-for-rhel9
|
||||
- *tmt-env-settings-96to100
|
||||
@@ -431,7 +515,7 @@ jobs:
|
||||
tf_extra_params:
|
||||
test:
|
||||
tmt:
|
||||
- plan_filter: 'tag:8to9 & tag:kernel-rt & enabled:true & tag:-rhsm'
|
||||
+ plan_filter: 'tag:9to10 & tag:kernel-rt & enabled:true & tag:-rhsm'
|
||||
environments:
|
||||
- artifacts: *artifacts-for-rhel9
|
||||
- *tmt-env-settings-96to100
|
||||
@@ -475,7 +559,7 @@ jobs:
|
||||
tf_extra_params:
|
||||
test:
|
||||
tmt:
|
||||
- plan_filter: 'tag:8to9 & tag:partitioning & enabled:true & tag:-rhsm'
|
||||
+ plan_filter: 'tag:9to10 & tag:partitioning & enabled:true & tag:-rhsm'
|
||||
environments:
|
||||
- artifacts: *artifacts-for-rhel9
|
||||
- *tmt-env-settings-98to102
|
||||
@@ -497,13 +581,79 @@ jobs:
|
||||
tf_extra_params:
|
||||
test:
|
||||
tmt:
|
||||
- plan_filter: 'tag:8to9 & tag:kernel-rt & enabled:true & tag:-rhsm'
|
||||
+ plan_filter: 'tag:9to10 & tag:kernel-rt & enabled:true & tag:-rhsm'
|
||||
environments:
|
||||
- artifacts: *artifacts-for-rhel9
|
||||
- *tmt-env-settings-98to102
|
||||
env:
|
||||
<<: *env-98to102
|
||||
|
||||
+# ###################################################################### #
|
||||
+# ############################# 9.9 > 10.3 ############################# #
|
||||
+# ###################################################################### #
|
||||
+
|
||||
+- &sanity-99to103
|
||||
+ <<: *sanity-abstract-9to10
|
||||
+ trigger: pull_request
|
||||
+ identifier: sanity-9.9to10.3
|
||||
+ targets:
|
||||
+ epel-9-x86_64:
|
||||
+ distros: [RHEL-9.9.0-Nightly]
|
||||
+ tf_extra_params:
|
||||
+ test:
|
||||
+ tmt:
|
||||
+ plan_filter: 'tag:9to10 & tag:tier0 & enabled:true'
|
||||
+ environments:
|
||||
+ - artifacts: *artifacts-for-rhel9
|
||||
+ - *tmt-env-settings-99to103
|
||||
+ env: &env-99to103
|
||||
+ SOURCE_RELEASE: "9.9"
|
||||
+ TARGET_RELEASE: "10.3"
|
||||
+
|
||||
+# On-demand minimal beaker tests
|
||||
+- &beaker-minimal-99to103
|
||||
+ <<: *beaker-minimal-9to10-abstract-ondemand
|
||||
+ trigger: pull_request
|
||||
+ labels:
|
||||
+ - beaker-minimal
|
||||
+ - beaker-minimal-9.9to10.3
|
||||
+ - 9.9to10.3
|
||||
+ identifier: sanity-9.9to10.3-beaker-minimal-ondemand
|
||||
+ targets:
|
||||
+ epel-9-x86_64:
|
||||
+ distros: [RHEL-9.9-Nightly]
|
||||
+ tf_extra_params:
|
||||
+ test:
|
||||
+ tmt:
|
||||
+ plan_filter: 'tag:9to10 & tag:partitioning & enabled:true'
|
||||
+ environments:
|
||||
+ - artifacts: *artifacts-for-rhel9
|
||||
+ - *tmt-env-settings-99to103
|
||||
+ env:
|
||||
+ <<: *env-99to103
|
||||
+
|
||||
+# On-demand kernel-rt tests
|
||||
+- &kernel-rt-99to103
|
||||
+ <<: *kernel-rt-abstract-9to10-ondemand
|
||||
+ trigger: pull_request
|
||||
+ labels:
|
||||
+ - kernel-rt
|
||||
+ - kernel-rt-9.9to10.3
|
||||
+ - 9.9to10.3
|
||||
+ identifier: sanity-9.9to10.3-kernel-rt-ondemand
|
||||
+ targets:
|
||||
+ epel-9-x86_64:
|
||||
+ distros: [RHEL-9.9-Nightly]
|
||||
+ tf_extra_params:
|
||||
+ test:
|
||||
+ tmt:
|
||||
+ plan_filter: 'tag:9to10 & tag:kernel-rt & enabled:true'
|
||||
+ environments:
|
||||
+ - artifacts: *artifacts-for-rhel9
|
||||
+ - *tmt-env-settings-99to103
|
||||
+ env:
|
||||
+ <<: *env-99to103
|
||||
+
|
||||
# ###################################################################### #
|
||||
# ########################## CentOS Stream ############################# #
|
||||
# ###################################################################### #
|
||||
@@ -527,7 +677,6 @@ jobs:
|
||||
test:
|
||||
tmt:
|
||||
plan_filter: 'tag:9to10 & tag:tier0 & enabled:true & tag:-rhsm'
|
||||
- name:
|
||||
environments:
|
||||
- artifacts: *artifacts-for-rhel9
|
||||
- *tmt-env-settings-centos9torhel102
|
||||
@@ -535,6 +684,28 @@ jobs:
|
||||
SOURCE_RELEASE: "9"
|
||||
TARGET_RELEASE: "10.2"
|
||||
|
||||
+# ###################################################################### #
|
||||
+# ############################ 9 > 10.3 ################################ #
|
||||
+# ###################################################################### #
|
||||
+
|
||||
+- &sanity-centos9torhel103
|
||||
+ <<: *sanity-abstract-9to10
|
||||
+ trigger: pull_request
|
||||
+ identifier: sanity-CentOS9toRHEL10.3
|
||||
+ targets:
|
||||
+ epel-9-x86_64:
|
||||
+ distros: [CentOS-Stream-9]
|
||||
+ tf_extra_params:
|
||||
+ test:
|
||||
+ tmt:
|
||||
+ plan_filter: 'tag:9to10 & tag:tier0 & enabled:true & tag:-rhsm'
|
||||
+ environments:
|
||||
+ - artifacts: *artifacts-for-rhel9
|
||||
+ - *tmt-env-settings-centos9torhel103
|
||||
+ env: &env-centos9torhel103
|
||||
+ SOURCE_RELEASE: "9"
|
||||
+ TARGET_RELEASE: "10.3"
|
||||
+
|
||||
# ###################################################################### #
|
||||
# ################## CentOS Stream > CentOS Stream ##################### #
|
||||
# ###################################################################### #
|
||||
--
|
||||
2.53.0
|
||||
|
||||
@ -1,48 +0,0 @@
|
||||
From 136ed3baac103bfb0945d74703c7b7a05f40d8bd Mon Sep 17 00:00:00 2001
|
||||
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
|
||||
Date: Thu, 5 Mar 2026 09:51:22 +0000
|
||||
Subject: [PATCH 04/10] chore(deps): update actions/checkout action to v6
|
||||
|
||||
---
|
||||
.github/workflows/reuse-copr-build.yml | 4 ++--
|
||||
.github/workflows/unit-tests.yml | 2 +-
|
||||
2 files changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/.github/workflows/reuse-copr-build.yml b/.github/workflows/reuse-copr-build.yml
|
||||
index c2fb51c..5e33fe3 100644
|
||||
--- a/.github/workflows/reuse-copr-build.yml
|
||||
+++ b/.github/workflows/reuse-copr-build.yml
|
||||
@@ -49,7 +49,7 @@ jobs:
|
||||
# TODO: The correct way to checkout would be to use simmilar approach as in get_commit_by_timestamp function of
|
||||
# the github gluetool module (i.e. do not use HEAD but the last commit before comment).
|
||||
id: checkout
|
||||
- uses: actions/checkout@v5
|
||||
+ uses: actions/checkout@v6
|
||||
with:
|
||||
ref: "refs/pull/${{ steps.pr_nr.outputs.pr_nr }}/head"
|
||||
|
||||
@@ -121,7 +121,7 @@ jobs:
|
||||
- name: Checkout leapp-repository
|
||||
id: checkout_leapp_repository
|
||||
if: ${{ steps.leapp_repository_pr_regex_match.outputs.match != '' }}
|
||||
- uses: actions/checkout@v5
|
||||
+ uses: actions/checkout@v6
|
||||
with:
|
||||
repository: "oamg/leapp-repository"
|
||||
ref: "refs/pull/${{ steps.leapp_repository_pr.outputs.leapp_repository_pr }}/head"
|
||||
diff --git a/.github/workflows/unit-tests.yml b/.github/workflows/unit-tests.yml
|
||||
index 70d624d..906a45d 100644
|
||||
--- a/.github/workflows/unit-tests.yml
|
||||
+++ b/.github/workflows/unit-tests.yml
|
||||
@@ -36,7 +36,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
- uses: actions/checkout@v5
|
||||
+ uses: actions/checkout@v6
|
||||
with:
|
||||
fetch-depth: '0'
|
||||
- name: Set main to origin/main
|
||||
--
|
||||
2.53.0
|
||||
|
||||
@ -1,34 +0,0 @@
|
||||
From dc9e1c60e5cc84abf1b5df0972072f7795bc860c Mon Sep 17 00:00:00 2001
|
||||
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
|
||||
Date: Thu, 5 Mar 2026 09:51:26 +0000
|
||||
Subject: [PATCH 05/10] chore(deps): update actions/github-script action to v8
|
||||
|
||||
---
|
||||
.github/workflows/reuse-copr-build.yml | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/.github/workflows/reuse-copr-build.yml b/.github/workflows/reuse-copr-build.yml
|
||||
index 5e33fe3..0f6b823 100644
|
||||
--- a/.github/workflows/reuse-copr-build.yml
|
||||
+++ b/.github/workflows/reuse-copr-build.yml
|
||||
@@ -102,7 +102,7 @@ jobs:
|
||||
- name: Add comment with copr build url
|
||||
# TODO: Create comment when copr build fails.
|
||||
id: link_copr
|
||||
- uses: actions/github-script@v7
|
||||
+ uses: actions/github-script@v8
|
||||
with:
|
||||
script: |
|
||||
github.issues.createComment({
|
||||
@@ -160,7 +160,7 @@ jobs:
|
||||
# TODO: Create comment when copr build fails.
|
||||
id: link_copr_leapp_repository
|
||||
if: ${{ steps.leapp_repository_pr_regex_match.outputs.match != '' }}
|
||||
- uses: actions/github-script@v7
|
||||
+ uses: actions/github-script@v8
|
||||
with:
|
||||
script: |
|
||||
github.issues.createComment({
|
||||
--
|
||||
2.53.0
|
||||
|
||||
@ -1,26 +0,0 @@
|
||||
From a2cbc6e98539926dc25862172b89a5585562009b Mon Sep 17 00:00:00 2001
|
||||
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
|
||||
Date: Thu, 5 Mar 2026 09:51:28 +0000
|
||||
Subject: [PATCH 06/10] chore(deps): update
|
||||
peter-evans/create-or-update-comment action to v5
|
||||
|
||||
---
|
||||
.github/workflows/pr-welcome-msg.yml | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/.github/workflows/pr-welcome-msg.yml b/.github/workflows/pr-welcome-msg.yml
|
||||
index 66d001e..5d9fc3e 100644
|
||||
--- a/.github/workflows/pr-welcome-msg.yml
|
||||
+++ b/.github/workflows/pr-welcome-msg.yml
|
||||
@@ -14,7 +14,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Create comment
|
||||
- uses: peter-evans/create-or-update-comment@v4
|
||||
+ uses: peter-evans/create-or-update-comment@v5
|
||||
with:
|
||||
issue-number: ${{ github.event.pull_request.number }}
|
||||
body: |
|
||||
--
|
||||
2.53.0
|
||||
|
||||
@ -1,157 +0,0 @@
|
||||
From 9fbd48b20f556cb613f3ca7999f4fc9d74e24024 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Mocary <pmocary@redhat.com>
|
||||
Date: Tue, 17 Mar 2026 12:22:35 +0100
|
||||
Subject: [PATCH 07/10] reporting: fix incorrect converting of list based
|
||||
commands
|
||||
|
||||
The reporting module handled conversion between shell command
|
||||
representations for the text and json reports incorrectly. The list of
|
||||
strings representation was converted without preserving the argument
|
||||
separation correctly which results in malformed commands in the text
|
||||
report.
|
||||
|
||||
This patch utilizes the built-in shlex Python library for the conversion
|
||||
which preserves the argument separation by wrapping arguments in quotes
|
||||
when necessary.
|
||||
|
||||
Jira: RHEL-156521
|
||||
---
|
||||
leapp/reporting/__init__.py | 9 +++--
|
||||
packaging/leapp.spec | 2 +-
|
||||
tests/scripts/test_reporting.py | 61 +++++++++++++++++++++++++++++++--
|
||||
3 files changed, 66 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/leapp/reporting/__init__.py b/leapp/reporting/__init__.py
|
||||
index 34af17a..ca2b80b 100644
|
||||
--- a/leapp/reporting/__init__.py
|
||||
+++ b/leapp/reporting/__init__.py
|
||||
@@ -1,8 +1,9 @@
|
||||
import datetime
|
||||
-import json
|
||||
import hashlib
|
||||
+import json
|
||||
import logging
|
||||
import os
|
||||
+import shlex
|
||||
import six
|
||||
|
||||
from leapp.compat import string_types
|
||||
@@ -10,7 +11,7 @@ from leapp.compat import string_types
|
||||
# also in this library. Its use is not planned here however.
|
||||
from leapp.libraries.stdlib import format_list
|
||||
from leapp.libraries.stdlib.api import produce
|
||||
-from leapp.models import fields, Model, ErrorModel
|
||||
+from leapp.models import ErrorModel, Model, fields
|
||||
from leapp.topics import ReportTopic
|
||||
from leapp.utils.deprecation import deprecated
|
||||
|
||||
@@ -281,8 +282,10 @@ class RemediationCommand(BaseRemediation):
|
||||
def __repr__(self):
|
||||
# NOTE(ivasilev) As the message can contain non-ascii characters let's deal with it properly.
|
||||
# As per python practices repr has to return an encoded string
|
||||
+ # Note(pmocary) Using shlex.join is not possible here due to it being available from Python 3.8,
|
||||
+ # thus we use the shlex.quote on each argument instead which is the same as shlex.join implementation.
|
||||
return "[{}] {}".format(self._value['type'],
|
||||
- ' '.join([_guarantee_encoded_str(c) for c in self._value['context']]))
|
||||
+ ' '.join([shlex.quote(_guarantee_encoded_str(c)) for c in self._value['context']]))
|
||||
|
||||
|
||||
class RemediationHint(BaseRemediation):
|
||||
diff --git a/packaging/leapp.spec b/packaging/leapp.spec
|
||||
index a06b141..ba906cf 100644
|
||||
--- a/packaging/leapp.spec
|
||||
+++ b/packaging/leapp.spec
|
||||
@@ -13,7 +13,7 @@
|
||||
# This is kind of help for more flexible development of leapp repository,
|
||||
# so people do not have to wait for new official release of leapp to ensure
|
||||
# it is installed/used the compatible one.
|
||||
-%global framework_version 6.3
|
||||
+%global framework_version 6.4
|
||||
|
||||
# IMPORTANT: everytime the requirements are changed, increment number by one
|
||||
# - same for Provides in deps subpackage
|
||||
diff --git a/tests/scripts/test_reporting.py b/tests/scripts/test_reporting.py
|
||||
index 2b0f245..8c284cb 100644
|
||||
--- a/tests/scripts/test_reporting.py
|
||||
+++ b/tests/scripts/test_reporting.py
|
||||
@@ -14,11 +14,10 @@ from leapp.reporting import (
|
||||
create_report_from_deprecation,
|
||||
create_report_from_error,
|
||||
_create_report_object,
|
||||
- Audience, Flags, Groups, Key, RelatedResource, Remediation, Summary, Severity, Tags, Title
|
||||
+ Audience, Flags, Groups, Key, RelatedResource, Remediation, RemediationCommand, Summary, Severity, Tags, Title
|
||||
)
|
||||
from leapp.utils.report import generate_report_file
|
||||
|
||||
-
|
||||
ReportPrimitive = namedtuple('ReportPrimitive', ['data', 'path', 'value', 'is_leaf_list'])
|
||||
|
||||
leaf_is_dict = ReportPrimitive({}, ('summary',), 'We better fix this!', False)
|
||||
@@ -103,6 +102,64 @@ def test_report_tags_and_flags():
|
||||
assert Flags(["This is a new flag", Groups.INHIBITOR]).value == ["This is a new flag", "inhibitor"]
|
||||
|
||||
|
||||
+@pytest.mark.parametrize('command, expected_command_form', [
|
||||
+ (['cmd'], "cmd"),
|
||||
+ (['cmd', ''], "cmd ''"),
|
||||
+ (['cmd', 'not_quoted'], "cmd not_quoted"),
|
||||
+ (['ls', '-la', '/home/user'], "ls -la /home/user"),
|
||||
+
|
||||
+ # Quoting ' '
|
||||
+ (['cmd', 'is quoted'], "cmd 'is quoted'"),
|
||||
+ (['mv', '/home/user/test file', '/home/user/test_file'], "mv '/home/user/test file' /home/user/test_file"),
|
||||
+
|
||||
+ # Quoting '$'
|
||||
+ # Note: Execution of the first command would fail, but it is the correct conversion.
|
||||
+ # The second test case should be used to utilize the shell expansion.
|
||||
+ (['chsh', '-s', '$(which zsh)', '$USER'], "chsh -s '$(which zsh)' '$USER'"),
|
||||
+ (['bash', '-c', 'chsh -s $(which zsh) $USER'], "bash -c 'chsh -s $(which zsh) $USER'"),
|
||||
+
|
||||
+ # Quoting '\'
|
||||
+ (['echo', '\\'], "echo '\\'"),
|
||||
+ (['sed', '-i', 's/\\t/ /g', 'file.txt'], "sed -i 's/\\t/ /g' file.txt"),
|
||||
+
|
||||
+ # Quoting '"'
|
||||
+ (['echo', '"'], "echo '\"'"),
|
||||
+ (['grep', 'key="value"', 'file.txt'], "grep 'key=\"value\"' file.txt"),
|
||||
+
|
||||
+ # Quoting '`'
|
||||
+ (['usermod', '-aG', 'wheel', '`whoami`'], "usermod -aG wheel '`whoami`'"),
|
||||
+])
|
||||
+def test_remediation_command_repr_quoting(command, expected_command_form):
|
||||
+ """Test that RemediationCommand.__repr__ properly quotes arguments with special characters."""
|
||||
+ remediation_command = RemediationCommand(value=command)
|
||||
+ assert repr(remediation_command) == f'[command] {expected_command_form}'
|
||||
+
|
||||
+
|
||||
+@pytest.mark.parametrize("report_suffix", ('.json', '.txt'))
|
||||
+def test_remediation_command_in_report(report_suffix):
|
||||
+ """Test that commands with spaces in arguments are preserved correctly in reports."""
|
||||
+ remediation_command_as_list = ["mv", "file with spaces.txt", "file_without_spaces.txt"]
|
||||
+ remediation_command_as_string = "mv 'file with spaces.txt' file_without_spaces.txt"
|
||||
+
|
||||
+ report_entries = [Title('Test title'), Summary('Test summary'), Audience('sysadmin')]
|
||||
+ remediation = Remediation(commands=[remediation_command_as_list])
|
||||
+ report_entries.append(remediation)
|
||||
+
|
||||
+ report_message = _create_report_object(report_entries).report
|
||||
+
|
||||
+ with tempfile.NamedTemporaryFile(suffix=report_suffix) as reportfile:
|
||||
+ generate_report_file([report_message], 'leapp-run-id', reportfile.name)
|
||||
+ with open(reportfile.name) as f:
|
||||
+ content = f.read()
|
||||
+ if report_suffix == '.txt':
|
||||
+ assert remediation_command_as_string in content
|
||||
+ else:
|
||||
+ report_data = json.loads(content)
|
||||
+ remediations = report_data['entries'][0]['detail']['remediations']
|
||||
+ cmd_entry = [r for r in remediations if r['type'] == 'command'][0]
|
||||
+ assert cmd_entry['context'] == remediation_command_as_list
|
||||
+
|
||||
+
|
||||
@pytest.mark.parametrize("report_suffix", ('.json', '.txt'))
|
||||
def test_remediation_with_non_ascii_value(report_suffix):
|
||||
report_entries = [Title('Some report title'), Summary('Some summary not used for dynamical key generation'),
|
||||
--
|
||||
2.53.0
|
||||
|
||||
@ -1,171 +0,0 @@
|
||||
From ad50bb2bdcc8a4b734c82f9d190dfe8c1611903a Mon Sep 17 00:00:00 2001
|
||||
From: Peter Mocary <pmocary@redhat.com>
|
||||
Date: Wed, 25 Mar 2026 19:20:22 +0100
|
||||
Subject: [PATCH 08/10] fixup! reporting: fix incorrect converting of list
|
||||
based commands
|
||||
|
||||
---
|
||||
leapp/reporting/__init__.py | 34 ++++++++++++++++---
|
||||
tests/scripts/test_reporting.py | 60 ++++++++++++++++++++++++++++++---
|
||||
2 files changed, 86 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/leapp/reporting/__init__.py b/leapp/reporting/__init__.py
|
||||
index ca2b80b..6bd0b49 100644
|
||||
--- a/leapp/reporting/__init__.py
|
||||
+++ b/leapp/reporting/__init__.py
|
||||
@@ -4,9 +4,11 @@ import json
|
||||
import logging
|
||||
import os
|
||||
import shlex
|
||||
+
|
||||
import six
|
||||
|
||||
from leapp.compat import string_types
|
||||
+
|
||||
# NOTE(pstodulk): the format_list is imported to provide the function
|
||||
# also in this library. Its use is not planned here however.
|
||||
from leapp.libraries.stdlib import format_list
|
||||
@@ -273,6 +275,32 @@ def _guarantee_decoded_str(text, encoding='utf-8'):
|
||||
return text
|
||||
|
||||
|
||||
+def _quote_for_shell(s):
|
||||
+ """
|
||||
+ Quote a string for shell usage as a literal.
|
||||
+
|
||||
+ This function quotes the given string in single-quotes using the
|
||||
+ shlex.quote. However, when the single-quote is present in the string it
|
||||
+ instead uses double-quotes, resulting in cleaner output (e.g. "don't"
|
||||
+ instead of 'don'"'"'t' that would be produced by shlex.quote).
|
||||
+
|
||||
+ :param str s: String to quote for shell usage
|
||||
+ :return str: Quoted string safe for shell usage
|
||||
+ """
|
||||
+
|
||||
+ if "'" not in s:
|
||||
+ return shlex.quote(s)
|
||||
+
|
||||
+ # The string contains a single-quote, use double-quote style instead.
|
||||
+ # Escape following characters to make it literal: \ " $ ` !
|
||||
+ escaped = (s.replace('\\', '\\\\')
|
||||
+ .replace('"', '\\"')
|
||||
+ .replace('$', '\\$')
|
||||
+ .replace('`', '\\`')
|
||||
+ .replace('!', '\\!'))
|
||||
+ return '"{}"'.format(escaped)
|
||||
+
|
||||
+
|
||||
class RemediationCommand(BaseRemediation):
|
||||
def __init__(self, value=None):
|
||||
if not isinstance(value, list):
|
||||
@@ -282,10 +310,8 @@ class RemediationCommand(BaseRemediation):
|
||||
def __repr__(self):
|
||||
# NOTE(ivasilev) As the message can contain non-ascii characters let's deal with it properly.
|
||||
# As per python practices repr has to return an encoded string
|
||||
- # Note(pmocary) Using shlex.join is not possible here due to it being available from Python 3.8,
|
||||
- # thus we use the shlex.quote on each argument instead which is the same as shlex.join implementation.
|
||||
- return "[{}] {}".format(self._value['type'],
|
||||
- ' '.join([shlex.quote(_guarantee_encoded_str(c)) for c in self._value['context']]))
|
||||
+ quoted_command_args = [_quote_for_shell(_guarantee_encoded_str(c)) for c in self._value['context']]
|
||||
+ return "[{}] {}".format(self._value['type'], ' '.join(quoted_command_args))
|
||||
|
||||
|
||||
class RemediationHint(BaseRemediation):
|
||||
diff --git a/tests/scripts/test_reporting.py b/tests/scripts/test_reporting.py
|
||||
index 8c284cb..2a4e724 100644
|
||||
--- a/tests/scripts/test_reporting.py
|
||||
+++ b/tests/scripts/test_reporting.py
|
||||
@@ -1,20 +1,31 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
-from collections import namedtuple
|
||||
import datetime
|
||||
import json
|
||||
import os
|
||||
import tempfile
|
||||
+from collections import namedtuple
|
||||
|
||||
import jsonschema
|
||||
import pytest
|
||||
|
||||
from leapp.reporting import (
|
||||
- _add_to_dict,
|
||||
_DEPRECATION_SEVERITY_THRESHOLD,
|
||||
+ Audience,
|
||||
+ Flags,
|
||||
+ Groups,
|
||||
+ Key,
|
||||
+ RelatedResource,
|
||||
+ Remediation,
|
||||
+ RemediationCommand,
|
||||
+ Severity,
|
||||
+ Summary,
|
||||
+ Tags,
|
||||
+ Title,
|
||||
+ _add_to_dict,
|
||||
+ _create_report_object,
|
||||
+ _quote_for_shell,
|
||||
create_report_from_deprecation,
|
||||
create_report_from_error,
|
||||
- _create_report_object,
|
||||
- Audience, Flags, Groups, Key, RelatedResource, Remediation, RemediationCommand, Summary, Severity, Tags, Title
|
||||
)
|
||||
from leapp.utils.report import generate_report_file
|
||||
|
||||
@@ -102,6 +113,40 @@ def test_report_tags_and_flags():
|
||||
assert Flags(["This is a new flag", Groups.INHIBITOR]).value == ["This is a new flag", "inhibitor"]
|
||||
|
||||
|
||||
+@pytest.mark.parametrize('string, expected_quoted', [
|
||||
+ # No quoting needed
|
||||
+ ('path/to_the/file-name.txt', 'path/to_the/file-name.txt'),
|
||||
+ ('user@host', 'user@host'),
|
||||
+ ('value=123', 'value=123'),
|
||||
+ ('a:b:c', 'a:b:c'),
|
||||
+ ('99%', '99%'),
|
||||
+ ('a+b', 'a+b'),
|
||||
+
|
||||
+ # Single-quote style (no single quote in string)
|
||||
+ ('', "''"),
|
||||
+ ('file with spaces.txt', "'file with spaces.txt'"),
|
||||
+ ('$(whoami)', "'$(whoami)'"),
|
||||
+ ('$USER', "'$USER'"),
|
||||
+ ('back`tick', "'back`tick'"),
|
||||
+ ('double"quote', "'double\"quote'"),
|
||||
+ ('exclaim!', "'exclaim!'"),
|
||||
+ ('back\\slash', "'back\\slash'"),
|
||||
+ ('new\nline', "'new\nline'"),
|
||||
+ ('key="value"', "'key=\"value\"'"),
|
||||
+
|
||||
+ # Double-quote style (a single quote in string)
|
||||
+ ("It's fine", "\"It's fine\""),
|
||||
+ ("It's `whoami`", "\"It's \\`whoami\\`\""),
|
||||
+ ("User's home: $HOME", "\"User's home: \\$HOME\""),
|
||||
+ ("Don't panic!", "\"Don't panic\\!\""),
|
||||
+ ("s/'/\"/g", "\"s/'/\\\"/g\""),
|
||||
+ ("sed -i 's/'/\"/g' file.txt", "\"sed -i 's/'/\\\"/g' file.txt\""),
|
||||
+])
|
||||
+def test_quote_for_shell(string, expected_quoted):
|
||||
+ """Test that _quote_for_shell properly quotes strings for shell usage."""
|
||||
+ assert _quote_for_shell(string) == expected_quoted
|
||||
+
|
||||
+
|
||||
@pytest.mark.parametrize('command, expected_command_form', [
|
||||
(['cmd'], "cmd"),
|
||||
(['cmd', ''], "cmd ''"),
|
||||
@@ -128,6 +173,13 @@ def test_report_tags_and_flags():
|
||||
|
||||
# Quoting '`'
|
||||
(['usermod', '-aG', 'wheel', '`whoami`'], "usermod -aG wheel '`whoami`'"),
|
||||
+
|
||||
+ # Double-quote style when single quote is present
|
||||
+ (['echo', "It's fine"], "echo \"It's fine\""),
|
||||
+ (['mv', "user's file.txt", 'newfile.txt'], "mv \"user's file.txt\" newfile.txt"),
|
||||
+ (['sed', '-i', "s/'/\"/g", 'file.txt'], "sed -i \"s/'/\\\"/g\" file.txt"),
|
||||
+ (['bash', '-c', "echo \"user's home: $HOME\""], "bash -c \"echo \\\"user's home: \\$HOME\\\"\""),
|
||||
+ (['grep', "can't find", '/var/log/some report.log'], "grep \"can't find\" '/var/log/some report.log'"),
|
||||
])
|
||||
def test_remediation_command_repr_quoting(command, expected_command_form):
|
||||
"""Test that RemediationCommand.__repr__ properly quotes arguments with special characters."""
|
||||
--
|
||||
2.53.0
|
||||
|
||||
@ -1,37 +0,0 @@
|
||||
From bf931901cdc18275aed2023e5c37da0e246ae8a7 Mon Sep 17 00:00:00 2001
|
||||
From: Petr Stodulka <pstodulk@redhat.com>
|
||||
Date: Tue, 14 Apr 2026 14:21:39 +0200
|
||||
Subject: [PATCH 09/10] python test deps: update pytest requirements
|
||||
|
||||
Originally we required pytest v6.2.5 for any python. This is
|
||||
pretty old requirement coming from time of python ~ 3.8 and recently
|
||||
a CVE-2025-71176 occuared, which is fix in pytest v9.0.3.
|
||||
So let's update ranges to actually allow use of newer pytest on newer
|
||||
systems:
|
||||
|
||||
+----------------+---------------+
|
||||
| pytest version | python range |
|
||||
+----------------+---------------+
|
||||
| 6.2.5 | 3.7- |
|
||||
| 7.4.4 | 3.8.x - 3.9.x |
|
||||
| 9.0.3 | 3.10+ |
|
||||
+----------------+---------------+
|
||||
---
|
||||
requirements-tests.txt | 4 +++-
|
||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/requirements-tests.txt b/requirements-tests.txt
|
||||
index d4501f2..5859a2a 100644
|
||||
--- a/requirements-tests.txt
|
||||
+++ b/requirements-tests.txt
|
||||
@@ -7,4 +7,6 @@ jsonschema==3.2.0
|
||||
mock
|
||||
pylint
|
||||
pytest-cov
|
||||
-pytest==6.2.5
|
||||
+pytest==6.2.5; python_version < '3.8'
|
||||
+pytest==7.4.4; python_version >= '3.8' and python_version < '3.10'
|
||||
+pytest==9.0.3; python_version >= '3.10'
|
||||
--
|
||||
2.53.0
|
||||
|
||||
@ -1,173 +0,0 @@
|
||||
From eaf4af1a549b3cb675f49f03d46d9d5de362753f Mon Sep 17 00:00:00 2001
|
||||
From: Peter Mocary <pmocary@redhat.com>
|
||||
Date: Fri, 10 Apr 2026 21:51:42 +0200
|
||||
Subject: [PATCH 10/10] fix(reporting): use single quoting when converting
|
||||
remediation commands
|
||||
|
||||
The remediation commands are provided as a list of arguments that is
|
||||
used in leapp-report.json. The same command is also converted to a
|
||||
string that is used in leapp-report.txt and can be copy-pasted by the
|
||||
user into shell.
|
||||
|
||||
Originally, the command conversion tried to make the resulting commands
|
||||
prettier by enabling double quoting whenever there was a single quote in
|
||||
an argument, while still trying to make the double quoted argument a
|
||||
literal. This proved to be problematic approach due to multiple cases
|
||||
that resulted with incorrect commands. Namely, when the command called
|
||||
`bash -c` with a subcommand that would be evaluated by another
|
||||
non-interactive shell, or when there was an exclamation mark that would
|
||||
have different meaning in non-interactive and interactive shell and its
|
||||
escaping was not possible unless single-quotes are used.
|
||||
|
||||
This patch makes the command conversion produce pretty commands in the
|
||||
most cases, moreover, it makes sure the command is always correct (if
|
||||
the list version is correct to begin with). This approach leaves
|
||||
possibility to encounter unintuitive escaping in the resulting converted
|
||||
command, although this can be prevented by carefully crafting the
|
||||
command when creating the report.
|
||||
|
||||
Note that if there is a subcommand called in the converted command, the
|
||||
report creator is responsible for its form and for the best resulting
|
||||
command it should favor the double quoting of its arguments when
|
||||
possible.
|
||||
---
|
||||
leapp/reporting/__init__.py | 28 +------------------
|
||||
packaging/leapp.spec | 2 +-
|
||||
tests/scripts/test_reporting.py | 48 +++++----------------------------
|
||||
3 files changed, 9 insertions(+), 69 deletions(-)
|
||||
|
||||
diff --git a/leapp/reporting/__init__.py b/leapp/reporting/__init__.py
|
||||
index 6bd0b49..43aa17d 100644
|
||||
--- a/leapp/reporting/__init__.py
|
||||
+++ b/leapp/reporting/__init__.py
|
||||
@@ -275,32 +275,6 @@ def _guarantee_decoded_str(text, encoding='utf-8'):
|
||||
return text
|
||||
|
||||
|
||||
-def _quote_for_shell(s):
|
||||
- """
|
||||
- Quote a string for shell usage as a literal.
|
||||
-
|
||||
- This function quotes the given string in single-quotes using the
|
||||
- shlex.quote. However, when the single-quote is present in the string it
|
||||
- instead uses double-quotes, resulting in cleaner output (e.g. "don't"
|
||||
- instead of 'don'"'"'t' that would be produced by shlex.quote).
|
||||
-
|
||||
- :param str s: String to quote for shell usage
|
||||
- :return str: Quoted string safe for shell usage
|
||||
- """
|
||||
-
|
||||
- if "'" not in s:
|
||||
- return shlex.quote(s)
|
||||
-
|
||||
- # The string contains a single-quote, use double-quote style instead.
|
||||
- # Escape following characters to make it literal: \ " $ ` !
|
||||
- escaped = (s.replace('\\', '\\\\')
|
||||
- .replace('"', '\\"')
|
||||
- .replace('$', '\\$')
|
||||
- .replace('`', '\\`')
|
||||
- .replace('!', '\\!'))
|
||||
- return '"{}"'.format(escaped)
|
||||
-
|
||||
-
|
||||
class RemediationCommand(BaseRemediation):
|
||||
def __init__(self, value=None):
|
||||
if not isinstance(value, list):
|
||||
@@ -310,7 +284,7 @@ class RemediationCommand(BaseRemediation):
|
||||
def __repr__(self):
|
||||
# NOTE(ivasilev) As the message can contain non-ascii characters let's deal with it properly.
|
||||
# As per python practices repr has to return an encoded string
|
||||
- quoted_command_args = [_quote_for_shell(_guarantee_encoded_str(c)) for c in self._value['context']]
|
||||
+ quoted_command_args = [shlex.quote(_guarantee_encoded_str(c)) for c in self._value['context']]
|
||||
return "[{}] {}".format(self._value['type'], ' '.join(quoted_command_args))
|
||||
|
||||
|
||||
diff --git a/packaging/leapp.spec b/packaging/leapp.spec
|
||||
index ba906cf..0fde883 100644
|
||||
--- a/packaging/leapp.spec
|
||||
+++ b/packaging/leapp.spec
|
||||
@@ -13,7 +13,7 @@
|
||||
# This is kind of help for more flexible development of leapp repository,
|
||||
# so people do not have to wait for new official release of leapp to ensure
|
||||
# it is installed/used the compatible one.
|
||||
-%global framework_version 6.4
|
||||
+%global framework_version 6.5
|
||||
|
||||
# IMPORTANT: everytime the requirements are changed, increment number by one
|
||||
# - same for Provides in deps subpackage
|
||||
diff --git a/tests/scripts/test_reporting.py b/tests/scripts/test_reporting.py
|
||||
index 2a4e724..2010d29 100644
|
||||
--- a/tests/scripts/test_reporting.py
|
||||
+++ b/tests/scripts/test_reporting.py
|
||||
@@ -23,7 +23,6 @@ from leapp.reporting import (
|
||||
Title,
|
||||
_add_to_dict,
|
||||
_create_report_object,
|
||||
- _quote_for_shell,
|
||||
create_report_from_deprecation,
|
||||
create_report_from_error,
|
||||
)
|
||||
@@ -113,40 +112,6 @@ def test_report_tags_and_flags():
|
||||
assert Flags(["This is a new flag", Groups.INHIBITOR]).value == ["This is a new flag", "inhibitor"]
|
||||
|
||||
|
||||
-@pytest.mark.parametrize('string, expected_quoted', [
|
||||
- # No quoting needed
|
||||
- ('path/to_the/file-name.txt', 'path/to_the/file-name.txt'),
|
||||
- ('user@host', 'user@host'),
|
||||
- ('value=123', 'value=123'),
|
||||
- ('a:b:c', 'a:b:c'),
|
||||
- ('99%', '99%'),
|
||||
- ('a+b', 'a+b'),
|
||||
-
|
||||
- # Single-quote style (no single quote in string)
|
||||
- ('', "''"),
|
||||
- ('file with spaces.txt', "'file with spaces.txt'"),
|
||||
- ('$(whoami)', "'$(whoami)'"),
|
||||
- ('$USER', "'$USER'"),
|
||||
- ('back`tick', "'back`tick'"),
|
||||
- ('double"quote', "'double\"quote'"),
|
||||
- ('exclaim!', "'exclaim!'"),
|
||||
- ('back\\slash', "'back\\slash'"),
|
||||
- ('new\nline', "'new\nline'"),
|
||||
- ('key="value"', "'key=\"value\"'"),
|
||||
-
|
||||
- # Double-quote style (a single quote in string)
|
||||
- ("It's fine", "\"It's fine\""),
|
||||
- ("It's `whoami`", "\"It's \\`whoami\\`\""),
|
||||
- ("User's home: $HOME", "\"User's home: \\$HOME\""),
|
||||
- ("Don't panic!", "\"Don't panic\\!\""),
|
||||
- ("s/'/\"/g", "\"s/'/\\\"/g\""),
|
||||
- ("sed -i 's/'/\"/g' file.txt", "\"sed -i 's/'/\\\"/g' file.txt\""),
|
||||
-])
|
||||
-def test_quote_for_shell(string, expected_quoted):
|
||||
- """Test that _quote_for_shell properly quotes strings for shell usage."""
|
||||
- assert _quote_for_shell(string) == expected_quoted
|
||||
-
|
||||
-
|
||||
@pytest.mark.parametrize('command, expected_command_form', [
|
||||
(['cmd'], "cmd"),
|
||||
(['cmd', ''], "cmd ''"),
|
||||
@@ -174,12 +139,13 @@ def test_quote_for_shell(string, expected_quoted):
|
||||
# Quoting '`'
|
||||
(['usermod', '-aG', 'wheel', '`whoami`'], "usermod -aG wheel '`whoami`'"),
|
||||
|
||||
- # Double-quote style when single quote is present
|
||||
- (['echo', "It's fine"], "echo \"It's fine\""),
|
||||
- (['mv', "user's file.txt", 'newfile.txt'], "mv \"user's file.txt\" newfile.txt"),
|
||||
- (['sed', '-i', "s/'/\"/g", 'file.txt'], "sed -i \"s/'/\\\"/g\" file.txt"),
|
||||
- (['bash', '-c', "echo \"user's home: $HOME\""], "bash -c \"echo \\\"user's home: \\$HOME\\\"\""),
|
||||
- (['grep', "can't find", '/var/log/some report.log'], "grep \"can't find\" '/var/log/some report.log'"),
|
||||
+ # Single quote in argument — shlex.quote uses the '"'"' pattern
|
||||
+ (['echo', "It's fine"], "echo 'It'\"'\"'s fine'"),
|
||||
+ (['mv', "user's file.txt", 'newfile.txt'], "mv 'user'\"'\"'s file.txt' newfile.txt"),
|
||||
+ (['sed', '-i', "s/'/\"/g", 'file.txt'], "sed -i 's/'\"'\"'/\"/g' file.txt"),
|
||||
+ (['bash', '-c', "echo \"user's home: $HOME\""], "bash -c 'echo \"user'\"'\"'s home: $HOME\"'"),
|
||||
+ (['grep', "can't find", '/var/log/some report.log'], "grep 'can'\"'\"'t find' '/var/log/some report.log'"),
|
||||
+ (['echo', "Don't panic!"], "echo 'Don'\"'\"'t panic!'"),
|
||||
])
|
||||
def test_remediation_command_repr_quoting(command, expected_command_form):
|
||||
"""Test that RemediationCommand.__repr__ properly quotes arguments with special characters."""
|
||||
--
|
||||
2.53.0
|
||||
|
||||
@ -1,228 +0,0 @@
|
||||
From 66883ef34b1e241838b9812a8920bf6f6fb380e0 Mon Sep 17 00:00:00 2001
|
||||
From: Matej Matuska <mmatuska@redhat.com>
|
||||
Date: Wed, 20 May 2026 12:32:48 +0200
|
||||
Subject: [PATCH] Fix exception in normalize_schemas for conflicting actor
|
||||
config schemas
|
||||
|
||||
The normalize_schemas function incorrectly raises an exception when a
|
||||
config schema (subclass of Config) is contained more than once in it's
|
||||
input, regardless of whether it's a conflicting (same section and name,
|
||||
but a difference in other members) or the same (same section and name).
|
||||
Traceback:
|
||||
|
||||
Traceback (most recent call last):
|
||||
File "/usr/bin/leapp", line 33, in <module>
|
||||
sys.exit(load_entry_point('leapp==0.21.0', 'console_scripts', 'leapp')())
|
||||
File "/usr/lib/python3.9/site-packages/leapp/cli/__init__.py", line 51, in main
|
||||
cli.command.execute('leapp version {}'.format(VERSION))
|
||||
File "/usr/lib/python3.9/site-packages/leapp/utils/clicmd.py", line 111, in execute
|
||||
args.func(args)
|
||||
File "/usr/lib/python3.9/site-packages/leapp/utils/clicmd.py", line 133, in called
|
||||
self.target(args)
|
||||
File "/usr/lib/python3.9/site-packages/leapp/cli/commands/upgrade/breadcrumbs.py", line 169, in wrapper
|
||||
return f(*args, breadcrumbs=breadcrumbs, **kwargs)
|
||||
File "/usr/lib/python3.9/site-packages/leapp/cli/commands/preupgrade/__init__.py", line 86, in preupgrade
|
||||
command_utils.load_actor_configs_and_store_it_in_db(context, repositories, cfg)
|
||||
File "/usr/lib/python3.9/site-packages/leapp/cli/commands/command_utils.py", line 291, in load_actor_configs_and_store_it_in_db
|
||||
actor_config_schemas = actor_config.normalize_schemas(actor_config_schemas)
|
||||
File "/usr/lib/python3.9/site-packages/leapp/actors/config.py", line 180, in normalize_schemas
|
||||
if unique_name in added_fields and added_fields[unique_name] != field:
|
||||
TypeError: 'set' object is not subscriptable
|
||||
|
||||
The added_fields variable is a set. The condition for checking conflicts
|
||||
attempts to do indexing on the set, which is not possible in Python sets
|
||||
and results in a TypeError.
|
||||
|
||||
This patch removes the set altogether since it doesn't bring any
|
||||
advantage over just using the normalized_schemas dict.
|
||||
|
||||
Also add unit tests for the function.
|
||||
---
|
||||
leapp/actors/config.py | 44 ++++++-----
|
||||
tests/scripts/test_actor_config.py | 114 +++++++++++++++++++++++++++++
|
||||
2 files changed, 138 insertions(+), 20 deletions(-)
|
||||
create mode 100644 tests/scripts/test_actor_config.py
|
||||
|
||||
diff --git a/leapp/actors/config.py b/leapp/actors/config.py
|
||||
index 55775d5..d952bb6 100644
|
||||
--- a/leapp/actors/config.py
|
||||
+++ b/leapp/actors/config.py
|
||||
@@ -169,31 +169,35 @@ def _get_config(config_dir='/etc/leapp/actor_conf.d'):
|
||||
def normalize_schemas(schemas):
|
||||
"""
|
||||
Merge all schemas into a single dictionary and validate them for errors we can detect.
|
||||
+
|
||||
+ :param schemas: List of schemas to normalize
|
||||
+ :type schemas: Iterable[Iterable[Type[Config]]]
|
||||
+ :return A dictionary with structure: section -> name -> Config
|
||||
+ :rtype: DefaultDict[str, Dict[str, Type[Config]]]
|
||||
"""
|
||||
- added_fields = set()
|
||||
normalized_schema = defaultdict(dict)
|
||||
for schema in schemas:
|
||||
for field in schema:
|
||||
- unique_name = (field.section, field.name)
|
||||
-
|
||||
+ # section and name are the unique key for a config
|
||||
+ existing_field = normalized_schema[field.section].get(field.name, None)
|
||||
# Error if the field has been added by another schema
|
||||
- if unique_name in added_fields and added_fields[unique_name] != field:
|
||||
- # TODO: Also include information on what Actor contains the
|
||||
- # conflicting fields but that information isn't passed into
|
||||
- # this function right now.
|
||||
- message = ('Two actors added incompatible configuration items'
|
||||
- ' with the same name for Section: {section},'
|
||||
- ' Field: {field}'.format(section=field.section,
|
||||
- field=field.name))
|
||||
- log.error(message)
|
||||
- raise SchemaError(message)
|
||||
-
|
||||
- # TODO: More validation here.
|
||||
-
|
||||
- # Store the fields from the schema in a way that we can easily look
|
||||
- # up while validating
|
||||
- added_fields.add(unique_name)
|
||||
- normalized_schema[field.section][field.name] = field
|
||||
+ if existing_field:
|
||||
+ if existing_field != field:
|
||||
+ # TODO: Also include information on what Actor contains the
|
||||
+ # conflicting fields but that information isn't passed into
|
||||
+ # this function right now.
|
||||
+ message = (
|
||||
+ 'Two actors added incompatible configuration items with'
|
||||
+ ' the same name for Section: {section}, Field: {field}'
|
||||
+ ).format(section=field.section, field=field.name)
|
||||
+
|
||||
+ log.error(message)
|
||||
+ raise SchemaError(message)
|
||||
+
|
||||
+ # TODO: More validation here.
|
||||
+
|
||||
+ else:
|
||||
+ normalized_schema[field.section][field.name] = field
|
||||
|
||||
return normalized_schema
|
||||
|
||||
diff --git a/tests/scripts/test_actor_config.py b/tests/scripts/test_actor_config.py
|
||||
new file mode 100644
|
||||
index 0000000..b8c02cd
|
||||
--- /dev/null
|
||||
+++ b/tests/scripts/test_actor_config.py
|
||||
@@ -0,0 +1,114 @@
|
||||
+from collections import defaultdict
|
||||
+import pytest
|
||||
+
|
||||
+from leapp.actors.config import Config, SchemaError, normalize_schemas
|
||||
+from leapp.models import fields
|
||||
+
|
||||
+
|
||||
+class _TestConfigA(Config):
|
||||
+ section = "test"
|
||||
+ name = "a_setting"
|
||||
+ type_ = fields.String()
|
||||
+ description = 'Description here'
|
||||
+ default = "default value"
|
||||
+
|
||||
+
|
||||
+class _TestConfigB(Config):
|
||||
+ section = "other_section"
|
||||
+ name = "other_setting"
|
||||
+ type_ = fields.String()
|
||||
+ description = 'Description here'
|
||||
+ default = "some default value"
|
||||
+
|
||||
+
|
||||
+# conflicts in default
|
||||
+class _TestConfigConflictsInDefault(Config):
|
||||
+ section = "test"
|
||||
+ name = "a_setting"
|
||||
+ type_ = fields.String()
|
||||
+ description = 'Description here'
|
||||
+ default = "different than in A"
|
||||
+
|
||||
+
|
||||
+# conflicts in type_
|
||||
+class _TestConfigConflictsInType(Config):
|
||||
+ section = "test"
|
||||
+ name = "a_setting"
|
||||
+ type_ = fields.Integer()
|
||||
+ description = 'Description here'
|
||||
+ default = "default value"
|
||||
+
|
||||
+
|
||||
+@pytest.mark.parametrize(
|
||||
+ "schemas",
|
||||
+ [
|
||||
+ # test configs from single actors are merged
|
||||
+ [(_TestConfigA, _TestConfigB)],
|
||||
+ # test configs from multiple actors are merged
|
||||
+ [(_TestConfigA,), (_TestConfigB,)],
|
||||
+ # test "deduplication"
|
||||
+ [(_TestConfigA, _TestConfigA, _TestConfigB)],
|
||||
+ [(_TestConfigA,), (_TestConfigA, _TestConfigB,)]
|
||||
+ ],
|
||||
+)
|
||||
+def test_normalize_schemas_ok(schemas):
|
||||
+ """
|
||||
+ Test that valid schemas are detected and if required deduplicated
|
||||
+ """
|
||||
+ expect = defaultdict(dict)
|
||||
+ expect["test"] = {"a_setting": _TestConfigA}
|
||||
+ expect["other_section"] = {"other_setting": _TestConfigB}
|
||||
+ ret = normalize_schemas(schemas)
|
||||
+ assert ret == expect
|
||||
+
|
||||
+
|
||||
+def test_normalize_schemas_identical():
|
||||
+ """
|
||||
+ Test that identical Config class objects are deduplicated
|
||||
+ """
|
||||
+ expect = defaultdict(dict)
|
||||
+ expect["test"] = {"a_setting": _TestConfigA}
|
||||
+
|
||||
+ config = _TestConfigA
|
||||
+
|
||||
+ schemas = [(config, config)]
|
||||
+ ret = normalize_schemas(schemas)
|
||||
+ assert ret == expect
|
||||
+
|
||||
+ schemas = [(config,), (config,)]
|
||||
+ ret = normalize_schemas(schemas)
|
||||
+ assert ret == expect
|
||||
+
|
||||
+
|
||||
+@pytest.mark.parametrize(
|
||||
+ "schemas",
|
||||
+ [
|
||||
+ [(_TestConfigA, _TestConfigConflictsInDefault)],
|
||||
+ [(_TestConfigA, _TestConfigConflictsInType)],
|
||||
+ ]
|
||||
+)
|
||||
+def test_normalize_schemas_intra_conflict(schemas):
|
||||
+ """
|
||||
+ Test that conflicts within a single Actor config schema are detected
|
||||
+ """
|
||||
+ with pytest.raises(SchemaError):
|
||||
+ normalize_schemas(schemas)
|
||||
+
|
||||
+
|
||||
+@pytest.mark.parametrize(
|
||||
+ "schemas",
|
||||
+ [
|
||||
+ [(_TestConfigA,), (_TestConfigConflictsInDefault,)],
|
||||
+ [(_TestConfigA,), (_TestConfigConflictsInType,)],
|
||||
+ ]
|
||||
+)
|
||||
+def test_normalize_schemas_inter_conflict(schemas):
|
||||
+ """
|
||||
+ Test that conflicts between multiple Actor config schemas are detected
|
||||
+ """
|
||||
+ with pytest.raises(SchemaError):
|
||||
+ normalize_schemas(schemas)
|
||||
+
|
||||
+
|
||||
+def test_normalize_schemas_empty():
|
||||
+ assert normalize_schemas([]) == defaultdict(dict)
|
||||
--
|
||||
2.54.0
|
||||
|
||||
@ -1,28 +0,0 @@
|
||||
From 0a5b9b7bb44fbe71c97b10673be71e343abcf58c Mon Sep 17 00:00:00 2001
|
||||
From: Matej Matuska <mmatuska@redhat.com>
|
||||
Date: Wed, 20 May 2026 12:45:21 +0200
|
||||
Subject: [PATCH] Makefile: add test_no_lint
|
||||
|
||||
The test rules always lints, add a variant which just tests.
|
||||
---
|
||||
Makefile | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/Makefile b/Makefile
|
||||
index a68b8fe..dd2d8b9 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -202,6 +202,10 @@ test: lint
|
||||
@ $(ENTER_VENV) \
|
||||
pytest -vv --cov-report term-missing --cov=leapp tests/scripts
|
||||
|
||||
+test_no_lint:
|
||||
+ @ $(ENTER_VENV) \
|
||||
+ pytest -vv --cov-report term-missing --cov=leapp tests/scripts
|
||||
+
|
||||
# TODO(pstodulk): create ticket to add rhel10 for testing.... py: 3.12
|
||||
test_container:
|
||||
@case $(_TEST_CONTAINER) in \
|
||||
--
|
||||
2.54.0
|
||||
|
||||
@ -0,0 +1,872 @@
|
||||
From bc7fce7288ed8f642be561947aa9d7c7f3047097 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michal=20He=C4=8Dko?= <michal.sk.com@gmail.com>
|
||||
Date: Mon, 3 Mar 2025 12:32:42 +0100
|
||||
Subject: [PATCH 1/7] CI:packit: update e2e tests to reflect current IPU paths
|
||||
|
||||
The current source version used in e2e tests is 8.6 and the target version is 9.0, which are unsupported. This patch bumps the source/target versions used in the CI to source=8.10 and target=9.4. There is also a job with target=9.6, which is expected to be failing until 9.6 is released.
|
||||
|
||||
Also rhel 7 & python2 is not supported anymore. Dropping these obsoleted tests.
|
||||
---
|
||||
.github/workflows/tmt-tests.yml | 27 +-
|
||||
.packit.yaml | 649 ++++----------------------------
|
||||
2 files changed, 94 insertions(+), 582 deletions(-)
|
||||
|
||||
diff --git a/.github/workflows/tmt-tests.yml b/.github/workflows/tmt-tests.yml
|
||||
index d994f31..d047cb3 100644
|
||||
--- a/.github/workflows/tmt-tests.yml
|
||||
+++ b/.github/workflows/tmt-tests.yml
|
||||
@@ -69,62 +69,61 @@ jobs:
|
||||
&& ! startsWith(github.event.comment.body, '/rerun-sst')
|
||||
&& contains(fromJson('["OWNER", "MEMBER", "COLLABORATOR"]'), github.event.comment.author_association)
|
||||
|
||||
- call_workflow_tests_86to90_integration:
|
||||
+ call_workflow_tests_810to94_integration:
|
||||
needs: call_workflow_copr_build
|
||||
uses: ./.github/workflows/reuse-tests-8to9.yml
|
||||
secrets: inherit
|
||||
with:
|
||||
copr_artifacts: ${{ needs.call_workflow_copr_build.outputs.artifacts }}
|
||||
tmt_plan_regex: "^(?!.*upgrade_plugin)(?!.*tier[2-3].*)(?!.*rhsm)(?!.*c2r)(?!.*sap)(?!.*7to8)(?!.*max_sst)"
|
||||
- variables: 'SOURCE_RELEASE=8.6;TARGET_RELEASE=9.0;RHSM_REPOS=rhel-8-for-x86_64-appstream-eus-rpms,rhel-8-for-x86_64-baseos-eus-rpms;LEAPPDATA_BRANCH=upstream'
|
||||
- pull_request_status_name: "8.6to9.0"
|
||||
+ variables: 'SOURCE_RELEASE=8.10;TARGET_RELEASE=9.4;RHSM_REPOS=rhel-8-for-x86_64-appstream-eus-rpms,rhel-8-for-x86_64-baseos-eus-rpms;LEAPPDATA_BRANCH=upstream'
|
||||
+ pull_request_status_name: "8.10to9.4"
|
||||
if: |
|
||||
github.event.issue.pull_request
|
||||
&& ! startsWith(github.event.comment.body, '/rerun-sst')
|
||||
&& contains(fromJson('["OWNER", "MEMBER", "COLLABORATOR"]'), github.event.comment.author_association)
|
||||
|
||||
- call_workflow_tests_88to92_integration:
|
||||
+ call_workflow_tests_810to96_integration:
|
||||
needs: call_workflow_copr_build
|
||||
uses: ./.github/workflows/reuse-tests-8to9.yml
|
||||
secrets: inherit
|
||||
with:
|
||||
copr_artifacts: ${{ needs.call_workflow_copr_build.outputs.artifacts }}
|
||||
tmt_plan_regex: "^(?!.*upgrade_plugin)(?!.*tier[2-3].*)(?!.*rhsm)(?!.*c2r)(?!.*sap)(?!.*7to8)(?!.*max_sst)"
|
||||
- variables: 'SOURCE_RELEASE=8.8;TARGET_RELEASE=9.2;LEAPP_DEVEL_TARGET_RELEASE=9.2;RHSM_REPOS=rhel-8-for-x86_64-appstream-beta-rpms,rhel-8-for-x86_64-baseos-beta-rpms;LEAPPDATA_BRANCH=upstream'
|
||||
- compose: "RHEL-8.8.0-Nightly"
|
||||
- pull_request_status_name: "8.8to9.2"
|
||||
- tmt_context: "distro=rhel-8.8"
|
||||
+ variables: 'SOURCE_RELEASE=8.10;TARGET_RELEASE=9.6;LEAPP_DEVEL_TARGET_RELEASE=9.6;RHSM_REPOS=rhel-8-for-x86_64-appstream-beta-rpms,rhel-8-for-x86_64-baseos-beta-rpms;LEAPPDATA_BRANCH=upstream'
|
||||
+ pull_request_status_name: "8.8to9.6"
|
||||
+ tmt_context: "distro=rhel-8.10"
|
||||
if: |
|
||||
github.event.issue.pull_request
|
||||
&& ! startsWith(github.event.comment.body, '/rerun-sst')
|
||||
&& contains(fromJson('["OWNER", "MEMBER", "COLLABORATOR"]'), github.event.comment.author_association)
|
||||
|
||||
- call_workflow_tests_86to90_sst:
|
||||
+ call_workflow_tests_810to94_sst:
|
||||
needs: call_workflow_copr_build
|
||||
uses: ./.github/workflows/reuse-tests-8to9.yml
|
||||
secrets: inherit
|
||||
with:
|
||||
copr_artifacts: ${{ needs.call_workflow_copr_build.outputs.artifacts }}
|
||||
tmt_plan_regex: "^(?!.*tier[2-3].*)(.*max_sst.*)"
|
||||
- variables: 'SOURCE_RELEASE=8.6;TARGET_RELEASE=9.0;RHSM_REPOS=rhel-8-for-x86_64-appstream-eus-rpms,rhel-8-for-x86_64-baseos-eus-rpms;LEAPPDATA_BRANCH=upstream'
|
||||
- pull_request_status_name: "8.6to9.0-sst"
|
||||
+ variables: 'SOURCE_RELEASE=8.10;TARGET_RELEASE=9.4;RHSM_REPOS=rhel-8-for-x86_64-appstream-eus-rpms,rhel-8-for-x86_64-baseos-eus-rpms;LEAPPDATA_BRANCH=upstream'
|
||||
+ pull_request_status_name: "8.10to9.4-sst"
|
||||
update_pull_request_status: 'false'
|
||||
if: |
|
||||
github.event.issue.pull_request
|
||||
&& startsWith(github.event.comment.body, '/rerun-sst')
|
||||
&& contains(fromJson('["OWNER", "MEMBER", "COLLABORATOR"]'), github.event.comment.author_association)
|
||||
|
||||
- call_workflow_tests_86to90_aws:
|
||||
+ call_workflow_tests_810to94_aws:
|
||||
needs: call_workflow_copr_build
|
||||
uses: ./.github/workflows/reuse-tests-8to9.yml
|
||||
secrets: inherit
|
||||
with:
|
||||
copr_artifacts: ${{ needs.call_workflow_copr_build.outputs.artifacts }}
|
||||
tmt_plan_regex: "^(?!.*upgrade_plugin)(?!.*tier[2-3].*)(?!.*rhsm)(?!.*c2r)(?!.*sap)(?!.*7to8)(.*e2e)"
|
||||
- compose: "RHEL-8.6-rhui"
|
||||
+ compose: "RHEL-8.10-rhui"
|
||||
environment_settings: '{"provisioning": {"post_install_script": "#!/bin/sh\nsudo sed -i s/.*ssh-rsa/ssh-rsa/ /root/.ssh/authorized_keys"}}'
|
||||
pull_request_status_name: "8to9-aws-e2e"
|
||||
- variables: 'SOURCE_RELEASE=8.6;TARGET_RELEASE=9.0;RHSM_REPOS=rhel-8-for-x86_64-appstream-eus-rpms,rhel-8-for-x86_64-baseos-eus-rpms;RHUI=aws;LEAPPDATA_BRANCH=upstream'
|
||||
+ variables: 'SOURCE_RELEASE=8.10;TARGET_RELEASE=9.4;RHSM_REPOS=rhel-8-for-x86_64-appstream-eus-rpms,rhel-8-for-x86_64-baseos-eus-rpms;RHUI=aws;LEAPPDATA_BRANCH=upstream'
|
||||
if: |
|
||||
github.event.issue.pull_request
|
||||
&& ! startsWith(github.event.comment.body, '/rerun-sst')
|
||||
diff --git a/.packit.yaml b/.packit.yaml
|
||||
index 36a6e16..6f41db1 100644
|
||||
--- a/.packit.yaml
|
||||
+++ b/.packit.yaml
|
||||
@@ -12,7 +12,6 @@ jobs:
|
||||
owner: "@oamg"
|
||||
project: leapp
|
||||
targets:
|
||||
- - epel-7-x86_64
|
||||
- epel-8-x86_64
|
||||
- epel-9-x86_64
|
||||
- fedora-all-aarch64
|
||||
@@ -31,7 +30,6 @@ jobs:
|
||||
owner: "@oamg"
|
||||
project: leapp
|
||||
targets:
|
||||
- - epel-7-x86_64
|
||||
- epel-8-x86_64
|
||||
- epel-9-x86_64
|
||||
- fedora-all-aarch64
|
||||
@@ -51,341 +49,64 @@ jobs:
|
||||
# >7tox path https://gitlab.cee.redhat.com/oamg/leapp-tests/-/blob/main/config.yaml
|
||||
# Available only to RH Employees.
|
||||
|
||||
+
|
||||
# ###################################################################### #
|
||||
-# ############################### 7 TO 8 ############################### #
|
||||
+# ############################## 8 TO 9 ################################ #
|
||||
# ###################################################################### #
|
||||
|
||||
# ###################################################################### #
|
||||
# ### Abstract job definitions to make individual tests/jobs smaller ### #
|
||||
# ###################################################################### #
|
||||
-- &sanity-abstract-7to8
|
||||
+
|
||||
+#NOTE(pstodulk) putting default values in abstract jobs as from 8.10, as this
|
||||
+# is the last RHEL 8 release and all new future tests will start from this
|
||||
+# one release.
|
||||
+
|
||||
+# This job is never triggered - we define abstract anchor that are reused in jobs that 'inherit'
|
||||
+# and have actionable triggers
|
||||
+- &sanity-abstract-8to9
|
||||
job: tests
|
||||
trigger: ignore
|
||||
fmf_url: "https://gitlab.cee.redhat.com/oamg/leapp-tests"
|
||||
- fmf_ref: "rhel7"
|
||||
+ fmf_ref: "main"
|
||||
use_internal_tf: True
|
||||
labels:
|
||||
- sanity
|
||||
targets:
|
||||
- epel-7-x86_64:
|
||||
- distros: [RHEL-7.9-ZStream]
|
||||
- identifier: sanity-abstract-7to8
|
||||
- tmt_plan: ""
|
||||
-
|
||||
-- &sanity-abstract-7to8-aws
|
||||
- <<: *sanity-abstract-7to8
|
||||
- labels:
|
||||
- - sanity
|
||||
- - aws
|
||||
- targets:
|
||||
- epel-7-x86_64:
|
||||
- distros: [RHEL-7.9-rhui]
|
||||
- identifier: sanity-abstract-7to8-aws
|
||||
-
|
||||
-# On-demand minimal beaker tests
|
||||
-- &beaker-minimal-7to8-abstract-ondemand
|
||||
- <<: *sanity-abstract-7to8
|
||||
- manual_trigger: True
|
||||
- labels:
|
||||
- - beaker-minimal
|
||||
- identifier: beaker-minimal-7to8-abstract-ondemand
|
||||
-
|
||||
-# On-demand kernel-rt tests
|
||||
-- &kernel-rt-abstract-7to8-ondemand
|
||||
- <<: *beaker-minimal-7to8-abstract-ondemand
|
||||
- labels:
|
||||
- - kernel-rt
|
||||
- identifier: sanity-7to8-kernel-rt-abstract-ondemand
|
||||
-
|
||||
-# ###################################################################### #
|
||||
-# ######################### Individual tests ########################### #
|
||||
-# ###################################################################### #
|
||||
-
|
||||
-# Tests: 7.9 -> 8.8
|
||||
-- &sanity-79to88-aws
|
||||
- <<: *sanity-abstract-7to8-aws
|
||||
- trigger: pull_request
|
||||
- identifier: sanity-7.9to8.8-aws
|
||||
- tf_extra_params:
|
||||
- test:
|
||||
- tmt:
|
||||
- plan_filter: 'tag:7to8 & tag:upgrade_happy_path & enabled:true'
|
||||
- environments:
|
||||
- - artifacts:
|
||||
- - type: "repository"
|
||||
- id: "https://download.copr.fedorainfracloud.org/results/@oamg/leapp/epel-7-x86_64/"
|
||||
- packages:
|
||||
- - leapp-repository
|
||||
- - python2-leapp
|
||||
- - leapp-upgrade-el7toel8-deps
|
||||
- order: 40
|
||||
- - tmt:
|
||||
- context:
|
||||
- distro: "rhel-7.9"
|
||||
- distro_target: "rhel-8.8"
|
||||
- settings:
|
||||
- provisioning:
|
||||
- post_install_script: "#!/bin/sh\nsudo sed -i s/.*ssh-rsa/ssh-rsa/ /root/.ssh/authorized_keys"
|
||||
- tags:
|
||||
- BusinessUnit: sst_upgrades@leapp_upstream_test
|
||||
- env:
|
||||
- SOURCE_RELEASE: "7.9"
|
||||
- TARGET_RELEASE: "8.8"
|
||||
- RHUI: "aws"
|
||||
- LEAPPDATA_BRANCH: "upstream"
|
||||
- LEAPP_NO_RHSM: "1"
|
||||
- USE_CUSTOM_REPOS: rhui
|
||||
-
|
||||
-- &sanity-79to88
|
||||
- <<: *sanity-abstract-7to8
|
||||
- trigger: pull_request
|
||||
- identifier: sanity-7.9to8.8
|
||||
- tf_extra_params:
|
||||
- test:
|
||||
- tmt:
|
||||
- plan_filter: 'tag:7to8 & tag:sanity & enabled:true'
|
||||
- environments:
|
||||
- - artifacts:
|
||||
- - type: "repository"
|
||||
- id: "https://download.copr.fedorainfracloud.org/results/@oamg/leapp/epel-7-x86_64/"
|
||||
- packages:
|
||||
- - leapp-repository
|
||||
- - python2-leapp
|
||||
- - leapp-upgrade-el7toel8-deps
|
||||
- order: 40
|
||||
- - tmt:
|
||||
- context:
|
||||
- distro: "rhel-7.9"
|
||||
- distro_target: "rhel-8.8"
|
||||
- settings:
|
||||
- provisioning:
|
||||
- tags:
|
||||
- BusinessUnit: sst_upgrades@leapp_upstream_test
|
||||
- env:
|
||||
- SOURCE_RELEASE: "7.9"
|
||||
- TARGET_RELEASE: "8.8"
|
||||
-
|
||||
-- &beaker-minimal-79to88
|
||||
- <<: *beaker-minimal-7to8-abstract-ondemand
|
||||
- trigger: pull_request
|
||||
- labels:
|
||||
- - beaker-minimal
|
||||
- - beaker-minimal-7.9to8.8
|
||||
- - 7.9to8.8
|
||||
- identifier: sanity-7.9to8.8-beaker-minimal-ondemand
|
||||
- tf_extra_params:
|
||||
- test:
|
||||
- tmt:
|
||||
- plan_filter: 'tag:7to8 & tag:partitioning & enabled:true'
|
||||
- environments:
|
||||
- - artifacts:
|
||||
- - type: "repository"
|
||||
- id: "https://download.copr.fedorainfracloud.org/results/@oamg/leapp/epel-7-x86_64/"
|
||||
- packages:
|
||||
- - leapp-repository
|
||||
- - python2-leapp
|
||||
- - leapp-upgrade-el7toel8-deps
|
||||
- order: 40
|
||||
- - tmt:
|
||||
- context:
|
||||
- distro: "rhel-7.9"
|
||||
- distro_target: "rhel-8.8"
|
||||
- settings:
|
||||
- provisioning:
|
||||
- tags:
|
||||
- BusinessUnit: sst_upgrades@leapp_upstream_test
|
||||
- env:
|
||||
- SOURCE_RELEASE: "7.9"
|
||||
- TARGET_RELEASE: "8.8"
|
||||
-
|
||||
-- &kernel-rt-79to88
|
||||
- <<: *kernel-rt-abstract-7to8-ondemand
|
||||
- trigger: pull_request
|
||||
- labels:
|
||||
- - kernel-rt
|
||||
- - kernel-rt-7.9to8.8
|
||||
- - 7.9to8.8
|
||||
- identifier: sanity-7.9to8.8-kernel-rt-ondemand
|
||||
- tf_extra_params:
|
||||
- test:
|
||||
- tmt:
|
||||
- plan_filter: 'tag:7to8 & tag:kernel-rt & enabled:true'
|
||||
- environments:
|
||||
- - artifacts:
|
||||
- - type: "repository"
|
||||
- id: "https://download.copr.fedorainfracloud.org/results/@oamg/leapp/epel-7-x86_64/"
|
||||
- packages:
|
||||
- - leapp-repository
|
||||
- - python2-leapp
|
||||
- - leapp-upgrade-el7toel8-deps
|
||||
- order: 40
|
||||
- - tmt:
|
||||
- context:
|
||||
- distro: "rhel-7.9"
|
||||
- distro_target: "rhel-8.8"
|
||||
- settings:
|
||||
- provisioning:
|
||||
- tags:
|
||||
- BusinessUnit: sst_upgrades@leapp_upstream_test
|
||||
- env:
|
||||
- SOURCE_RELEASE: "7.9"
|
||||
- TARGET_RELEASE: "8.8"
|
||||
-
|
||||
-# Tests: 7.9 -> 8.10
|
||||
-- &sanity-79to810
|
||||
- <<: *sanity-abstract-7to8
|
||||
- trigger: pull_request
|
||||
- identifier: sanity-7.9to8.10
|
||||
- tf_extra_params:
|
||||
- test:
|
||||
- tmt:
|
||||
- plan_filter: 'tag:7to8 & tag:sanity & enabled:true'
|
||||
- environments:
|
||||
- - artifacts:
|
||||
- - type: "repository"
|
||||
- id: "https://download.copr.fedorainfracloud.org/results/@oamg/leapp/epel-7-x86_64/"
|
||||
- packages:
|
||||
- - leapp-repository
|
||||
- - python2-leapp
|
||||
- - leapp-upgrade-el7toel8-deps
|
||||
- order: 40
|
||||
- - tmt:
|
||||
- context:
|
||||
- distro: "rhel-7.9"
|
||||
- distro_target: "rhel-8.10"
|
||||
- settings:
|
||||
- provisioning:
|
||||
- tags:
|
||||
- BusinessUnit: sst_upgrades@leapp_upstream_test
|
||||
- env:
|
||||
- SOURCE_RELEASE: "7.9"
|
||||
- TARGET_RELEASE: "8.10"
|
||||
-
|
||||
-- &sanity-79to810-aws
|
||||
- <<: *sanity-abstract-7to8-aws
|
||||
- trigger: pull_request
|
||||
- identifier: sanity-7.9to8.10-aws
|
||||
- tf_extra_params:
|
||||
- test:
|
||||
- tmt:
|
||||
- plan_filter: 'tag:7to8 & tag:upgrade_happy_path & enabled:true'
|
||||
- environments:
|
||||
- - artifacts:
|
||||
- - type: "repository"
|
||||
- id: "https://download.copr.fedorainfracloud.org/results/@oamg/leapp/epel-7-x86_64/"
|
||||
- packages:
|
||||
- - leapp-repository
|
||||
- - python2-leapp
|
||||
- - leapp-upgrade-el7toel8-deps
|
||||
- order: 40
|
||||
- - tmt:
|
||||
- context:
|
||||
- distro: "rhel-7.9"
|
||||
- distro_target: "rhel-8.10"
|
||||
- settings:
|
||||
- provisioning:
|
||||
- post_install_script: "#!/bin/sh\nsudo sed -i s/.*ssh-rsa/ssh-rsa/ /root/.ssh/authorized_keys"
|
||||
- tags:
|
||||
- BusinessUnit: sst_upgrades@leapp_upstream_test
|
||||
- env:
|
||||
- SOURCE_RELEASE: "7.9"
|
||||
- TARGET_RELEASE: "8.10"
|
||||
- RHUI: "aws"
|
||||
- LEAPPDATA_BRANCH: "upstream"
|
||||
- LEAPP_NO_RHSM: "1"
|
||||
- USE_CUSTOM_REPOS: rhui
|
||||
-
|
||||
-- &beaker-minimal-79to810
|
||||
- <<: *beaker-minimal-7to8-abstract-ondemand
|
||||
- trigger: pull_request
|
||||
- labels:
|
||||
- - beaker-minimal
|
||||
- - beaker-minimal-7.9to8.10
|
||||
- - 7.9to8.10
|
||||
- identifier: sanity-7.9to8.10-beaker-minimal-ondemand
|
||||
+ epel-8-x86_64:
|
||||
+ distros: [RHEL-8.10.0-Nightly]
|
||||
+ identifier: sanity-abstract-8to9
|
||||
tf_extra_params:
|
||||
test:
|
||||
tmt:
|
||||
- plan_filter: 'tag:7to8 & tag:partitioning & enabled:true'
|
||||
+ plan_filter: 'tag:8to9'
|
||||
environments:
|
||||
- - artifacts:
|
||||
+ - artifacts: &artifacts-for-rhel8
|
||||
- type: "repository"
|
||||
- id: "https://download.copr.fedorainfracloud.org/results/@oamg/leapp/epel-7-x86_64/"
|
||||
+ id: "https://download.copr.fedorainfracloud.org/results/@oamg/leapp/epel-8-x86_64/"
|
||||
packages:
|
||||
- leapp-repository
|
||||
- - python2-leapp
|
||||
- - leapp-upgrade-el7toel8-deps
|
||||
+ - python3-leapp
|
||||
+ - leapp-upgrade-el8toel9-deps
|
||||
order: 40
|
||||
- - tmt:
|
||||
- context:
|
||||
- distro: "rhel-7.9"
|
||||
- distro_target: "rhel-8.10"
|
||||
+ - &tmt-env-settings-810to94
|
||||
+ tmt:
|
||||
+ context: &tmt-context-810to94
|
||||
+ distro: "rhel-8.10"
|
||||
+ distro_target: "rhel-9.4"
|
||||
settings:
|
||||
provisioning:
|
||||
tags:
|
||||
BusinessUnit: sst_upgrades@leapp_upstream_test
|
||||
- env:
|
||||
- SOURCE_RELEASE: "7.9"
|
||||
- TARGET_RELEASE: "8.10"
|
||||
-
|
||||
-- &kernel-rt-79to810
|
||||
- <<: *kernel-rt-abstract-7to8-ondemand
|
||||
- trigger: pull_request
|
||||
- labels:
|
||||
- - kernel-rt
|
||||
- - kernel-rt-7.9to8.10
|
||||
- - 7.9to8.10
|
||||
- identifier: sanity-7.9to8.10-kernel-rt-ondemand
|
||||
- tf_extra_params:
|
||||
- test:
|
||||
- tmt:
|
||||
- plan_filter: 'tag:7to8 & tag:kernel-rt & enabled:true'
|
||||
- environments:
|
||||
- - artifacts:
|
||||
- - type: "repository"
|
||||
- id: "https://download.copr.fedorainfracloud.org/results/@oamg/leapp/epel-7-x86_64/"
|
||||
- packages:
|
||||
- - leapp-repository
|
||||
- - python2-leapp
|
||||
- - leapp-upgrade-el7toel8-deps
|
||||
- order: 40
|
||||
- - tmt:
|
||||
- context:
|
||||
- distro: "rhel-7.9"
|
||||
- distro_target: "rhel-8.10"
|
||||
+ - &tmt-env-settings-810to96
|
||||
+ tmt:
|
||||
+ context: &tmt-context-810to96
|
||||
+ distro: "rhel-8.10"
|
||||
+ distro_target: "rhel-9.6"
|
||||
settings:
|
||||
provisioning:
|
||||
tags:
|
||||
BusinessUnit: sst_upgrades@leapp_upstream_test
|
||||
- env:
|
||||
- SOURCE_RELEASE: "7.9"
|
||||
- TARGET_RELEASE: "8.10"
|
||||
-
|
||||
-
|
||||
-# ###################################################################### #
|
||||
-# ############################## 8 TO 9 ################################ #
|
||||
-# ###################################################################### #
|
||||
-
|
||||
-# ###################################################################### #
|
||||
-# ### Abstract job definitions to make individual tests/jobs smaller ### #
|
||||
-# ###################################################################### #
|
||||
-
|
||||
-#NOTE(pstodulk) putting default values in abstract jobs as from 8.10, as this
|
||||
-# is the last RHEL 8 release and all new future tests will start from this
|
||||
-# one release.
|
||||
-
|
||||
-- &sanity-abstract-8to9
|
||||
- job: tests
|
||||
- trigger: ignore
|
||||
- fmf_url: "https://gitlab.cee.redhat.com/oamg/leapp-tests"
|
||||
- fmf_ref: "main"
|
||||
- use_internal_tf: True
|
||||
- labels:
|
||||
- - sanity
|
||||
- targets:
|
||||
- epel-8-x86_64:
|
||||
- distros: [RHEL-8.10.0-Nightly]
|
||||
- identifier: sanity-abstract-8to9
|
||||
|
||||
- &sanity-abstract-8to9-aws
|
||||
<<: *sanity-abstract-8to9
|
||||
@@ -414,154 +135,9 @@ jobs:
|
||||
identifier: sanity-8to9-kernel-rt-abstract-ondemand
|
||||
|
||||
# ###################################################################### #
|
||||
-# ######################### Individual tests ########################### #
|
||||
+# ############################# 8.10 > 9.4 ############################# #
|
||||
# ###################################################################### #
|
||||
|
||||
-# Tests: 8.8 -> 9.2
|
||||
-- &sanity-88to92
|
||||
- <<: *sanity-abstract-8to9
|
||||
- trigger: pull_request
|
||||
- targets:
|
||||
- epel-8-x86_64:
|
||||
- distros: [RHEL-8.8.0-Nightly]
|
||||
- identifier: sanity-8.8to9.2
|
||||
- tf_extra_params:
|
||||
- test:
|
||||
- tmt:
|
||||
- plan_filter: 'tag:8to9 & tag:tier0 & enabled:true'
|
||||
- environments:
|
||||
- - artifacts:
|
||||
- - type: "repository"
|
||||
- id: "https://download.copr.fedorainfracloud.org/results/@oamg/leapp/epel-8-x86_64/"
|
||||
- packages:
|
||||
- - leapp-repository
|
||||
- - python3-leapp
|
||||
- - leapp-upgrade-el8toel9-deps
|
||||
- order: 40
|
||||
- tmt:
|
||||
- context:
|
||||
- distro: "rhel-8.8"
|
||||
- distro_target: "rhel-9.2"
|
||||
- settings:
|
||||
- provisioning:
|
||||
- tags:
|
||||
- BusinessUnit: sst_upgrades@leapp_upstream_test
|
||||
- env:
|
||||
- SOURCE_RELEASE: "8.8"
|
||||
- TARGET_RELEASE: "9.2"
|
||||
- RHSM_REPOS_EUS: "eus"
|
||||
-
|
||||
-- &sanity-88to92-aws
|
||||
- <<: *sanity-abstract-8to9-aws
|
||||
- trigger: pull_request
|
||||
- targets:
|
||||
- epel-8-x86_64:
|
||||
- distros: [RHEL-8.8-rhui]
|
||||
- identifier: sanity-8.8to9.2-aws
|
||||
- tf_extra_params:
|
||||
- test:
|
||||
- tmt:
|
||||
- plan_filter: 'tag:8to9 & tag:rhui-tier[0] & enabled:true'
|
||||
- environments:
|
||||
- - artifacts:
|
||||
- - type: "repository"
|
||||
- id: "https://download.copr.fedorainfracloud.org/results/@oamg/leapp/epel-8-x86_64/"
|
||||
- packages:
|
||||
- - leapp-repository
|
||||
- - python3-leapp
|
||||
- - leapp-upgrade-el8toel9-deps
|
||||
- order: 40
|
||||
- tmt:
|
||||
- context:
|
||||
- distro: "rhel-8.8"
|
||||
- distro_target: "rhel-9.2"
|
||||
- settings:
|
||||
- provisioning:
|
||||
- post_install_script: "#!/bin/sh\nsudo sed -i s/.*ssh-rsa/ssh-rsa/ /root/.ssh/authorized_keys"
|
||||
- tags:
|
||||
- BusinessUnit: sst_upgrades@leapp_upstream_test
|
||||
- env:
|
||||
- SOURCE_RELEASE: "8.8"
|
||||
- TARGET_RELEASE: "9.2"
|
||||
- RHUI_HYPERSCALER: aws
|
||||
-
|
||||
-- &beaker-minimal-88to92
|
||||
- <<: *beaker-minimal-8to9-abstract-ondemand
|
||||
- trigger: pull_request
|
||||
- labels:
|
||||
- - beaker-minimal
|
||||
- - beaker-minimal-8.8to9.2
|
||||
- - 8.8to9.2
|
||||
- targets:
|
||||
- epel-8-x86_64:
|
||||
- distros: [RHEL-8.8.0-Nightly]
|
||||
- identifier: sanity-8.8to9.2-beaker-minimal-ondemand
|
||||
- tf_extra_params:
|
||||
- test:
|
||||
- tmt:
|
||||
- plan_filter: 'tag:8to9 &tag:partitioning & enabled:true'
|
||||
- environments:
|
||||
- - artifacts:
|
||||
- - type: "repository"
|
||||
- id: "https://download.copr.fedorainfracloud.org/results/@oamg/leapp/epel-8-x86_64/"
|
||||
- packages:
|
||||
- - leapp-repository
|
||||
- - python3-leapp
|
||||
- - leapp-upgrade-el8toel9-deps
|
||||
- order: 40
|
||||
- tmt:
|
||||
- context:
|
||||
- distro: "rhel-8.8"
|
||||
- distro_target: "rhel-9.2"
|
||||
- settings:
|
||||
- provisioning:
|
||||
- post_install_script: "#!/bin/sh\nsudo sed -i s/.*ssh-rsa/ssh-rsa/ /root/.ssh/authorized_keys"
|
||||
- tags:
|
||||
- BusinessUnit: sst_upgrades@leapp_upstream_test
|
||||
- env:
|
||||
- SOURCE_RELEASE: "8.8"
|
||||
- TARGET_RELEASE: "9.2"
|
||||
- RHSM_REPOS_EUS: "eus"
|
||||
-
|
||||
-- &kernel-rt-88to92
|
||||
- <<: *kernel-rt-abstract-8to9-ondemand
|
||||
- trigger: pull_request
|
||||
- labels:
|
||||
- - kernel-rt
|
||||
- - kernel-rt-8.8to9.2
|
||||
- - 8.8to9.2
|
||||
- identifier: sanity-8.8to9.2-kernel-rt-ondemand
|
||||
- targets:
|
||||
- epel-8-x86_64:
|
||||
- distros: [RHEL-8.8.0-Nightly]
|
||||
- tf_extra_params:
|
||||
- test:
|
||||
- tmt:
|
||||
- plan_filter: 'tag:8to9 & tag:kernel-rt & enabled:true'
|
||||
- environments:
|
||||
- - artifacts:
|
||||
- - type: "repository"
|
||||
- id: "https://download.copr.fedorainfracloud.org/results/@oamg/leapp/epel-8-x86_64/"
|
||||
- packages:
|
||||
- - leapp-repository
|
||||
- - python3-leapp
|
||||
- - leapp-upgrade-el8toel9-deps
|
||||
- order: 40
|
||||
- tmt:
|
||||
- context:
|
||||
- distro: "rhel-8.8"
|
||||
- distro_target: "rhel-9.2"
|
||||
- settings:
|
||||
- provisioning:
|
||||
- tags:
|
||||
- BusinessUnit: sst_upgrades@leapp_upstream_test
|
||||
- env:
|
||||
- SOURCE_RELEASE: "8.8"
|
||||
- TARGET_RELEASE: "9.2"
|
||||
- RHSM_REPOS_EUS: "eus"
|
||||
-
|
||||
-
|
||||
-# Tests: 8.10 -> 9.4
|
||||
- &sanity-810to94
|
||||
<<: *sanity-abstract-8to9
|
||||
trigger: pull_request
|
||||
@@ -571,27 +147,12 @@ jobs:
|
||||
tmt:
|
||||
plan_filter: 'tag:8to9 & tag:tier0 & enabled:true'
|
||||
environments:
|
||||
- - artifacts:
|
||||
- - type: "repository"
|
||||
- id: "https://download.copr.fedorainfracloud.org/results/@oamg/leapp/epel-8-x86_64/"
|
||||
- packages:
|
||||
- - leapp-repository
|
||||
- - python3-leapp
|
||||
- - leapp-upgrade-el8toel9-deps
|
||||
- order: 40
|
||||
- - tmt:
|
||||
- context:
|
||||
- distro: "rhel-8.10"
|
||||
- distro_target: "rhel-9.4"
|
||||
- settings:
|
||||
- provisioning:
|
||||
- tags:
|
||||
- BusinessUnit: sst_upgrades@leapp_upstream_test
|
||||
- env:
|
||||
+ - artifacts: *artifacts-for-rhel8
|
||||
+ - *tmt-env-settings-810to94
|
||||
+ env: &env-810to94
|
||||
SOURCE_RELEASE: "8.10"
|
||||
TARGET_RELEASE: "9.4"
|
||||
|
||||
-# On-demand minimal beaker tests
|
||||
- &beaker-minimal-810to94
|
||||
<<: *beaker-minimal-8to9-abstract-ondemand
|
||||
trigger: pull_request
|
||||
@@ -605,27 +166,11 @@ jobs:
|
||||
tmt:
|
||||
plan_filter: 'tag:8to9 & tag:partitioning & enabled:true'
|
||||
environments:
|
||||
- - artifacts:
|
||||
- - type: "repository"
|
||||
- id: "https://download.copr.fedorainfracloud.org/results/@oamg/leapp/epel-8-x86_64/"
|
||||
- packages:
|
||||
- - leapp-repository
|
||||
- - python3-leapp
|
||||
- - leapp-upgrade-el8toel9-deps
|
||||
- order: 40
|
||||
- - tmt:
|
||||
- context:
|
||||
- distro: "rhel-8.10"
|
||||
- distro_target: "rhel-9.4"
|
||||
- settings:
|
||||
- provisioning:
|
||||
- tags:
|
||||
- BusinessUnit: sst_upgrades@leapp_upstream_test
|
||||
+ - artifacts: *artifacts-for-rhel8
|
||||
+ - *tmt-env-settings-810to94
|
||||
env:
|
||||
- SOURCE_RELEASE: "8.10"
|
||||
- TARGET_RELEASE: "9.4"
|
||||
+ <<: *env-810to94
|
||||
|
||||
-# On-demand kernel-rt tests
|
||||
- &kernel-rt-810to94
|
||||
<<: *kernel-rt-abstract-8to9-ondemand
|
||||
trigger: pull_request
|
||||
@@ -639,56 +184,54 @@ jobs:
|
||||
tmt:
|
||||
plan_filter: 'tag:8to9 & tag:kernel-rt & enabled:true'
|
||||
environments:
|
||||
- - artifacts:
|
||||
- - type: "repository"
|
||||
- id: "https://download.copr.fedorainfracloud.org/results/@oamg/leapp/epel-8-x86_64/"
|
||||
- packages:
|
||||
- - leapp-repository
|
||||
- - python3-leapp
|
||||
- - leapp-upgrade-el8toel9-deps
|
||||
- order: 40
|
||||
+ - artifacts: *artifacts-for-rhel8
|
||||
+ - *tmt-env-settings-810to94
|
||||
+ env:
|
||||
+ <<: *env-810to94
|
||||
+
|
||||
+- &sanity-810to94-aws
|
||||
+ <<: *sanity-abstract-8to9-aws
|
||||
+ trigger: pull_request
|
||||
+ targets:
|
||||
+ epel-8-x86_64:
|
||||
+ distros: [RHEL-8.10-rhui]
|
||||
+ identifier: sanity-8.10to9.4-aws
|
||||
+ tf_extra_params:
|
||||
+ test:
|
||||
+ tmt:
|
||||
+ plan_filter: 'tag:8to9 & tag:rhui-tier[0] & enabled:true'
|
||||
+ environments:
|
||||
+ - artifacts: *artifacts-for-rhel8
|
||||
- tmt:
|
||||
- context:
|
||||
- distro: "rhel-8.10"
|
||||
- distro_target: "rhel-9.4"
|
||||
+ context: *tmt-context-810to94
|
||||
settings:
|
||||
provisioning:
|
||||
+ post_install_script: "#!/bin/sh\nsudo sed -i s/.*ssh-rsa/ssh-rsa/ /root/.ssh/authorized_keys"
|
||||
tags:
|
||||
BusinessUnit: sst_upgrades@leapp_upstream_test
|
||||
env:
|
||||
- SOURCE_RELEASE: "8.10"
|
||||
- TARGET_RELEASE: "9.4"
|
||||
+ <<: *env-810to94
|
||||
+ RHUI_HYPERSCALER: aws
|
||||
|
||||
|
||||
-# Tests: 8.10 -> 9.5
|
||||
-- &sanity-810to95
|
||||
+# ###################################################################### #
|
||||
+# ############################# 8.10 > 9.6 ############################# #
|
||||
+# ###################################################################### #
|
||||
+
|
||||
+- &sanity-810to96
|
||||
<<: *sanity-abstract-8to9
|
||||
trigger: pull_request
|
||||
- identifier: sanity-8.10to9.5
|
||||
+ identifier: sanity-8.10to9.6
|
||||
tf_extra_params:
|
||||
test:
|
||||
tmt:
|
||||
plan_filter: 'tag:8to9 & tag:tier0 & enabled:true'
|
||||
environments:
|
||||
- - artifacts:
|
||||
- - type: "repository"
|
||||
- id: "https://download.copr.fedorainfracloud.org/results/@oamg/leapp/epel-8-x86_64/"
|
||||
- packages:
|
||||
- - leapp-repository
|
||||
- - python3-leapp
|
||||
- - leapp-upgrade-el8toel9-deps
|
||||
- order: 40
|
||||
- - tmt:
|
||||
- context:
|
||||
- distro: "rhel-8.10"
|
||||
- distro_target: "rhel-9.5"
|
||||
- settings:
|
||||
- provisioning:
|
||||
- tags:
|
||||
- BusinessUnit: sst_upgrades@leapp_upstream_test
|
||||
- env:
|
||||
+ - artifacts: *artifacts-for-rhel8
|
||||
+ - *tmt-env-settings-810to96
|
||||
+ env: &env-810to96
|
||||
SOURCE_RELEASE: "8.10"
|
||||
- TARGET_RELEASE: "9.5"
|
||||
+ TARGET_RELEASE: "9.6"
|
||||
|
||||
# On-demand minimal beaker tests
|
||||
- &beaker-minimal-810to95
|
||||
@@ -696,64 +239,34 @@ jobs:
|
||||
trigger: pull_request
|
||||
labels:
|
||||
- beaker-minimal
|
||||
- - beaker-minimal-8.10to9.5
|
||||
- - 8.10to9.5
|
||||
- identifier: sanity-8.10to9.5-beaker-minimal-ondemand
|
||||
+ - beaker-minimal-8.10to9.6
|
||||
+ - 8.10to9.6
|
||||
+ identifier: sanity-8.10to9.6-beaker-minimal-ondemand
|
||||
tf_extra_params:
|
||||
test:
|
||||
tmt:
|
||||
plan_filter: 'tag:8to9 & tag:partitioning & enabled:true'
|
||||
environments:
|
||||
- - artifacts:
|
||||
- - type: "repository"
|
||||
- id: "https://download.copr.fedorainfracloud.org/results/@oamg/leapp/epel-8-x86_64/"
|
||||
- packages:
|
||||
- - leapp-repository
|
||||
- - python3-leapp
|
||||
- - leapp-upgrade-el8toel9-deps
|
||||
- order: 40
|
||||
- - tmt:
|
||||
- context:
|
||||
- distro: "rhel-8.10"
|
||||
- distro_target: "rhel-9.5"
|
||||
- settings:
|
||||
- provisioning:
|
||||
- tags:
|
||||
- BusinessUnit: sst_upgrades@leapp_upstream_test
|
||||
+ - artifacts: *artifacts-for-rhel8
|
||||
+ - *tmt-env-settings-810to96
|
||||
env:
|
||||
- SOURCE_RELEASE: "8.10"
|
||||
- TARGET_RELEASE: "9.5"
|
||||
+ <<: *env-810to96
|
||||
|
||||
# On-demand kernel-rt tests
|
||||
-- &kernel-rt-810to95
|
||||
+- &kernel-rt-810to96
|
||||
<<: *kernel-rt-abstract-8to9-ondemand
|
||||
trigger: pull_request
|
||||
labels:
|
||||
- kernel-rt
|
||||
- - kernel-rt-8.10to9.5
|
||||
- - 8.10to9.5
|
||||
- identifier: sanity-8.10to9.5-kernel-rt-ondemand
|
||||
+ - kernel-rt-8.10to9.6
|
||||
+ - 8.10to9.6
|
||||
+ identifier: sanity-8.10to9.6-kernel-rt-ondemand
|
||||
tf_extra_params:
|
||||
test:
|
||||
tmt:
|
||||
plan_filter: 'tag:8to9 & tag:kernel-rt & enabled:true'
|
||||
environments:
|
||||
- - artifacts:
|
||||
- - type: "repository"
|
||||
- id: "https://download.copr.fedorainfracloud.org/results/@oamg/leapp/epel-8-x86_64/"
|
||||
- packages:
|
||||
- - leapp-repository
|
||||
- - python3-leapp
|
||||
- - leapp-upgrade-el8toel9-deps
|
||||
- order: 40
|
||||
- - tmt:
|
||||
- context:
|
||||
- distro: "rhel-8.10"
|
||||
- distro_target: "rhel-9.5"
|
||||
- settings:
|
||||
- provisioning:
|
||||
- tags:
|
||||
- BusinessUnit: sst_upgrades@leapp_upstream_test
|
||||
+ - artifacts: *artifacts-for-rhel8
|
||||
+ - *tmt-env-settings-810to96
|
||||
env:
|
||||
- SOURCE_RELEASE: "8.10"
|
||||
- TARGET_RELEASE: "9.5"
|
||||
+ <<: *env-810to96
|
||||
--
|
||||
2.49.0
|
||||
|
||||
@ -0,0 +1,30 @@
|
||||
From 4ddbae04c8d012ef48e9cef198050e96fad8c402 Mon Sep 17 00:00:00 2001
|
||||
From: MichalHe <michal.sk.com@gmail.com>
|
||||
Date: Tue, 18 Mar 2025 10:33:11 +0100
|
||||
Subject: [PATCH 2/7] configs: recognize only the .yaml file extension
|
||||
|
||||
Leapp recognized two file extensions for its configuration files:
|
||||
.yaml and .yml. This patch removes the recognition of .yml to
|
||||
avoid user confusion, e.g., creating configuration files with
|
||||
the same name but different extensions. This patch also enforces
|
||||
our documentation to use only one extension.
|
||||
---
|
||||
leapp/actors/config.py | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/leapp/actors/config.py b/leapp/actors/config.py
|
||||
index 160c159..55775d5 100644
|
||||
--- a/leapp/actors/config.py
|
||||
+++ b/leapp/actors/config.py
|
||||
@@ -146,7 +146,7 @@ def _get_config(config_dir='/etc/leapp/actor_conf.d'):
|
||||
# We do not do a recursive walk to maintain Python2 compatibility, but we do
|
||||
# not expect rich config hierarchies, so no harm done.
|
||||
config_files = glob.glob(os.path.join(config_dir, '*'))
|
||||
- config_files = [f for f in config_files if f.endswith('.yml') or f.endswith('.yaml')]
|
||||
+ config_files = [f for f in config_files if f.endswith('.yaml')]
|
||||
config_files.sort()
|
||||
|
||||
configuration = {}
|
||||
--
|
||||
2.49.0
|
||||
|
||||
30
SOURCES/0003-Handle-case-when-db-directory-is-missing.patch
Normal file
30
SOURCES/0003-Handle-case-when-db-directory-is-missing.patch
Normal file
@ -0,0 +1,30 @@
|
||||
From 4c805dd449c39c1ff00cea4563cc8227ff23a5ec Mon Sep 17 00:00:00 2001
|
||||
From: karolinku <kkula@redhat.com>
|
||||
Date: Tue, 1 Apr 2025 16:01:08 +0200
|
||||
Subject: [PATCH 3/7] Handle case when db directory is missing
|
||||
|
||||
When directory is missing, this change will introduce creation of
|
||||
missing path and allow proceeding with execution.
|
||||
|
||||
JIRA: RHEL-54382
|
||||
---
|
||||
leapp/utils/audit/__init__.py | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
diff --git a/leapp/utils/audit/__init__.py b/leapp/utils/audit/__init__.py
|
||||
index 8511179..d5ebb73 100644
|
||||
--- a/leapp/utils/audit/__init__.py
|
||||
+++ b/leapp/utils/audit/__init__.py
|
||||
@@ -57,6 +57,9 @@ def create_connection(path):
|
||||
:param path: Path to the database
|
||||
:return: Connection object
|
||||
"""
|
||||
+ db_dir_path = os.path.dirname(path)
|
||||
+ if not os.path.exists(db_dir_path):
|
||||
+ os.mkdir(db_dir_path, mode=0o700)
|
||||
with _umask(0o177):
|
||||
return _initialize_database(sqlite3.connect(path))
|
||||
|
||||
--
|
||||
2.49.0
|
||||
|
||||
@ -0,0 +1,66 @@
|
||||
From 372ac6894d206eb9adab704dd12a901d824f4b39 Mon Sep 17 00:00:00 2001
|
||||
From: Petr Stodulka <pstodulk@redhat.com>
|
||||
Date: Sun, 6 Apr 2025 20:06:03 +0200
|
||||
Subject: [PATCH 4/7] Fix CLI: allow to set falsy values as default
|
||||
|
||||
When specifying an option for a leapp CLI command using @add_option
|
||||
decorator, it has not been possible to specify a "falsy" value
|
||||
(or let's say empty) as `default` e.g. empty string, empty list, etc.
|
||||
Start to check NoneType for the `default` parameter properly to
|
||||
allow it to set this.
|
||||
|
||||
Bump leapp-framework to 6.1.
|
||||
|
||||
Note:
|
||||
The similar problem is for `choices` and `metavar` parameters.
|
||||
In case of `metavar` it's however ok to ignore empty string.
|
||||
In case of empty `choices` it would lead to the same evaluation as
|
||||
in case of NoneType (any input is ok). So I that the `default` is the
|
||||
only parameter that needs to be checked properly.
|
||||
|
||||
JIRA: RHEL-86206
|
||||
---
|
||||
leapp/utils/clicmd.py | 6 +++---
|
||||
packaging/leapp.spec | 2 +-
|
||||
2 files changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/leapp/utils/clicmd.py b/leapp/utils/clicmd.py
|
||||
index eef6834..89d3e27 100644
|
||||
--- a/leapp/utils/clicmd.py
|
||||
+++ b/leapp/utils/clicmd.py
|
||||
@@ -228,8 +228,8 @@ class Command(object):
|
||||
:type metavar: str
|
||||
:param choices: range of values that the argument is allowed to take
|
||||
:type choices: list
|
||||
- :param choices: default value of the argument if nothing is specified
|
||||
- :type choices: str
|
||||
+ :param default: default value of the argument if nothing is specified
|
||||
+ :type default: any
|
||||
:return: self
|
||||
"""
|
||||
name = name.lstrip('-')
|
||||
@@ -250,7 +250,7 @@ class Command(object):
|
||||
kwargs['metavar'] = metavar
|
||||
if choices:
|
||||
kwargs['choices'] = choices
|
||||
- if default:
|
||||
+ if default is not None:
|
||||
kwargs['default'] = default
|
||||
self._add_opt(*names, help=help, # noqa; pylint: disable=redefined-builtin
|
||||
action=action, internal={'wrapped': wrapped, 'inherit': inherit}, **kwargs)
|
||||
diff --git a/packaging/leapp.spec b/packaging/leapp.spec
|
||||
index b942112..19d49e1 100644
|
||||
--- a/packaging/leapp.spec
|
||||
+++ b/packaging/leapp.spec
|
||||
@@ -13,7 +13,7 @@
|
||||
# This is kind of help for more flexible development of leapp repository,
|
||||
# so people do not have to wait for new official release of leapp to ensure
|
||||
# it is installed/used the compatible one.
|
||||
-%global framework_version 6.0
|
||||
+%global framework_version 6.1
|
||||
|
||||
# IMPORTANT: everytime the requirements are changed, increment number by one
|
||||
# - same for Provides in deps subpackage
|
||||
--
|
||||
2.49.0
|
||||
|
||||
@ -0,0 +1,40 @@
|
||||
From 53f22282347011801fa709ba6b558f87fec26bc1 Mon Sep 17 00:00:00 2001
|
||||
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
|
||||
Date: Mon, 7 Apr 2025 13:01:51 +0000
|
||||
Subject: [PATCH 5/7] chore(deps): update sclorg/testing-farm-as-github-action
|
||||
action to v4
|
||||
|
||||
---
|
||||
.github/workflows/reuse-tests-7to8.yml | 2 +-
|
||||
.github/workflows/reuse-tests-8to9.yml | 2 +-
|
||||
2 files changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/.github/workflows/reuse-tests-7to8.yml b/.github/workflows/reuse-tests-7to8.yml
|
||||
index 65621b5..7f7ce35 100644
|
||||
--- a/.github/workflows/reuse-tests-7to8.yml
|
||||
+++ b/.github/workflows/reuse-tests-7to8.yml
|
||||
@@ -46,7 +46,7 @@ jobs:
|
||||
steps:
|
||||
- name: Schedule regression testing for 7to8
|
||||
id: run_test_7to8
|
||||
- uses: sclorg/testing-farm-as-github-action@v3.1.2
|
||||
+ uses: sclorg/testing-farm-as-github-action@v4.0.0
|
||||
with:
|
||||
# required
|
||||
api_url: ${{ secrets.TF_ENDPOINT }}
|
||||
diff --git a/.github/workflows/reuse-tests-8to9.yml b/.github/workflows/reuse-tests-8to9.yml
|
||||
index 12e69c7..811fd8e 100644
|
||||
--- a/.github/workflows/reuse-tests-8to9.yml
|
||||
+++ b/.github/workflows/reuse-tests-8to9.yml
|
||||
@@ -47,7 +47,7 @@ jobs:
|
||||
steps:
|
||||
- name: Schedule regression testing for 8to9
|
||||
id: run_test_8to9
|
||||
- uses: sclorg/testing-farm-as-github-action@v3.1.2
|
||||
+ uses: sclorg/testing-farm-as-github-action@v4.0.0
|
||||
with:
|
||||
# required
|
||||
api_url: ${{ secrets.TF_ENDPOINT }}
|
||||
--
|
||||
2.49.0
|
||||
|
||||
180
SOURCES/0006-Remove-7to8-CI-tests.patch
Normal file
180
SOURCES/0006-Remove-7to8-CI-tests.patch
Normal file
@ -0,0 +1,180 @@
|
||||
From cfdce5f3fc6fce6d9e253c153ec94aad9ceb0609 Mon Sep 17 00:00:00 2001
|
||||
From: Tomas Fratrik <tomasfratrik8@gmail.com>
|
||||
Date: Wed, 23 Apr 2025 13:11:32 +0200
|
||||
Subject: [PATCH 6/7] Remove 7to8 CI tests
|
||||
|
||||
Removing 7to8 CI tests because the upgrade path from RHEL-7 to RHEL-8 is no longer supported.
|
||||
|
||||
Jira: RHELMISC-11004
|
||||
---
|
||||
.github/workflows/reuse-tests-7to8.yml | 69 --------------------------
|
||||
.github/workflows/tmt-tests.yml | 59 ----------------------
|
||||
.github/workflows/unit-tests.yml | 6 ---
|
||||
3 files changed, 134 deletions(-)
|
||||
delete mode 100644 .github/workflows/reuse-tests-7to8.yml
|
||||
|
||||
diff --git a/.github/workflows/reuse-tests-7to8.yml b/.github/workflows/reuse-tests-7to8.yml
|
||||
deleted file mode 100644
|
||||
index 7f7ce35..0000000
|
||||
--- a/.github/workflows/reuse-tests-7to8.yml
|
||||
+++ /dev/null
|
||||
@@ -1,69 +0,0 @@
|
||||
-name: reuse-tests-7to8@TF
|
||||
-
|
||||
-on:
|
||||
- workflow_call:
|
||||
- secrets:
|
||||
- TF_ENDPOINT:
|
||||
- required: True
|
||||
- TF_API_KEY:
|
||||
- required: True
|
||||
- inputs:
|
||||
- copr_artifacts:
|
||||
- required: True
|
||||
- type: string
|
||||
- tmt_plan_regex:
|
||||
- type: string
|
||||
- default: "^(?!.*upgrade_plugin)(?!.*tier[2-3].*)(?!.*rhsm)(?!.*c2r)(?!.*sap)(?!.*8to9)"
|
||||
- environment_settings:
|
||||
- type: string
|
||||
- default: '{"provisioning": {"post_install_script": "#!/bin/sh\nsudo sed -i s/.*ssh-rsa/ssh-rsa/ /root/.ssh/authorized_keys"}}'
|
||||
- arch:
|
||||
- type: string
|
||||
- default: 'x86_64'
|
||||
- pull_request_status_name:
|
||||
- type: string
|
||||
- default: '7to8'
|
||||
- copr:
|
||||
- type: string
|
||||
- default: 'epel-7-x86_64'
|
||||
- tmt_context:
|
||||
- type: string
|
||||
- default: 'distro=rhel-7.9'
|
||||
- compose:
|
||||
- type: string
|
||||
- default: 'RHEL-7.9-ZStream'
|
||||
- variables:
|
||||
- type: string
|
||||
- default: ''
|
||||
- update_pull_request_status:
|
||||
- type: string
|
||||
- default: 'true'
|
||||
-
|
||||
-jobs:
|
||||
- reusable_workflow_job:
|
||||
- name: Schedule regression tests on Testing Farm
|
||||
- runs-on: ubuntu-24.04
|
||||
- steps:
|
||||
- - name: Schedule regression testing for 7to8
|
||||
- id: run_test_7to8
|
||||
- uses: sclorg/testing-farm-as-github-action@v4.0.0
|
||||
- with:
|
||||
- # required
|
||||
- api_url: ${{ secrets.TF_ENDPOINT }}
|
||||
- api_key: ${{ secrets.TF_API_KEY }}
|
||||
- git_url: 'https://gitlab.cee.redhat.com/oamg/tmt-plans'
|
||||
- github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
- # optional
|
||||
- tf_scope: 'private'
|
||||
- create_issue_comment: 'true'
|
||||
- update_pull_request_status: ${{ inputs.update_pull_request_status }}
|
||||
- tmt_plan_regex: ${{ inputs.tmt_plan_regex }}
|
||||
- compose: ${{ inputs.compose }}
|
||||
- arch: ${{ inputs.arch }}
|
||||
- copr: ${{ inputs.copr }}
|
||||
- copr_artifacts: ${{ inputs.copr_artifacts }}
|
||||
- debug: ${{ secrets.ACTIONS_STEP_DEBUG }}
|
||||
- tmt_context: ${{ inputs.tmt_context }}
|
||||
- pull_request_status_name: ${{ inputs.pull_request_status_name }}
|
||||
- environment_settings: ${{ inputs.environment_settings }}
|
||||
- variables: ${{ inputs.variables }}
|
||||
diff --git a/.github/workflows/tmt-tests.yml b/.github/workflows/tmt-tests.yml
|
||||
index d047cb3..d4671c4 100644
|
||||
--- a/.github/workflows/tmt-tests.yml
|
||||
+++ b/.github/workflows/tmt-tests.yml
|
||||
@@ -10,65 +10,6 @@ jobs:
|
||||
uses: ./.github/workflows/reuse-copr-build.yml
|
||||
secrets: inherit
|
||||
|
||||
- call_workflow_tests_79to88_integration:
|
||||
- needs: call_workflow_copr_build
|
||||
- uses: ./.github/workflows/reuse-tests-7to8.yml
|
||||
- secrets: inherit
|
||||
- with:
|
||||
- copr_artifacts: ${{ needs.call_workflow_copr_build.outputs.artifacts }}
|
||||
- tmt_plan_regex: "^(?!.*upgrade_plugin)(?!.*tier[2-3].*)(?!.*rhsm)(?!.*c2r)(?!.*sap)(?!.*8to9)(?!.*max_sst)"
|
||||
- pull_request_status_name: "7.9to8.8"
|
||||
- variables: 'SOURCE_RELEASE=7.9;TARGET_RELEASE=8.8;LEAPPDATA_BRANCH=upstream'
|
||||
- if: |
|
||||
- github.event.issue.pull_request
|
||||
- && ! startsWith(github.event.comment.body, '/rerun-sst')
|
||||
- && contains(fromJson('["OWNER", "MEMBER", "COLLABORATOR"]'), github.event.comment.author_association)
|
||||
-
|
||||
- call_workflow_tests_79to86_integration:
|
||||
- needs: call_workflow_copr_build
|
||||
- uses: ./.github/workflows/reuse-tests-7to8.yml
|
||||
- secrets: inherit
|
||||
- with:
|
||||
- copr_artifacts: ${{ needs.call_workflow_copr_build.outputs.artifacts }}
|
||||
- tmt_plan_regex: "^(?!.*upgrade_plugin)(?!.*tier[2-3].*)(?!.*rhsm)(?!.*c2r)(?!.*sap)(?!.*8to9)(?!.*max_sst)"
|
||||
- variables: 'SOURCE_RELEASE=7.9;TARGET_RELEASE=8.6;LEAPPDATA_BRANCH=upstream'
|
||||
- pull_request_status_name: "7.9to8.6"
|
||||
- if: |
|
||||
- github.event.issue.pull_request
|
||||
- && ! startsWith(github.event.comment.body, '/rerun-sst')
|
||||
- && contains(fromJson('["OWNER", "MEMBER", "COLLABORATOR"]'), github.event.comment.author_association)
|
||||
-
|
||||
- call_workflow_tests_79to88_sst:
|
||||
- needs: call_workflow_copr_build
|
||||
- uses: ./.github/workflows/reuse-tests-7to8.yml
|
||||
- secrets: inherit
|
||||
- with:
|
||||
- copr_artifacts: ${{ needs.call_workflow_copr_build.outputs.artifacts }}
|
||||
- tmt_plan_regex: "^(?!.*tier[2-3].*)(.*max_sst.*)"
|
||||
- pull_request_status_name: "7.9to8.8-sst"
|
||||
- update_pull_request_status: 'false'
|
||||
- variables: 'SOURCE_RELEASE=7.9;TARGET_RELEASE=8.8;LEAPPDATA_BRANCH=upstream'
|
||||
- if: |
|
||||
- github.event.issue.pull_request
|
||||
- && startsWith(github.event.comment.body, '/rerun-sst')
|
||||
- && contains(fromJson('["OWNER", "MEMBER", "COLLABORATOR"]'), github.event.comment.author_association)
|
||||
-
|
||||
- call_workflow_tests_7to8_aws:
|
||||
- needs: call_workflow_copr_build
|
||||
- uses: ./.github/workflows/reuse-tests-7to8.yml
|
||||
- secrets: inherit
|
||||
- with:
|
||||
- copr_artifacts: ${{ needs.call_workflow_copr_build.outputs.artifacts }}
|
||||
- tmt_plan_regex: "^(?!.*upgrade_plugin)(?!.*tier[2-3].*)(?!.*rhsm)(?!.*c2r)(?!.*sap)(?!.*8to9)(.*e2e)"
|
||||
- compose: "RHEL-7.9-rhui"
|
||||
- environment_settings: '{"provisioning": {"post_install_script": "#!/bin/sh\nsudo sed -i s/.*ssh-rsa/ssh-rsa/ /root/.ssh/authorized_keys; echo 42; yum-config-manager --enable rhel-7-server-rhui-optional-rpms"}}'
|
||||
- pull_request_status_name: "7to8-aws-e2e"
|
||||
- variables: 'SOURCE_RELEASE=7.9;TARGET_RELEASE=8.6;RHUI=aws;LEAPPDATA_BRANCH=upstream'
|
||||
- if: |
|
||||
- github.event.issue.pull_request
|
||||
- && ! startsWith(github.event.comment.body, '/rerun-sst')
|
||||
- && contains(fromJson('["OWNER", "MEMBER", "COLLABORATOR"]'), github.event.comment.author_association)
|
||||
-
|
||||
call_workflow_tests_810to94_integration:
|
||||
needs: call_workflow_copr_build
|
||||
uses: ./.github/workflows/reuse-tests-8to9.yml
|
||||
diff --git a/.github/workflows/unit-tests.yml b/.github/workflows/unit-tests.yml
|
||||
index d994b27..2702e93 100644
|
||||
--- a/.github/workflows/unit-tests.yml
|
||||
+++ b/.github/workflows/unit-tests.yml
|
||||
@@ -33,12 +33,6 @@ jobs:
|
||||
- name: Run python linters with python 3.6 on el8
|
||||
python: python3.6
|
||||
container: ubi8-lint
|
||||
- - name: Run unit tests with python2.7 on el7
|
||||
- python: python2.7
|
||||
- container: ubi7
|
||||
- - name: Run python linters with python2.7 on el7
|
||||
- python: python2.7
|
||||
- container: ubi7-lint
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
--
|
||||
2.49.0
|
||||
|
||||
@ -0,0 +1,35 @@
|
||||
From 3981f12bd9c8d71539f2ccd8b1877d203a292efd Mon Sep 17 00:00:00 2001
|
||||
From: Michal Macura <mmacura@redhat.com>
|
||||
Date: Tue, 6 May 2025 17:26:30 +0200
|
||||
Subject: [PATCH 7/7] Update .packit.yaml to fix failing rhui job
|
||||
|
||||
This commit updates the tag and env for the sanity-810to94-aws job to
|
||||
make it run correctly.
|
||||
---
|
||||
.packit.yaml | 3 +--
|
||||
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||
|
||||
diff --git a/.packit.yaml b/.packit.yaml
|
||||
index 6f41db1..67e0b28 100644
|
||||
--- a/.packit.yaml
|
||||
+++ b/.packit.yaml
|
||||
@@ -199,7 +199,7 @@ jobs:
|
||||
tf_extra_params:
|
||||
test:
|
||||
tmt:
|
||||
- plan_filter: 'tag:8to9 & tag:rhui-tier[0] & enabled:true'
|
||||
+ plan_filter: 'tag:8to9 & tag:rhui-aws-tier0 & enabled:true'
|
||||
environments:
|
||||
- artifacts: *artifacts-for-rhel8
|
||||
- tmt:
|
||||
@@ -211,7 +211,6 @@ jobs:
|
||||
BusinessUnit: sst_upgrades@leapp_upstream_test
|
||||
env:
|
||||
<<: *env-810to94
|
||||
- RHUI_HYPERSCALER: aws
|
||||
|
||||
|
||||
# ###################################################################### #
|
||||
--
|
||||
2.49.0
|
||||
|
||||
@ -7,7 +7,7 @@
|
||||
# it. In case of upstream, dependencies are set differently, but YUM is not
|
||||
# capable enough to deal with them correctly all the time; we continue to use
|
||||
# simplified deps in RHEL to ensure that YUM can deal with it.
|
||||
%global framework_version 6.6
|
||||
%global framework_version 6.1
|
||||
|
||||
# IMPORTANT: everytime the requirements are changed, increment number by one
|
||||
# - same for Provides in deps subpackage
|
||||
@ -36,8 +36,8 @@
|
||||
%endif
|
||||
|
||||
Name: leapp
|
||||
Version: 0.21.0
|
||||
Release: 2%{?dist}.elevate.1
|
||||
Version: 0.19.0
|
||||
Release: 3%{?dist}
|
||||
Summary: OS & Application modernization framework
|
||||
|
||||
License: ASL 2.0
|
||||
@ -65,19 +65,14 @@ Requires: leapp-repository
|
||||
|
||||
# PATCHES HERE
|
||||
# Patch0001: filename.patch
|
||||
Patch0001: 0001-introduce-the-format_list-function.patch
|
||||
Patch0002: 0002-packit-remove-unsupported-upgrade-path-from-tests.patch
|
||||
Patch0003: 0003-packit-add-new-upgrade-paths-to-tests.patch
|
||||
Patch0004: 0004-chore-deps-update-actions-checkout-action-to-v6.patch
|
||||
Patch0005: 0005-chore-deps-update-actions-github-script-action-to-v8.patch
|
||||
Patch0006: 0006-chore-deps-update-peter-evans-create-or-update-comme.patch
|
||||
Patch0007: 0007-reporting-fix-incorrect-converting-of-list-based-com.patch
|
||||
Patch0008: 0008-fixup-reporting-fix-incorrect-converting-of-list-bas.patch
|
||||
Patch0009: 0009-python-test-deps-update-pytest-requirements.patch
|
||||
Patch0010: 0010-fix-reporting-use-single-quoting-when-converting-rem.patch
|
||||
Patch0011: 0011-Fix-exception-in-normalize_schemas-for-conflicting-a.patch
|
||||
Patch0012: 0012-Makefile-add-test_no_lint.patch
|
||||
|
||||
Patch0001: 0001-CI-packit-update-e2e-tests-to-reflect-current-IPU-pa.patch
|
||||
Patch0002: 0002-configs-recognize-only-the-.yaml-file-extension.patch
|
||||
Patch0003: 0003-Handle-case-when-db-directory-is-missing.patch
|
||||
Patch0004: 0004-Fix-CLI-allow-to-set-falsy-values-as-default.patch
|
||||
Patch0005: 0005-chore-deps-update-sclorg-testing-farm-as-github-acti.patch
|
||||
Patch0006: 0006-Remove-7to8-CI-tests.patch
|
||||
Patch0007: 0007-Update-.packit.yaml-to-fix-failing-rhui-job.patch
|
||||
|
||||
%description
|
||||
Leapp utility provides the possibility to use the Leapp framework via CLI.
|
||||
@ -174,6 +169,7 @@ Requires: findutils
|
||||
|
||||
# APPLY REGISTERED PATCHES HERE
|
||||
# %%patch -P 0001 -p1
|
||||
|
||||
%patch -P 0001 -p1
|
||||
%patch -P 0002 -p1
|
||||
%patch -P 0003 -p1
|
||||
@ -181,11 +177,8 @@ Requires: findutils
|
||||
%patch -P 0005 -p1
|
||||
%patch -P 0006 -p1
|
||||
%patch -P 0007 -p1
|
||||
%patch -P 0008 -p1
|
||||
%patch -P 0009 -p1
|
||||
%patch -P 0010 -p1
|
||||
%patch -P 0011 -p1
|
||||
%patch -P 0012 -p1
|
||||
|
||||
|
||||
##################################################
|
||||
# Build
|
||||
##################################################
|
||||
@ -269,28 +262,6 @@ install -m 0644 -p man/leapp.1 %{buildroot}%{_mandir}/man1/
|
||||
# no files here
|
||||
|
||||
%changelog
|
||||
* Tue Jun 30 2026 Yuriy Kohut <ykohut@almalinux.org> - 0.21.0-1.elevate.1
|
||||
- Bump leapp-framework to 6.6
|
||||
|
||||
* Fri Apr 17 2026 Matej Matuska <mmatuska@redhat.com> - 0.21.0-1
|
||||
- Bump leapp-framework to 6.5
|
||||
- Change how commands are converted for text based report from the list representation
|
||||
- Introduce the format_list function for unified presentation of lists in reports and logs
|
||||
- Resolves: RHEL-169278
|
||||
|
||||
* Tue Feb 10 2026 Matej Matuska <mmatuska@redhat.com> - 0.21.0
|
||||
- Rebase to version 0.21.0
|
||||
- Resolves: RHEL-128270
|
||||
|
||||
* Thu Nov 13 2025 Karolina Kula <kkula@redhat.com> - 0.20.0-2
|
||||
- Bump leapp-framework to 6.2
|
||||
- Add possibility to specify aliases for CLI option
|
||||
- Resolves: RHEL-128270
|
||||
|
||||
* Thu Aug 14 2025 Karolina Kula <kkula@redhat.com> - 0.20.0-1
|
||||
- Rebase to new upstream 0.20.0
|
||||
- Resolves: RHEL-67625
|
||||
|
||||
* Wed May 14 2025 Petr Stodulka <pstodulk@redhat.com> - 0.19.0-3
|
||||
- Rebuild
|
||||
|
||||
@ -1,7 +0,0 @@
|
||||
--- !Policy
|
||||
product_versions:
|
||||
- rhel-8
|
||||
decision_context: osci_compose_gate
|
||||
rules:
|
||||
- !PassingTestCaseRule {test_case_name: osci.brew-build.tier0.functional}
|
||||
|
||||
@ -1,53 +0,0 @@
|
||||
# These test plans were created manually based on information taken from
|
||||
# https://gitlab.cee.redhat.com/oamg/leapp-tests/-/blob/main/config.yaml. The tmt definitions can be simplified, once
|
||||
# https://github.com/teemtee/tmt/issues/1770 is implemented.
|
||||
|
||||
summary: Internal Tier0 tests
|
||||
|
||||
environment:
|
||||
SOURCE_RELEASE: '8.10'
|
||||
TARGET_RELEASE: '9.9'
|
||||
|
||||
context:
|
||||
distro: rhel-8.10
|
||||
distro_target: rhel-9.9
|
||||
|
||||
adjust:
|
||||
- enabled: false
|
||||
when: distro == centos-stream-8
|
||||
- environment+:
|
||||
INSTALL_LEAPP_FROM_COMPOSE: yes
|
||||
|
||||
/destructive:
|
||||
/TestBasic:
|
||||
plan:
|
||||
import:
|
||||
url: https://gitlab.cee.redhat.com/oamg/leapp-tests
|
||||
name: /plans/newstyle/upgrades/tests/destructive/test_basic.py::TestBasic$
|
||||
ref: next
|
||||
/TestSubsequentRebootAfterFailedUpgrade:
|
||||
plan:
|
||||
import:
|
||||
url: https://gitlab.cee.redhat.com/oamg/leapp-tests
|
||||
name: /plans/newstyle/upgrades/tests/destructive/test_subsequent_reboot_after_failed_upgrade.py::TestSubsequentRebootAfterFailedUpgrade
|
||||
ref: next
|
||||
/TestDevtmpfsInFstab:
|
||||
plan:
|
||||
import:
|
||||
url: https://gitlab.cee.redhat.com/oamg/leapp-tests
|
||||
name: /plans/newstyle/upgrades/tests/destructive/test_devtmpfs_in_fstab.py::TestDevtmpfsInFstab
|
||||
ref: next
|
||||
/TestBasicRhsm:
|
||||
plan:
|
||||
import:
|
||||
url: https://gitlab.cee.redhat.com/oamg/leapp-tests
|
||||
name: /plans/newstyle/upgrades/tests/destructive/test_basic.py::TestBasicRhsm$
|
||||
ref: next
|
||||
|
||||
/nondestructive:
|
||||
/tier0only:
|
||||
plan:
|
||||
import:
|
||||
url: https://gitlab.cee.redhat.com/oamg/leapp-tests
|
||||
name: /plans/newstyle/nondestructive/tier0only
|
||||
ref: next
|
||||
Loading…
Reference in New Issue
Block a user