Skip to content

kernelci: kbuild: transition to available state when complete #2882

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
May 28, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion kernelci/api/helper.py
Original file line number Diff line number Diff line change
Expand Up @@ -551,9 +551,12 @@ def submit_results(self, results, root):
root_node = merge(root_from_db, root)
root_node = root.copy()
root_node['result'] = results['node']['result']
root_node['state'] = results['node'].get('state', 'done')
root_node['artifacts'].update(results['node']['artifacts'])
root_node['data'].update(results['node'].get('data', {}))
root_node['processed_by_kcidb_bridge'] = False
if 'holdoff' in results['node']:
root_node['holdoff'] = results['node']['holdoff']
if root_node['result'] != 'incomplete':
data = root_node.get('data', {})
if data.get('error_code') == 'node_timeout':
Expand All @@ -577,7 +580,6 @@ def submit_results(self, results, root):
'runtime': root['data'].get('runtime'),
},
'group': root['name'],
'state': 'done',
'processed_by_kcidb_bridge': False,
}
data = self._prepare_results(root_results, parent, base)
Expand Down
9 changes: 8 additions & 1 deletion kernelci/kbuild.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# SPDX-License-Identifier: LGPL-2.1-or-later

Check warning on line 1 in kernelci/kbuild.py

View workflow job for this annotation

GitHub Actions / Lint

Too many lines in module (1121/1000)
#
# Copyright (C) 2023 Collabora Limited
# Author: Denys Fedoryshchenko <[email protected]>
Expand All @@ -24,6 +24,7 @@
- kselftest: false - do not build kselftest
"""

from datetime import datetime, timedelta
import os
import sys
import re
Expand All @@ -40,16 +41,16 @@


CIP_CONFIG_URL = \
"https://gitlab.com/cip-project/cip-kernel/cip-kernel-config/-/raw/master/{branch}/{config}" # noqa

Check warning on line 44 in kernelci/kbuild.py

View workflow job for this annotation

GitHub Actions / Lint

Line too long (104/100)
CROS_CONFIG_URL = \
"https://chromium.googlesource.com/chromiumos/third_party/kernel/+archive/refs/heads/{branch}/chromeos/config.tar.gz" # noqa

Check warning on line 46 in kernelci/kbuild.py

View workflow job for this annotation

GitHub Actions / Lint

Line too long (129/100)
LEGACY_CONFIG = [
'config/core/build-configs.yaml',
'/etc/kernelci/core/build-configs.yaml',
]
FW_GIT = "https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git" # noqa

# TODO: find a way to automatically fetch this information

Check warning on line 53 in kernelci/kbuild.py

View workflow job for this annotation

GitHub Actions / Lint

TODO: find a way to automatically fetch this information
LATEST_LTS_MAJOR = 6
LATEST_LTS_MINOR = 6

Expand Down Expand Up @@ -112,13 +113,13 @@
except requests.exceptions.RequestException as e:
print(f"[_download_file_inner] Error: {e}")
return False
except requests.exceptions.Timeout as e:

Check failure on line 116 in kernelci/kbuild.py

View workflow job for this annotation

GitHub Actions / Lint

Bad except clauses order (RequestException is an ancestor class of Timeout)
print(f"[_download_file_inner] Timeout: {e}")
return False
except requests.exceptions.ConnectionError as e:

Check failure on line 119 in kernelci/kbuild.py

View workflow job for this annotation

GitHub Actions / Lint

Bad except clauses order (RequestException is an ancestor class of ConnectionError)
print(f"[_download_file_inner] Connection error: {e}")
return False
except Exception as e:

Check warning on line 122 in kernelci/kbuild.py

View workflow job for this annotation

GitHub Actions / Lint

Catching too general exception Exception
print(f"[_download_file_inner] Exception: {e}")
return False
if r.status_code == 200:
Expand Down Expand Up @@ -570,7 +571,7 @@
elif fragment.startswith("CONFIG_"):
content = fragment + '\n'
else:
# TODO: implement 'path' option properly

Check warning on line 574 in kernelci/kbuild.py

View workflow job for this annotation

GitHub Actions / Lint

TODO: implement 'path' option properly
content = self.add_legacy_fragment(fragment)

fragfile = os.path.join(self._fragments_dir, f"{num}.config")
Expand Down Expand Up @@ -620,8 +621,8 @@
for i in range(0, fragnum):
self.addcmd("./scripts/kconfig/merge_config.sh" +
f" -m .config {self._fragments_dir}/{i}.config")
# TODO: olddefconfig should be optional/configurable

Check warning on line 624 in kernelci/kbuild.py

View workflow job for this annotation

GitHub Actions / Lint

TODO: olddefconfig should be optional/configurable
# TODO: log all warnings/errors of olddefconfig to separate file

Check warning on line 625 in kernelci/kbuild.py

View workflow job for this annotation

GitHub Actions / Lint

TODO: log all warnings/errors of olddefconfig to separate file
self.addcmd("make olddefconfig")
self.addcmd(f"cp .config {self._af_dir}/")
self.addcmd("cd ..")
Expand All @@ -634,7 +635,7 @@
fragnum = self._parse_fragments(firmware=True)
self._merge_frags(fragnum)
if not self._dtbs_check:
# TODO: verify if CONFIG_EXTRA_FIRMWARE have any files

Check warning on line 638 in kernelci/kbuild.py

View workflow job for this annotation

GitHub Actions / Lint

TODO: verify if CONFIG_EXTRA_FIRMWARE have any files
# We can check that if fragments have CONFIG_EXTRA_FIRMWARE
self._fetch_firmware()
self._build_kernel()
Expand Down Expand Up @@ -890,7 +891,7 @@
'''
Upload artifacts to storage
'''
# TODO: Upload not using upload_single, but upload as multiple files

Check warning on line 894 in kernelci/kbuild.py

View workflow job for this annotation

GitHub Actions / Lint

TODO: Upload not using upload_single, but upload as multiple files
print("[_upload_artifacts] Uploading artifacts to storage")
node_af = {}
storage = self._get_storage()
Expand Down Expand Up @@ -978,7 +979,7 @@
api.node.update(node)
except requests.exceptions.HTTPError as err:
err_msg = json.loads(err.response.content).get("detail", [])
self.log.error(err_msg)

Check failure on line 982 in kernelci/kbuild.py

View workflow job for this annotation

GitHub Actions / Lint

Instance of 'KBuild' has no 'log' member
return

def submit(self, retcode, dry_run=False):
Expand Down Expand Up @@ -1058,12 +1059,18 @@
kselftest_result = 'pass'
break

if job_result == 'pass':
job_state = 'available'
else:
job_state = 'done'

results = {
'node': {
'name': self._apijobname,
'result': job_result,
'state': 'done',
'state': job_state,
'artifacts': af_uri,
'holdoff': str(datetime.utcnow() + timedelta(minutes=10)),
},
'child_nodes': []
}
Expand Down