欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

pkgs-test工具介紹及其使用方法

冬至子 ? 來源:vacabun ? 作者:vacabun ? 2023-07-28 15:56 ? 次閱讀

背景

目前社區(qū)軟件包存在大量編譯問題:

版本迭代造成的編譯問題(內(nèi)核文件改動后,軟件包沒有去做版本控制)
架構(gòu)沖突以及 bsp 依賴問題(某些軟件包只在特定的架構(gòu)或 bsp 中可用)
針對上述的問題,誕生了 pkgs-test 工具,主要用于暴露出社區(qū)軟件包的相關(guān)編譯問題。

使用場景

本地使用

對特定的軟件包,在一些指定的bsp、rt-thread版本上進(jìn)行測試。
指定某一個特定的版本或所有版本。
指定的軟件包集合。
作為Github Action使用,測試軟件包是否支持一些rtt版本和bsp。

軟件包開發(fā)者

軟件包測試

更新軟件包的代碼之后,自動對軟件包進(jìn)行測試。

rt-thread的master測試

定時對軟件包進(jìn)行測試,檢查是否支持rt-thread的master版本。

rt-thread社區(qū)維護(hù)人員

所有軟件包測試

定時對全部軟件包在master 分支或指定的一些版本上進(jìn)行測試,并發(fā)布測試結(jié)果到github pages。

軟件包索引更新測試

軟件包索引發(fā)生改動時,對改動的部分軟件包進(jìn)行測試,在github pages上面更新這部分測試結(jié)果。

rt-thread版本發(fā)布測試

rt-thread版本發(fā)布后對全部的軟件包進(jìn)行測試。

精品軟件包集合測試(TODO)

對一些制定的精品軟件包集合進(jìn)行測試,比如當(dāng)rt-thread的master分支改動時,測試這些軟件包。

pkgs-test的class
pkgs-test工具內(nèi)部一共有6個類。

?PackagesIndex
從軟件包索引讀取軟件包信息,保存到一個字典中。
根據(jù)運(yùn)行時輸入的參數(shù)來選擇需要測試的軟件包列表。
Config
根據(jù)配置文件下載需要的資源rt-thread、toolchains。
下載env工具和軟件包索引。
根據(jù)運(yùn)行時輸入的參數(shù)來修改配置文件。
Logs
根據(jù)測試結(jié)果生成json。
根據(jù)json生成html頁面。
Build
執(zhí)行編譯,并輸出編譯日志到文件。
Change
檢查軟件包索引的改動。
Check
檢查Logs生成的json。
pkgs-test的運(yùn)行過程
首先使用Config讀取配置文件。輸入?yún)?shù)args.config是配置文件目錄。

config = Config(args.config)
讀取輸入的軟件包名稱。

pkgs_name = config.get_pkgs_name(args.pkg)
如果有輸入就保存輸入的名稱,輸入為空就從配置文件內(nèi)讀取。

def get_pkgs_name(self, pkg=[]):
if pkg:
return pkg
elif not (self.config_data['pkgs'] == None or self.config_data['pkgs'] == []):
return list(self.config_data['pkgs'])
return []
接著下載需要的資源。這里在ci工具里面會事先下載好一些資源,比如軟件包索引,如果該目錄已經(jīng)存在,則不會被覆蓋,可以用于測試這些還沒有發(fā)布的資源。

config.get_resources()
讀取軟件包索引。如果輸入?yún)?shù)nolatest那么就不保存latest版本。

packages_index = PackagesIndex(os.path.join(
config.get_path('env'), 'packages/packages'))
packages_index.nolatest(args.nolatest)
接著選擇測試的軟件包。

if args.repository:
        pkgs_config_dict = packages_index.repository_seek(args.repository)
    else:
        pkgs_config_dict = packages_index.name_seek(pkgs_name)

這里分為兩種情況,一種是作為ci使用,會輸出參數(shù)repository,另一種是本地使用,讀取前面保存的pkgs_name。

name_seek會判斷是不是測試全部軟件包,如果pkgs_name是all那么就會測試全部軟件包。

