• 【github】【action】如何给软件包添加CI集成


    【github】【action】如何给软件包添加CI集成

    简介

    github有自己的CI集成工具 action, 很少有小伙伴关注到,如果你有自己的软件包,想要对其进行维护的话,添加CI集成能够方便你快速验证你的代码是否在RTT上可以顺利编译。

    下面的链接是github action的帮助文档:

    https://docs.github.com/cn/actions

    本文会大概指导一下大家,如何在自己软件包上添加CI集成工具,由于每个软件包的配置都不相同,要根据下面的步骤,灵活的配置你自己的软件包。

    添加CI 大概有以下作用:

    • 可以验证你的软件包在不同的bsp下面的编译情况,可以告诉用户bsp是可以用你的软件包的。
    • 在RTTHREAD升级的时候,可以通过触发CI来告诉作者,该软件包编译是否有问题。
    • 可以学习如何自行部署action和调试action。
    • 也可以间接的告诉作者如何使用你的软件包

    背景

    在我们PR的时候,经常会遇到CI不通过的情况,其实是RT-THREAD仓库里面的action 下面链接的文件起作用

    https://github.com/RT-Thread/rt-thread/blob/master/.github/workflows/action.yml

    受这个启发,我们把它整合到我们自己的软件包仓库下面。下面以我的仓库的软件包举例

    https://github.com/supperthomas/RTTHREAD_SEGGER_TOOL

    欢迎star

    步骤

    第一步 下载软件包

    先把你的软件包下载下来

    git clone git@github.com:supperthomas/RTTHREAD_SEGGER_TOOL.git
    

    然后git branch 看下当前的分支是main 还是master 这个后面需要用到,我这里是main

    然后新建一个分支,自己起任意名字,因为我们要发起PR到自己仓库,所以不能像以前一样直接PR到main分支

    git checkout -b ci_test
    

    第二步 添加action.yml

    这里给大家提供一个模板,可以先尝试添加如下的模板在仓库的.github 文件夹下面新建一个workflows文件夹,下面添加action.yml

    name: SEGGER_RTT
    
    # 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:
          - main
        paths-ignore:
          - documentation/**
          - '**/README.md'
          - '**/README_zh.md'
      pull_request:
        branches:
          - main
        paths-ignore:
          - documentation/**
          - '**/README.md'
          - '**/README_zh.md'
    
    jobs:
      build:
        runs-on: ubuntu-latest
        name: ${{ matrix.legs.RTT_BSP }}
        strategy:
          fail-fast: false
          matrix:
           legs:
             - {RTT_BSP: "qemu-vexpress-a9", RTT_TOOL_CHAIN: "sourcery-arm"}
    
             
        steps:
          - uses: actions/checkout@v3
            with:
              repository: RT-Thread/rt-thread
          - 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 libsdl-dev libncurses5-dev scons
              sudo python -m pip install --upgrade pip -qq
              pip install requests -qq
              git config --global http.postBuffer 524288000
              python -c "import tools.menuconfig; tools.menuconfig.touch_env()"
              echo "RTT_ROOT=${{ github.workspace }}" >> $GITHUB_ENV
              echo "RTT_CC=gcc" >> $GITHUB_ENV
    
          - name: Install Arm ToolChains
            if: ${{ matrix.legs.RTT_TOOL_CHAIN == 'sourcery-arm' && 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
            env:
              RTT_BSP: ${{ matrix.legs.RTT_BSP }}
              RTT_TOOL_CHAIN: ${{ matrix.legs.RTT_TOOL_CHAIN }}
            run: |
              source ~/.env/env.sh
              sed -i "s/# CONFIG_PKG_USING_SEGGER_RTT is not set/CONFIG_PKG_USING_SEGGER_RTT=y/g" bsp/$RTT_BSP/.config
              scons --pyconfig-silent -C bsp/$RTT_BSP
              cat bsp/$RTT_BSP/.config
              pushd bsp/$RTT_BSP && pkgs --update && popd
              scons -C bsp/$RTT_BSP
    
    

    这个模板只保留了qemu,第一次先测一下qemu,后面再添加其他的action,可以直接参考rt-thread里面的放置。

    新建完了之后需要根据你自己的软件包做如下修改:

    修改一:branch要对应main或者master

    在这里插入图片描述

    修改二: .config要做对应修改

    .config需要做对应的修改,首先要知道你的软件包要打开哪些配置,首先整个软件包有个大的宏,例如我的软件包就是CONFIG_PKG_USING_SEGGER_RTT 打开.config可以找到这个宏

    sed命令替换.config中的配置

    # CONFIG_PKG_USING_SEGGER_RTT is not set 替换为CONFIG_PKG_USING_SEGGER_RTT=y

    sed -i "s/# CONFIG_PKG_USING_SEGGER_RTT is not set/CONFIG_PKG_USING_SEGGER_RTT=y/g" bsp/$RTT_BSP/.config
    

    这个你可以通过menuconfig配置之后,查看git diff 查看。

    这个修改之后就可以使能软件包了

    后面那句话

    scons --pyconfig-silent -C bsp/$RTT_BSP
    

    相当于执行了menuconfig。

    在这里插入图片描述

    如果要修改其他配置的话,请在scons --pyconfig-silent -C bsp/$RTT_BSP 这个语句后面执行,因为有些配置只有在使能软件包之后才会有.config

    最后一定要记得执行scons --pyconfig-silent -C bsp/$RTT_BSP 相当于保存配置。

    到这里action.yml 已经修改好了,

    第三步 PR测试

    接下来就要提交你的PR了

    git push origin ci_test
    

    提交分支之后,点击PR按钮

    执行PR,就可以看到对应的CI 开始跑了。

    这个时候如果出现问题,需要点击下图中的raw log 查看

    在这里插入图片描述

    这里我通过命令cat bsp/$RTT_BSP/.config

    将对应的.config 打印出来 你只要检查下.config内容和你用menuconfig内容有什么差异即可。

    第四步 添加其他bsp

    qemu添加ok之后,你就可以根据rt-thread中的action

    https://github.com/RT-Thread/rt-thread/blob/master/.github/workflows/action.yml

    中的bsp列表,添加所有的bsp了。

    可能会遇到的问题,需要挑选对应的bsp:

    • 可能有些bsp 的芯片ROM太小了, 你的软件包编译之后 代码越界了。
    • 可能有些bsp的架构不适合你的软件包,比如我的SEGGER_RTT 就是只需要适配ARM相关的bsp即可。

    欢迎大家提建议或者尝试在自己的软件包中添加CI集成。

  • 相关阅读:
    【js】js中深拷贝与浅拷贝:
    [极客大挑战 2019]Upload
    vue3 依赖注入provide/inject
    JDBC 简介
    1.1 熟悉x64dbg调试器
    k8s deployment服务回滚,设置节点为不可调度
    AIoT通用组件服务攻略之快速定位http数据推送失败
    Lab_1:练习1——理解通过make生成执行文件的过程
    C++和QML混合编程_C++端后台多线程处理
    U9二次开发之补丁制作
  • 原文地址:https://blog.csdn.net/lt6210925/article/details/126962923