summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordejavudwh <[email protected]>2023-06-29 10:04:46 +0800
committerMan, Jianting (Meco) <[email protected]>2023-06-28 22:07:02 -0400
commit4cbc1893bd1f5e19a09fde573c4d1f46c8e5d561 (patch)
tree1dc03dd0772fec18f1c1e2ac8d060edea4555e7e
parent33f5de4411b087c542ebbb61194122e5a77844c6 (diff)
Added CI to compile more drivers for the changed BSP
-rw-r--r--.github/workflows/compile_bsp_with_drivers.yml74
-rw-r--r--tools/ci/compile_bsp_with_drivers.py98
2 files changed, 172 insertions, 0 deletions
diff --git a/.github/workflows/compile_bsp_with_drivers.yml b/.github/workflows/compile_bsp_with_drivers.yml
new file mode 100644
index 0000000000..b5810b15d0
--- /dev/null
+++ b/.github/workflows/compile_bsp_with_drivers.yml
@@ -0,0 +1,74 @@
+#
+# Copyright (c) 2006-2023, RT-Thread Development Team
+#
+# SPDX-License-Identifier: Apache-2.0
+#
+# Change Logs:
+# Date Author Notes
+# 2023-06-27 dejavudwh the first version
+#
+
+name: BSP compilation with more drivers
+
+# Controls when the action will run. Triggers the workflow on push or pull request
+# events but only for the master branch
+on:
+ # Runs at 16:00 UTC (BeiJing 00:00) on the 1st of every month
+ schedule:
+ - cron: '0 16 1 * *'
+ push:
+ branches:
+ - master
+ paths-ignore:
+ - documentation/**
+ - '**/README.md'
+ - '**/README_zh.md'
+ pull_request:
+ branches:
+ - master
+ paths-ignore:
+ - documentation/**
+ - '**/README.md'
+ - '**/README_zh.md'
+
+permissions:
+ contents: read # to fetch code (actions/checkout)
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ name: BSP Compilation with More Drivers
+
+ steps:
+ - uses: actions/checkout@v3
+ - name: Set up Python
+ uses: actions/setup-python@v3
+ with:
+ python-version: 3.8
+
+ - name: Install Tools
+ shell: bash
+ run: |
+ sudo apt-get update
+ sudo apt-get -qq install gcc-multilib libncurses5 libncurses5-dev libncursesw5-dev scons
+ sudo python -m pip install --upgrade pip -qq
+ git config --global http.postBuffer 524288000
+ git remote -v
+ git fetch origin
+ python -c "import tools.menuconfig; tools.menuconfig.touch_env()"
+
+ - name: Install Arm ToolChains
+ if: ${{ success() }}
+ shell: bash
+ run: |
+ wget -q https://github.com/RT-Thread/toolchains-ci/releases/download/v1.3/gcc-arm-none-eabi-10-2020-q4-major-x86_64-linux.tar.bz2
+ sudo tar xjf gcc-arm-none-eabi-10-2020-q4-major-x86_64-linux.tar.bz2 -C /opt
+ /opt/gcc-arm-none-eabi-10-2020-q4-major/bin/arm-none-eabi-gcc --version
+ echo "RTT_EXEC_PATH=/opt/gcc-arm-none-eabi-10-2020-q4-major/bin" >> $GITHUB_ENV
+
+ - name: Bsp Scons Compile
+ if: ${{ success() }}
+ shell: bash
+ run: |
+ source ~/.env/env.sh
+ python tools/ci/compile_bsp_with_drivers.py
diff --git a/tools/ci/compile_bsp_with_drivers.py b/tools/ci/compile_bsp_with_drivers.py
new file mode 100644
index 0000000000..827eb952cb
--- /dev/null
+++ b/tools/ci/compile_bsp_with_drivers.py
@@ -0,0 +1,98 @@
+#
+# Copyright (c) 2006-2023, RT-Thread Development Team
+#
+# SPDX-License-Identifier: Apache-2.0
+#
+# Change Logs:
+# Date Author Notes
+# 2023-06-27 dejavudwh the first version
+#
+
+import subprocess
+import logging
+import os
+
+CONFIG_BSP_USING_X = ["CONFIG_BSP_USING_UART", "CONFIG_BSP_USING_I2C", "CONFIG_BSP_USING_SPI", "CONFIG_BSP_USING_ADC", "CONFIG_BSP_USING_DAC"]
+
+def init_logger():
+ log_format = "[%(filename)s %(lineno)d %(levelname)s] %(message)s "
+ date_format = '%Y-%m-%d %H:%M:%S %a '
+ logging.basicConfig(level=logging.INFO,
+ format=log_format,
+ datefmt=date_format,
+ )
+
+def diff():
+ result = subprocess.run(['git', 'diff', '--name-only', 'HEAD', 'origin/master', '--diff-filter=ACMR', '--no-renames', '--full-index'], stdout = subprocess.PIPE)
+ file_list = result.stdout.decode().strip().split('\n')
+ logging.info(file_list)
+ bsp_paths = set()
+ for file in file_list:
+ if "bsp/" in file:
+ logging.info("Modifed file: {}".format(file))
+ bsp_paths.add(file)
+
+ dirs = set()
+ for dir in bsp_paths:
+ dir = os.path.dirname(dir)
+ while "bsp/" in dir:
+ files = os.listdir(dir)
+ if ".config" in files and "rt-thread.elf" not in files and not dir.endswith("bsp"):
+ logging.info("Found bsp path: {}".format(dir))
+ dirs.add(dir)
+ break
+ new_dir = os.path.dirname(dir)
+ dir = new_dir
+
+ return dirs
+
+def check_config_in_line(line):
+ for config in CONFIG_BSP_USING_X:
+ if config in line and '#' in line:
+ logging.info("Found in {}".format(line))
+ return config
+
+ return ""
+
+def check_config_in_file(file_path):
+ configs = set()
+ found = False
+ try:
+ with open(file_path, 'r') as file:
+ for line in file:
+ line.strip()
+ if found:
+ res = check_config_in_line(line)
+ if res:
+ configs.add(res)
+ elif "On-chip Peripheral Drivers" in line:
+ logging.info("Found On-chip Peripheral Drivers")
+ found = True
+ except FileNotFoundError:
+ logging.error("The .config file does not exist for this BSP, please recheck the file directory!")
+
+ return configs
+
+def modify_config(file_path, configs):
+ with open(file_path + "/rtconfig.h", 'a') as file:
+ for item in configs:
+ define1 = item.replace("CONFIG_BSP", "BSP")
+ define2 = item.replace("CONFIG_BSP", "RT")
+ file.write("#define " + define1 + "\n")
+ file.write("#define " + define2 + "\n")
+
+def recompile_bsp(dir):
+ logging.info("recomplie bsp: {}".format(dir))
+ os.system("scons -C " + dir)
+
+if __name__ == '__main__':
+ init_logger()
+ recompile_bsp_dirs = diff()
+ for dir in recompile_bsp_dirs:
+ dot_config_path = dir + "/" + ".config"
+ configs = check_config_in_file(dot_config_path)
+ logging.info("add config:")
+ logging.info(configs)
+ logging.info("Add configurations and recompile!")
+ modify_config(dir, configs)
+ recompile_bsp(dir) \ No newline at end of file