def name_seek(self, pkgs='all'):
if pkgs == 'all':
config_dict = self.dict
else:
config_dict = self.__get_config_pkgs(pkgs)
print(config_dict)
return config_dict
repository_seek會識別repository的類型,如果是軟件包倉庫就會在軟件包索引里面尋找,如果是packages軟件包索引倉庫就會使用Change尋找軟件包索引的改動,將改動的軟件包保存到pkgs_config_dict里面。

def repository_seek(self, repository):
pkgs = []
repository_name = repository.split("/")[1]
if repository_name == 'packages':
change = Change(os.path.join(Config().get_path('env'),"packages/packages"))
return self.name_seek(change.get_change_pkg_name())
for pkg in self.dict:
if repository_name.lower() in pkg['repository'].lower():
pkgs.append(pkg)
if len(pkgs) > 1:
pkgs_copy = list(pkgs)
for pkg in pkgs_copy:
if not repository_name in pkg['repository']:
pkgs_copy.remove(pkg)
if pkgs_copy:
pkgs = pkgs_copy
if not pkgs:
print('You may have changed the warehouse name while forking!!!')
return []
for pkg in pkgs[0]['pkg']:
if 'URL' in pkg:
pkg['URL'] = 'https://github.com/' + repository + '.git'
return pkgs
創(chuàng)建一個Log類,用于生成測試結(jié)果,這里的append_res是開啟從github pages下載舊的測試結(jié)果并且與新的合并。

logs = Logs('artifacts_export',
                config.get_config_data(), pkgs_config_dict)
if args.append_res:
        if args.pages_url:
            logs.pages_url = args.pages_url
        logs.append_res = True

最后執(zhí)行編譯,并根據(jù)編譯的log生成json和html。

build = Build(config, pkgs_config_dict, logs, args.j)
其中關(guān)于發(fā)布測試結(jié)果的部分在這里詳細(xì)說明一下。

執(zhí)行Logs.logs()會根據(jù)編譯日志生成測試結(jié)果json與html頁面。

其中有兩個json文件,pkgs_res_single是本次執(zhí)行pkgs-test產(chǎn)生的測試結(jié)果,pkgs_res是與舊的測試結(jié)果合并后的,如果沒有合并那么兩個json相同。這里從代碼可以看到,兩個json文件都使用__build_res生成,如果傳入True那么就會合并,如果False那么就只有本次結(jié)果。

index.html則是根據(jù)pkgs_res生成的頁面。

def logs(self):
pkgs_res_single_dict = self.__build_res(False)
with open(os.path.join(self.logs_path, 'pkgs_res_single.json'), 'w') as f:
json.dump(pkgs_res_single_dict, f)
self.pkgs_res_dict = self.__build_res(self.append_res)
with open(os.path.join(self.logs_path, 'pkgs_res.json'), 'w') as f:
json.dump(self.pkgs_res_dict, f)
logs_html = self.__html_report()
with open(os.path.join(self.logs_path, 'index.html'), 'w') as f:
for log in logs_html:
f.write(log)
Workflow的運(yùn)行過程
workflow分為3個job,packages-test用于測試軟件包,check-errors用于檢查測試結(jié)果,Deploy-Pages發(fā)布測試結(jié)果頁面。

packages-test

