Added CI to compile more drivers for the changed BSP

This commit is contained in:
dejavudwh 2023-06-29 10:04:46 +08:00 committed by Man, Jianting (Meco)
parent 33f5de4411
commit 4cbc1893bd
2 changed files with 172 additions and 0 deletions

View File

@ -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

View File

@ -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)