58 lines
1.7 KiB
Python
58 lines
1.7 KiB
Python
import fnmatch
|
|
import json
|
|
import os
|
|
import sys
|
|
|
|
DEVICES_DIRECTORY = os.path.join(os.path.dirname(__file__), "..", "Devices")
|
|
|
|
IGNORE_LIST = {
|
|
"simulator",
|
|
"generic-*",
|
|
}
|
|
|
|
|
|
def is_ignored(device_id):
|
|
return any(fnmatch.fnmatch(device_id, pattern) for pattern in IGNORE_LIST)
|
|
|
|
def read_properties_file(path):
|
|
properties = {}
|
|
with open(path, "r") as file:
|
|
for line in file:
|
|
stripped = line.strip()
|
|
if not stripped or stripped.startswith("#"):
|
|
continue
|
|
key, sep, value = line.partition("=")
|
|
if not sep:
|
|
continue
|
|
properties[key.strip()] = value.strip()
|
|
return properties
|
|
|
|
def get_board_entries():
|
|
boards = []
|
|
for device_id in sorted(os.listdir(DEVICES_DIRECTORY)):
|
|
if is_ignored(device_id):
|
|
continue
|
|
device_dir = os.path.join(DEVICES_DIRECTORY, device_id)
|
|
properties_path = os.path.join(device_dir, "device.properties")
|
|
if not os.path.isdir(device_dir) or not os.path.isfile(properties_path):
|
|
continue
|
|
properties = read_properties_file(properties_path)
|
|
target = properties.get("hardware.target")
|
|
if not target:
|
|
sys.exit(f"ERROR: {properties_path} has no hardware.target property")
|
|
boards.append({"id": device_id, "arch": target.lower()})
|
|
return boards
|
|
|
|
def main():
|
|
matrix_json = json.dumps({"board": get_board_entries()})
|
|
|
|
github_output = os.environ.get("GITHUB_OUTPUT")
|
|
if github_output:
|
|
with open(github_output, "a") as file:
|
|
file.write(f"matrix={matrix_json}\n")
|
|
else:
|
|
print(matrix_json)
|
|
|
|
if __name__ == "__main__":
|
|
main()
|