首先是下載運(yùn)行的倉庫和pkgs-tese倉庫。

  • uses: actions/checkout@v3
    with:
    path: repository
    • uses: actions/checkout@v3
      with:
      repository: '${{ inputs.pkgs-test-repository }}'
      ref: '${{ inputs.pkgs-test-branch }}'
      path: pkgs-test
      接下來是安裝一些軟件和工具。
  • name: Install Tools
    shell: bash
    run: |
    sudo apt install python3 python3-pip gcc git libncurses5-dev tree -y
    python3 -m pip install scons==4.4.0 requests tqdm wget dominate PyGithub requests pytz
    如果運(yùn)行的倉庫是軟件包索引,那么就把軟件包索引倉庫復(fù)制到后面需要下載軟件包索引的路徑。
  • name: Copy RT-Thread/packages to env
    if: "${{ endsWith(github.repository, '/packages') == true }}"
    shell: bash
    run: |
    cd ${{ github.workspace }}
    mkdir -p ./pkgs-test/env/packages
    cp -r ./repository ./pkgs-test/env/packages/packages
    根據(jù)輸入的配置參數(shù)下載對應(yīng)的資源,rt-thread、bsp對應(yīng)的工具鏈、env工具、軟件包索引。
  • name: Install Test Resources
    shell: bash
    run: |
    cd ${{ github.workspace }}/pkgs-test
    python pkgs-test.py config --rtthread='${{ inputs.rt-thread-versions }}'
    python pkgs-test.py config --bsps='${{ inputs.bsps }}'
    python pkgs-test.py download
    執(zhí)行編譯測試,這里根據(jù)輸入的參數(shù)會選擇是否測試全部軟件包,是否測試軟件包latest版本,是否合并測試結(jié)果。
  • name: Carry Out Packages Test
    shell: bash
    run: |
    cd ${{ github.workspace }}/pkgs-test
    echo 'Carry Out Packages Test.'
    if [[ ${{ inputs.package-test-all}} == true ]]; then
    COMMAND="python pkgs-test.py --pkg=all"
    else
    COMMAND="python pkgs-test.py --repository=${{ inputs.package-repository }}"
    fi
    if [[ ${{ inputs.package-test-nolatest}} == true ]]; then
    echo 'nolatest.'
    COMMAND="$COMMAND --nolatest"
    fi
    if [[ ${{ inputs.package-append-res}} == true ]]; then
    echo 'Append test res to old res from githubpage.'
    COMMAND="**COMMAND --append_res --pages_url='**{{ inputs.pages-url}}'"
    fi
    echo "$COMMAND"
    eval "$COMMAND"
    最后就是導(dǎo)出artifacts_export目錄的測試結(jié)果、一個是方便維護(hù)者下載、一個是用來發(fā)布頁面。
  • uses: actions/upload-artifact@v3
    with:
    name: artifacts_export
    path: ${{ github.workspace }}/pkgs-test/artifacts_export
    check-errors
    這個job比較簡單,就是根據(jù)下載的測試結(jié)果執(zhí)行判斷。

check-errors:
runs-on: ubuntu-latest
needs: packages-test
if: "${{ inputs.check-errors }}"
steps:

  • uses: actions/checkout@v3
    with:
    repository: '${{ inputs.pkgs-test-repository }}'
    ref: '${{ inputs.pkgs-test-branch }}'
  • name: Download artifacts_export
    uses: actions/download-artifact@v3
    with:
    name: artifacts_export
  • name: Install Tools
    shell: bash
    run: |
    sudo apt install python3 python3-pip -y
    python3 -m pip install requests tqdm wget dominate PyGithub requests pytz
  • name: Packages test whether or not error
    shell: bash
    run: |
    python pkgs-test.py check --file='pkgs_res_single.json'
    Deploy-Pages
    Deploy-Pages就是將artifacts_export發(fā)布到github pages。

Deploy-Pages:
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
needs: packages-test
if: "${{ inputs.deploy-pages }}"
steps:

  • name: Download artifacts_export
    uses: actions/download-artifact@v3
    with:
    name: artifacts_export
  • name: Setup Pages
    uses: actions/configure-pages@v3
  • name: Upload artifact
    uses: actions/upload-pages-artifact@v1
    with:

Upload entire repository

path: '.'

  • name: Deploy to GitHub Pages
    id: deployment
    uses: actions/deploy-pages@v2
    作為Github Action使用
    目前可以在軟件包索引倉庫和軟件包倉庫使用pkgs-test來測試軟件包的編譯情況。

Packages倉庫

軟件包索引倉庫里面目前有兩個功能,一個是當(dāng)發(fā)生改動的時候測試改動的軟件包,另外就是定時測試全部的軟件包。

改動測試

這里是Packages倉庫的軟件包測試workflow文件其中的一個job,目的是當(dāng)發(fā)生改動的時候測試改動的軟件包。

change:
if: ${{ github.event_name == 'pull_request' || github.event_name == 'push'}}
uses: RT-Thread/pkgs-test/.github/workflows/pkgs-action.yml@main
with:
package-append-res: true
deploy-pages: true

這里使用if進(jìn)行了判斷,當(dāng)workflow的觸發(fā)事件是pull_request或者push的時候,執(zhí)行change這個job。

傳入的參數(shù)有兩個,package-append-res用來開啟從github pages下載舊的測試結(jié)果并且與新的合并,deploy-pages用來開啟將測試結(jié)果發(fā)布到github pagses。

