@@ -236,7 +236,7 @@ for param in $*; do
manage_cmd="$manage_cmd $param"
else
echo "$HELP"
- exit 1
+ return 1
fi
;;
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
#
-# Copyright (C) 2025 Linux Foundation
+# Copyright (C) 2026 Linux Foundation
# SPDX-License-Identifier: GPL-2.0-only
#
@@ -10,29 +10,52 @@ import urllib.request
import gen_fixtures as fixtures
RELEASE_URL = https://dashboard.yoctoproject.org/releases.json
+LAYER_INDEX_URL = https://layers.openembedded.org/layerindex/api/branches/
+
+# Load a JSON file via REST
+def fetch_json(url):
+ with urllib.request.urlopen(url) as response:
+ if response.getcode() == 200:
+ data = response.read().decode("utf-8")
+ return(json.loads(data))
+ else:
+ print("Couldn't access %s: %s" % (url, reponse.getcode()))
+ exit(1)
+
+# Grab the existing release branches in the Layer Index
+branches = fetch_json(LAYER_INDEX_URL)
+index_branches = [
+ e["name"].lower() for e in branches
+]
-with urllib.request.urlopen(RELEASE_URL) as response:
- if response.getcode() == 200:
- data = response.read().decode("utf-8")
- releases = json.loads(data)
+# Grab the recent release branches and add master, so we can ignore old branches
+releases = fetch_json(RELEASE_URL)
+active_releases = []
+active_but_not_index = []
+for e in releases:
+ if e["series"] != "current":
+ continue
+ release = e["release_codename"].lower()
+ if not release in index_branches:
+ active_but_not_index.append(release)
else:
- print("Couldn't access %s: %s" % (RELEASE_URL, reponse.getcode()))
- exit(1)
-
-
-# grab the recent release branches and add master, so we can ignore old branches
-active_releases = [
- e["release_codename"].lower() for e in releases if e["series"] == "current"
-]
+ active_releases.append(release)
active_releases.append("master")
active_releases.append("head")
+active_releases.sort()
+
+if active_but_not_index:
+ print(f"Note: Active releases that are not yet in the Layer Index: {active_but_not_index}" )
+# Get the list of releases instantiated in the Toaster fixtures
fixtures_releases = [x[0].lower() for x in fixtures.current_releases]
+fixtures_releases.sort()
+# Report the resulting status
if set(active_releases) != set(fixtures_releases):
- print("WARNING: Active releases don't match toaster configured releases, the difference is: %s" % set(active_releases).difference(set(fixtures_releases)))
- print("Active releases: %s" % sorted(active_releases))
- print("Toaster configured releases: %s" % sorted(fixtures_releases))
+ print(f"WARNING: Active releases don't match toaster configured releases, the difference is: {set(active_releases).difference(set(fixtures_releases))}")
+ print(f"Active releases: {sorted(active_releases)}")
+ print(f"Toaster configured releases: {sorted(fixtures_releases)}")
else:
print("Success, configuration matches")
@@ -4,7 +4,7 @@
#
# Generate Toaster Fixtures for 'poky.xml' and 'oe-core.xml'
#
-# Copyright (C) 2022 Wind River Systems
+# Copyright (C) 2026 Wind River Systems
# SPDX-License-Identifier: GPL-2.0-only
#
# Edit the 'current_releases' table for each new release cycle
@@ -413,6 +413,68 @@ def generate_oe_core():
print_str(epilog_template,fd)
fd.close()
+#################################
+# Update test project list
+#
+
+def generate_test():
+ this_path = os.path.dirname(os.path.abspath(__file__))
+ test_script = os.path.join(this_path,"../../tests/functional/test_create_new_project.py")
+
+ is_copy = True
+ out_lines = ""
+ with open(test_script, 'r') as file_fd:
+ lines = file_fd.readlines()
+ for line in lines:
+ if 'test_create_new_project_without_name' in line:
+ is_copy = True
+ out_lines += '\n'
+ if is_copy:
+ out_lines += line
+ if line.startswith('class TestCreateNewProject'):
+ is_copy = False
+ # Insert new project entries
+
+ for id,release in enumerate(current_releases):
+ release_id = id + 1
+ release_name = release[0]
+ release_merge = 'True'
+ release_version = ''
+ if 'Master' == release_name:
+ release_name = 'Master'
+ release_title = 'Yocto Project master'
+ release_merge = 'False'
+ elif 'HEAD' == release_name:
+ release_name = 'Local'
+ release_title = 'Local Yocto Project'
+ else:
+ release_title = f'Yocto Project {release[1]} "{release_name}"'
+ release_version = f'{release[1]} '
+ # Insert project
+ test_release_def = f'''
+ def test_create_new_project_{release_name.lower()}(self):
+ """ Test create new project using:
+ - Project Name: Any string
+ - Release: Yocto Project {release_version}"{release_name}" (option value: {release_id})
+ - Merge Toaster settings: {release_merge}
+ """
+ release = '{release_id}'
+ release_title = '{release_title}'
+ project_name = 'project{release_name.lower()}'
+ self.create_new_project(
+ project_name,
+ release,
+ release_title,
+ {release_merge},
+ )
+'''
+ out_lines += test_release_def
+
+ with open('test_create_new_project.py', 'w') as file_fd:
+ file_fd.write(out_lines)
+ print(f"Output: 'test_create_new_project.py'")
+ os.system(f"mv -f test_create_new_project.py {test_script}")
+
#################################
# Help
#
@@ -431,8 +493,9 @@ def main(argv):
global verbose
parser = argparse.ArgumentParser(description='gen_fixtures.py: table generate the fixture files')
- parser.add_argument('--poky', '-p', action='store_const', const='poky', dest='command', help='Generate the poky.xml file')
- parser.add_argument('--oe-core', '-o', action='store_const', const='oe_core', dest='command', help='Generate the oe-core.xml file')
+ parser.add_argument('--poky', '-p', action='store_const', const='poky', dest='command', help="Generate the 'poky.xml' file")
+ parser.add_argument('--oe-core', '-o', action='store_const', const='oe_core', dest='command', help="Generate the 'oe-core.xml' file")
+ parser.add_argument('--test', '-t', action='store_const', const='test', dest='command', help="Update the 'test_create_new_project.py' file")
parser.add_argument('--all', '-a', action='store_const', const='all', dest='command', help='Generate all fixture files')
parser.add_argument('--list', '-l', action='store_const', const='list', dest='command', help='List the release table')
parser.add_argument('--verbose', '-v', action='store_true', dest='verbose', help='Enable verbose debugging output')
@@ -443,11 +506,12 @@ def main(argv):
generate_poky()
elif 'oe_core' == args.command:
generate_oe_core()
+ elif 'test' == args.command:
+ generate_test()
elif 'all' == args.command:
generate_poky()
generate_oe_core()
- elif 'all' == args.command:
- list_releases()
+ generate_test()
elif 'list' == args.command:
list_releases()
@@ -15,31 +15,31 @@ from selenium.webdriver.common.by import By
class TestCreateNewProject(SeleniumFunctionalTestCase):
- def test_create_new_project_master(self):
+ def test_create_new_project_wrynose(self):
""" Test create new project using:
- Project Name: Any string
- - Release: Yocto Project master (option value: 3)
- - Merge Toaster settings: False
+ - Release: Yocto Project 6.0 "Wrynose" (option value: 1)
+ - Merge Toaster settings: True
"""
- release = '3'
- release_title = 'Yocto Project master'
- project_name = 'projectmaster'
+ release = '1'
+ release_title = 'Yocto Project 6.0 "Wrynose"'
+ project_name = 'projectwrynose'
self.create_new_project(
project_name,
release,
release_title,
- False,
+ True,
)
- def test_create_new_project_wrynose(self):
+ def test_create_new_project_local(self):
""" Test create new project using:
- Project Name: Any string
- - Release: Yocto Project 6.0 "Wrynose" (option value: 1)
+ - Release: Yocto Project "Local" (option value: 2)
- Merge Toaster settings: True
"""
- release = '1'
- release_title = 'Yocto Project 6.0 "Wrynose"'
- project_name = 'projectwrynose'
+ release = '2'
+ release_title = 'Local Yocto Project'
+ project_name = 'projectlocal'
self.create_new_project(
project_name,
release,
@@ -47,32 +47,31 @@ class TestCreateNewProject(SeleniumFunctionalTestCase):
True,
)
-
- def test_create_new_project_scarthgap(self):
+ def test_create_new_project_master(self):
""" Test create new project using:
- Project Name: Any string
- - Release: Yocto Project 5.0 "Scarthgap" (option value: 4)
- - Merge Toaster settings: True
+ - Release: Yocto Project "Master" (option value: 3)
+ - Merge Toaster settings: False
"""
- release = '4'
- release_title = 'Yocto Project 5.0 "Scarthgap"'
- project_name = 'projectscarthgap'
+ release = '3'
+ release_title = 'Yocto Project master'
+ project_name = 'projectmaster'
self.create_new_project(
project_name,
release,
release_title,
- True,
+ False,
)
- def test_create_new_project_local(self):
+ def test_create_new_project_scarthgap(self):
""" Test create new project using:
- Project Name: Any string
- - Release: Local Yocto Project (option value: 2)
+ - Release: Yocto Project 5.0 "Scarthgap" (option value: 4)
- Merge Toaster settings: True
"""
- release = '2'
- release_title = 'Local Yocto Project'
- project_name = 'projectlocal'
+ release = '4'
+ release_title = 'Yocto Project 5.0 "Scarthgap"'
+ project_name = 'projectscarthgap'
self.create_new_project(
project_name,
release,