定時全部測試

這里我舉出兩個jobs的例子,測試master內(nèi)核版本下兩個bsp的軟件包編譯情況。

master-stm32h750-artpi-test:
if: ${{ github.event_name == 'schedule' || github.event_name == 'workflow_dispatch'}}
uses: RT-Thread/pkgs-test/.github/workflows/pkgs-action.yml@main
with:
bsps: stm32/stm32h750-artpi:sourcery-arm
rt-thread-versions: branch:master
package-append-res: true
package-test-all: true
deploy-pages: true
check-errors: false
master-k210-test:
if: ${{ github.event_name == 'schedule' || github.event_name == 'workflow_dispatch'}}
needs: master-stm32h750-artpi-test
uses:
with:
bsps: k210:sourcery-riscv-none-embed
rt-thread-versions: branch:master
package-append-res: true
package-test-all: true
deploy-pages: true
check-errors: false

測試全部軟件包的觸發(fā)事件有兩個,schedule定時測試和workflow_dispatch手動觸發(fā),這里也是使用if來判斷的。

這里注意一下,測試全部軟件包需要一個接著一個按順序測試,不能并行進(jìn)行測試,不然發(fā)布測試結(jié)果會產(chǎn)生沖突,workflow文件也用了concurrency這個參數(shù)來確保每次只有一個workflow在運(yùn)行,讓其余的進(jìn)行等待。

concurrency:
group: pkgs-test
cancel-in-progress: false # wait for finish.
然后解釋一下傳入的參數(shù)。

bsps指的就是測試的bsp和其使用的工具鏈,用冒號進(jìn)行分隔。
rt-thread-versions指的就是內(nèi)核的版本,branch和tag有兩種不同的輸入方法branch:master tag:v4.1.1
package-append-res表示的是從github pages下載舊的測試結(jié)果并且與新的合并。
package-test-all就是最主要的一個參數(shù),表示測試全部軟件包。
deploy-pages表示發(fā)布測試結(jié)果到GitHub pages。
check-errors表示關(guān)閉錯誤檢查,這里是因?yàn)橹饕康氖前l(fā)布測試結(jié)果,所以用不需要檢查是否有軟件包沒有通過編譯測試。

軟件包倉庫

軟件包倉庫的使用方法比較簡單,不需要輸入任何參數(shù),它的測試過程和本地測試基本上一致。

它的workflow文件是這樣的。

name: RT-Thread_Packages_Test
on:
[push, pull_request]
jobs:
pkgs-test:

未來會實(shí)現(xiàn)的功能

定期測試全部軟件包后會通知給軟件包所有者:使用action打開一個issue,在里面@有問題的軟件包作者。
增加一個軟件包可用性分級:1.有最新release版本可用。2.只有l(wèi)atest版本、或者最新版軟件包不可用但有舊版可用 3.全部失敗
再完善一下結(jié)果報告頁面,比如按類別給包分組。
針對rt-thread內(nèi)核的測試,對一個精選軟件包集合進(jìn)行測試。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • BSP
    BSP
    +關(guān)注

    關(guān)注

    1

    文章

    88

    瀏覽量

    26279
  • RT-Thread
    +關(guān)注

    關(guān)注

    31

    文章

    1306

    瀏覽量

    40436
收藏 人收藏

    評論

    相關(guān)推薦

    robortics 工具箱的使用方法

    哪位大神有關(guān)于matlab robotics工具箱的使用方法,一些函數(shù)調(diào)用,求分享?。?/div>
    發(fā)表于 05-05 21:49

    英飛凌MEMTOOL軟件介紹使用方法

    ,附件中詳細(xì)介紹了這款軟件支持的操作系統(tǒng)平臺、支持燒錄的英飛凌MCU系列和具體型號,并詳細(xì)介紹了軟件的使用方法。MEMTOOL軟件介紹使用方法
    發(fā)表于 12-14 09:39

    介紹示波器的特殊使用方法

    本文介紹了示波器的特殊使用方法。
    發(fā)表于 05-06 10:36

    assessPort工具使用方法

    這里主要講assessPort這個工具使用方法,所以代碼方面就給官方給的準(zhǔn)備1、將代碼編譯燒寫到芯片中,這里assessPort只是個工具,和板子芯片版本沒有關(guān)系。2、打開assessPort
    發(fā)表于 01-12 08:16

    介紹SPI的使用方法

    寫在最前使用RT-Thread Studio開發(fā)環(huán)境開發(fā)STM32單片機(jī)程序,與MDK使用env有一定的差別,對于剛開始使用的程序員來說,主要是找不到配置選項(xiàng)在哪里,上一篇介紹了TIM設(shè)備的使用方法
    發(fā)表于 02-17 06:32

    curl文件下載工具使用方法

    curl文件下載工具使用方法 curl是一個利用URL語法在命令行方
    發(fā)表于 12-04 13:03 ?1781次閱讀

    常用手機(jī)焊接工具使用方法

    常用手機(jī)焊接工具使用方法 主要學(xué)習(xí)以下幾點(diǎn) 1、掌握熱風(fēng)槍和電烙鐵的使用方法。2、掌握手機(jī)小元件
    發(fā)表于 03-23 17:40 ?3.3w次閱讀

    python中的字典(dict)對象以及其使用方法

    本文通過以英文的形式全面講解了python中的字典(dict)對象以及其使用方法。
    發(fā)表于 05-15 10:00 ?1次下載

    面包板的結(jié)構(gòu)和使用方法詳細(xì)介紹

    面包板是實(shí)驗(yàn)室中用于搭接電路的重要工具,熟練掌握面包板的使用方法是提高實(shí)驗(yàn)效率,減少實(shí)驗(yàn)故障出現(xiàn)幾率的重要基礎(chǔ)之一。下面就面包板的結(jié)構(gòu)和使用方法做簡單介紹
    發(fā)表于 10-31 08:00 ?0次下載
    面包板的結(jié)構(gòu)和<b class='flag-5'>使用方法</b>詳細(xì)<b class='flag-5'>介紹</b>

    新規(guī)劃PCI核查工具使用方法和應(yīng)用事例

    新規(guī)劃PCI核查工具使用方法和應(yīng)用事例
    發(fā)表于 09-01 15:12 ?3291次閱讀
    新規(guī)劃PCI核查<b class='flag-5'>工具</b>的<b class='flag-5'>使用方法</b>和應(yīng)用事例

    示波器的使用方法(三):示波器的使用方法詳解

    示波器的使用方法并非很難,重點(diǎn)在于正確使用示波器的使用方法。往期文章中,小編對模擬示波器的使用方法和數(shù)字示波器的使用方法均有所介紹。為增進(jìn)大
    的頭像 發(fā)表于 12-24 20:37 ?3396次閱讀

    動態(tài)追蹤技術(shù)分類及其使用方法

    文章介紹幾種常用的內(nèi)核動態(tài)追蹤技術(shù),對 ftrace、perf 及 eBPF 的使用方法進(jìn)行案例說明。
    的頭像 發(fā)表于 01-19 16:35 ?2977次閱讀
    動態(tài)追蹤技術(shù)分類<b class='flag-5'>及其</b><b class='flag-5'>使用方法</b>

    內(nèi)網(wǎng)穿透工具的種類、原理和使用方法

    本文以滲透的視角,總結(jié)幾種個人常用的內(nèi)網(wǎng)穿透,內(nèi)網(wǎng)代理工具,介紹其簡單原理和使用方法
    的頭像 發(fā)表于 08-25 10:35 ?2218次閱讀
    內(nèi)網(wǎng)穿透<b class='flag-5'>工具</b>的種類、原理和<b class='flag-5'>使用方法</b>

    如何使用pkgs-test工具進(jìn)行本地調(diào)試?

    pkgs-test作為一個可以在github actions上面運(yùn)行檢查軟件包編譯情況的工具,同時也可以在本地使用。
    的頭像 發(fā)表于 09-21 15:00 ?793次閱讀

    使用pkgs-test工具對軟件包進(jìn)行qemu測試

    pkgs-test是一個可以在github actions上面檢查軟件包編譯情況的工具。除了檢查軟件包的編譯情況pkgs-test目前還添加了qemu運(yùn)行測試。
    的頭像 發(fā)表于 09-25 16:19 ?814次閱讀